Skip to content

Commit 598462d

Browse files
author
1170762202@qq.com
committed
...
1 parent 8f58eb5 commit 598462d

File tree

29 files changed

+1327
-40
lines changed

29 files changed

+1327
-40
lines changed

library-base/src/main/java/com/zlx/module_base/loadsir/LoadingCallback.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ protected int onCreateView() {
2424
//是否在显示Callback视图的时候显示原始图(SuccessView),返回true显示,false隐藏
2525
@Override
2626
public boolean getSuccessVisible() {
27-
return super.getSuccessVisible();
27+
return true;
2828
}
2929

3030
//将Callback添加到当前视图时的回调,View为当前Callback的布局View

library-base/src/main/res/layout/base_layout_loading.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
android:id="@+id/ll_loading"
44
android:layout_width="match_parent"
55
android:layout_height="match_parent"
6+
android:background="@android:color/transparent"
67
android:gravity="center">
78

89
<ProgressBar

library-common/build.gradle

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,5 +31,4 @@ dependencies {
3131
api rootProject.ext.dependencies.appcompat
3232
api rootProject.ext.dependencies.mmkv
3333
api rootProject.ext.dependencies.glide
34-
3534
}

library-common/src/main/java/com/zlx/library_common/adapters/RvAdapterArticleList.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import com.zlx.library_common.constrant.C;
1111
import com.zlx.library_common.res_data.ArticleBean;
1212
import com.zlx.library_common.util.GlideUtil;
13+
import com.zlx.library_common.widget.shinebutton.ShineButton;
1314

1415
import org.jetbrains.annotations.NotNull;
1516

@@ -55,8 +56,10 @@ protected void convert(@NotNull BaseViewHolder baseViewHolder, ArticleBean artic
5556
}
5657
baseViewHolder.setText(R.id.tvTitle, articleBean.getTitle())
5758
.setText(R.id.tvAuthor, TextUtils.isEmpty(articleBean.getAuthor()) ? articleBean.getShareUser() : articleBean.getAuthor())
58-
.setGone(R.id.top, !(hasTop && baseViewHolder.getAdapterPosition() == 0))
59-
.setImageResource(R.id.ivCollect, articleBean.isCollect() ? R.mipmap.ic_collect : R.mipmap.ic_uncollect);
59+
.setGone(R.id.top, !(hasTop && baseViewHolder.getAdapterPosition() == 0));
60+
ShineButton shineButton = baseViewHolder.getView(R.id.ivCollect);
61+
shineButton.setChecked(articleBean.isCollect());
62+
6063
}
6164

6265
/**
Lines changed: 154 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,154 @@
1+
package com.zlx.library_common.widget.shinebutton;
2+
3+
import android.content.Context;
4+
import android.graphics.Bitmap;
5+
import android.graphics.Canvas;
6+
import android.graphics.Color;
7+
import android.graphics.Matrix;
8+
import android.graphics.Paint;
9+
import android.graphics.PorterDuff;
10+
import android.graphics.PorterDuffXfermode;
11+
import android.graphics.drawable.ColorDrawable;
12+
import android.graphics.drawable.Drawable;
13+
import android.util.AttributeSet;
14+
import android.util.Log;
15+
16+
import androidx.appcompat.widget.AppCompatImageView;
17+
18+
19+
public abstract class PorterImageView extends AppCompatImageView {
20+
private static final String TAG = PorterImageView.class.getSimpleName();
21+
22+
private static final PorterDuffXfermode PORTER_DUFF_XFERMODE = new PorterDuffXfermode(PorterDuff.Mode.DST_IN);
23+
24+
private Canvas maskCanvas;
25+
private Bitmap maskBitmap;
26+
private Paint maskPaint;
27+
28+
private Canvas drawableCanvas;
29+
private Bitmap drawableBitmap;
30+
private Paint drawablePaint;
31+
32+
int paintColor = Color.GRAY;
33+
34+
private boolean invalidated = true;
35+
36+
public PorterImageView(Context context) {
37+
super(context);
38+
setup(context, null, 0);
39+
}
40+
41+
public PorterImageView(Context context, AttributeSet attrs) {
42+
super(context, attrs);
43+
setup(context, attrs, 0);
44+
}
45+
46+
public PorterImageView(Context context, AttributeSet attrs, int defStyle) {
47+
super(context, attrs, defStyle);
48+
setup(context, attrs, defStyle);
49+
}
50+
51+
private void setup(Context context, AttributeSet attrs, int defStyle) {
52+
if(getScaleType() == ScaleType.FIT_CENTER) {
53+
setScaleType(ScaleType.CENTER_CROP);
54+
}
55+
56+
maskPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
57+
maskPaint.setColor(Color.BLACK);
58+
}
59+
60+
public void setSrcColor(int color){
61+
paintColor = color;
62+
setImageDrawable(new ColorDrawable(color));
63+
if(drawablePaint!=null){
64+
drawablePaint.setColor(color);
65+
invalidate();
66+
}
67+
}
68+
69+
public void invalidate() {
70+
invalidated = true;
71+
super.invalidate();
72+
}
73+
74+
@Override
75+
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
76+
super.onSizeChanged(w, h, oldw, oldh);
77+
createMaskCanvas(w, h, oldw, oldh);
78+
}
79+
80+
private void createMaskCanvas(int width, int height, int oldw, int oldh) {
81+
boolean sizeChanged = width != oldw || height != oldh;
82+
boolean isValid = width > 0 && height > 0;
83+
if(isValid && (maskCanvas == null || sizeChanged)) {
84+
maskCanvas = new Canvas();
85+
maskBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
86+
maskCanvas.setBitmap(maskBitmap);
87+
88+
maskPaint.reset();
89+
paintMaskCanvas(maskCanvas, maskPaint, width, height);
90+
91+
drawableCanvas = new Canvas();
92+
drawableBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
93+
drawableCanvas.setBitmap(drawableBitmap);
94+
drawablePaint = new Paint(Paint.ANTI_ALIAS_FLAG);
95+
drawablePaint.setColor(paintColor);
96+
invalidated = true;
97+
}
98+
}
99+
100+
protected abstract void paintMaskCanvas(Canvas maskCanvas, Paint maskPaint, int width, int height);
101+
102+
@Override
103+
protected void onDraw(Canvas canvas) {
104+
if (!isInEditMode()) {
105+
int saveCount = canvas.saveLayer(0.0f, 0.0f, getWidth(), getHeight(), null, Canvas.ALL_SAVE_FLAG);
106+
try {
107+
if (invalidated) {
108+
Drawable drawable = getDrawable();
109+
if (drawable != null) {
110+
invalidated = false;
111+
Matrix imageMatrix = getImageMatrix();
112+
if (imageMatrix == null){// && mPaddingTop == 0 && mPaddingLeft == 0) {
113+
drawable.draw(drawableCanvas);
114+
} else {
115+
int drawableSaveCount = drawableCanvas.getSaveCount();
116+
drawableCanvas.save();
117+
drawableCanvas.concat(imageMatrix);
118+
drawable.draw(drawableCanvas);
119+
drawableCanvas.restoreToCount(drawableSaveCount);
120+
}
121+
122+
drawablePaint.reset();
123+
drawablePaint.setFilterBitmap(false);
124+
drawablePaint.setXfermode(PORTER_DUFF_XFERMODE);
125+
drawableCanvas.drawBitmap(maskBitmap, 0.0f, 0.0f, drawablePaint);
126+
}
127+
}
128+
129+
if (!invalidated) {
130+
drawablePaint.setXfermode(null);
131+
canvas.drawBitmap(drawableBitmap, 0.0f, 0.0f, drawablePaint);
132+
}
133+
} catch (Exception e) {
134+
String log = "Exception occured while drawing " + getId();
135+
Log.e(TAG, log, e);
136+
} finally {
137+
canvas.restoreToCount(saveCount);
138+
}
139+
} else {
140+
super.onDraw(canvas);
141+
}
142+
}
143+
144+
@Override
145+
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
146+
if (widthMeasureSpec == 0) {
147+
widthMeasureSpec = 50;
148+
}
149+
if (heightMeasureSpec == 0) {
150+
heightMeasureSpec = 50;
151+
}
152+
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
153+
}
154+
}
Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
package com.zlx.library_common.widget.shinebutton;
2+
3+
import android.content.Context;
4+
import android.content.res.TypedArray;
5+
import android.graphics.Canvas;
6+
import android.graphics.Matrix;
7+
import android.graphics.Paint;
8+
import android.graphics.drawable.BitmapDrawable;
9+
import android.graphics.drawable.Drawable;
10+
import android.util.AttributeSet;
11+
12+
import com.zlx.library_common.R;
13+
14+
15+
public class PorterShapeImageView extends PorterImageView {
16+
private Drawable shape;
17+
private Matrix matrix;
18+
private Matrix drawMatrix;
19+
20+
public PorterShapeImageView(Context context) {
21+
super(context);
22+
setup(context, null, 0);
23+
}
24+
25+
public PorterShapeImageView(Context context, AttributeSet attrs) {
26+
super(context, attrs);
27+
setup(context, attrs, 0);
28+
}
29+
30+
public PorterShapeImageView(Context context, AttributeSet attrs, int defStyle) {
31+
super(context, attrs, defStyle);
32+
setup(context, attrs, defStyle);
33+
}
34+
35+
private void setup(Context context, AttributeSet attrs, int defStyle) {
36+
if(attrs != null){
37+
TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.PorterImageView, defStyle, 0);
38+
shape = typedArray.getDrawable(R.styleable.PorterImageView_siShape);
39+
typedArray.recycle();
40+
}
41+
matrix = new Matrix();
42+
}
43+
44+
public void setShape(Drawable drawable) {
45+
shape = drawable;
46+
invalidate();
47+
}
48+
49+
@Override
50+
protected void paintMaskCanvas(Canvas maskCanvas, Paint maskPaint, int width, int height) {
51+
if(shape != null) {
52+
if (shape instanceof BitmapDrawable) {
53+
configureBitmapBounds(getWidth(), getHeight());
54+
if(drawMatrix != null) {
55+
int drawableSaveCount = maskCanvas.getSaveCount();
56+
maskCanvas.save();
57+
maskCanvas.concat(matrix);
58+
shape.draw(maskCanvas);
59+
maskCanvas.restoreToCount(drawableSaveCount);
60+
return;
61+
}
62+
}
63+
64+
shape.setBounds(0, 0, getWidth(), getHeight());
65+
shape.draw(maskCanvas);
66+
}
67+
}
68+
69+
private void configureBitmapBounds(int viewWidth, int viewHeight) {
70+
drawMatrix = null;
71+
int drawableWidth = shape.getIntrinsicWidth();
72+
int drawableHeight = shape.getIntrinsicHeight();
73+
boolean fits = viewWidth == drawableWidth && viewHeight == drawableHeight;
74+
75+
if (drawableWidth > 0 && drawableHeight > 0 && !fits) {
76+
shape.setBounds(0, 0, drawableWidth, drawableHeight);
77+
float widthRatio = (float) viewWidth / (float) drawableWidth;
78+
float heightRatio = (float) viewHeight / (float) drawableHeight;
79+
float scale = Math.min(widthRatio, heightRatio);
80+
float dx = (int) ((viewWidth - drawableWidth * scale) * 0.5f + 0.5f);
81+
float dy = (int) ((viewHeight - drawableHeight * scale) * 0.5f + 0.5f);
82+
83+
matrix.setScale(scale, scale);
84+
matrix.postTranslate(dx, dy);
85+
}
86+
}
87+
}
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package com.zlx.library_common.widget.shinebutton;
2+
3+
import android.animation.ValueAnimator;
4+
import android.graphics.Canvas;
5+
6+
import com.zlx.library_common.widget.shinebutton.interpolator.Ease;
7+
import com.zlx.library_common.widget.shinebutton.interpolator.EasingInterpolator;
8+
9+
10+
/**
11+
* Created by zlx on 2020/9/27 14:53
12+
* Email: 1170762202@qq.com
13+
* Description:
14+
*/
15+
public class ShineAnimator extends ValueAnimator {
16+
17+
float MAX_VALUE = 1.5f;
18+
long ANIM_DURATION = 1500;
19+
Canvas canvas;
20+
21+
ShineAnimator() {
22+
setFloatValues(1f, MAX_VALUE);
23+
setDuration(ANIM_DURATION);
24+
setStartDelay(200);
25+
setInterpolator(new EasingInterpolator(Ease.QUART_OUT));
26+
}
27+
ShineAnimator(long duration,float max_value,long delay) {
28+
setFloatValues(1f, max_value);
29+
setDuration(duration);
30+
setStartDelay(delay);
31+
setInterpolator(new EasingInterpolator(Ease.QUART_OUT));
32+
}
33+
34+
void startAnim() {
35+
start();
36+
}
37+
38+
public void setCanvas(Canvas canvas) {
39+
this.canvas = canvas;
40+
}
41+
42+
43+
}

0 commit comments

Comments
 (0)