KotlinStudy/Android/Demo1/RightGradual.java
2022-08-23 16:29:06 +08:00

57 lines
2.0 KiB
Java
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.LinearGradient;
import android.graphics.Paint;
import android.graphics.PorterDuff;
import android.graphics.PorterDuffXfermode;
import android.graphics.Shader;
import android.graphics.Xfermode;
import androidx.recyclerview.widget.RecyclerView;
/**
* RecyclerView右側渐变的itemDecoration
* 渐变参考文档https://blog.csdn.net/u010126792/article/details/85237085
* 半透明则是由0→黑的渐变效果
* 使用方法: RecyclerView.addItemDecoration(new RightGradual());
*/
public class RightGradual extends RecyclerView.ItemDecoration {
private Paint mPaint;
private Xfermode mXfermode;
private LinearGradient mLinearGradient;
private int mLayerId;
public RightGradual() {
mPaint = new Paint();
mXfermode = new PorterDuffXfermode(PorterDuff.Mode.DST_IN);
mLinearGradient = null;
}
@Override
public void onDrawOver(Canvas canvas, RecyclerView parent, RecyclerView.State state) {
super.onDrawOver(canvas, parent, state);
float left=parent.getRight()-parent.getRight()/0.1f;
float top=0f;
float right=parent.getRight();
float bottom=parent.getBottom();
if(mLinearGradient==null){
mLinearGradient=new LinearGradient(parent.getMeasuredWidth(), 0.0f, 0.0f, 0.0f, new int[]{0, Color.BLACK}, new float[]{0.0f,0.2f}, Shader.TileMode.CLAMP);
}
mPaint.setXfermode(mXfermode);
mPaint.setShader(mLinearGradient);
//mPaint.setColor(Color.BLUE);
canvas.drawRect(left, top,right, bottom, mPaint);
mPaint.setXfermode(null);
canvas.restoreToCount(mLayerId);
}
@Override
public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) {
super.onDraw(c, parent, state);
mLayerId = c.saveLayer(0.0f, 0.0f, (float) parent.getWidth(), (float) parent.getHeight(), mPaint, Canvas.ALL_SAVE_FLAG);
}
}