滚动后未绘制Recyclerview内的自定义视图

问题描述 投票:0回答:1

我有一个自定义视图,绘制一个凹形(在屏幕截图上用红色矩形可视化)。此自定义视图是我的回收器视图元素布局的一部分,该布局还包含具有背景颜色的普通视图(右侧部分)。

这是我的自定义视图的摘录(没有旋转,但是相同的绘图方法):

    public class InvertedCircleView extends View {

    private Paint mPaint;
    private float mCanvasCenterX;

    private float mCenterCircleWidth, mCenterCircleHeight;


    public InvertedCircleView(Context context, AttributeSet attrs) {
        super(context, attrs);

        mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
        setLayerType(View.LAYER_TYPE_SOFTWARE, null);
    }

    @Override
    public void onDraw(Canvas canvas) {
        super.onDraw(canvas);

     [...]
        mPaint.setStyle(Paint.Style.FILL);
        canvas.drawPaint(mPaint);

        mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));

        mCenterCircleWidth = canvas.getWidth();        
        mCenterCircleHeight = canvas.getHeight();        

        mCanvasCenterX = canvas.getWidth() / 2;

        canvas.drawOval(mCanvasCenterX - (mCenterCircleWidth / 2),
                -mCenterCircleHeight,
                mCanvasCenterX + (mCenterCircleWidth / 2),
                mCenterCircleHeight,
                mPaint);
    }
 }

当Recyclerview第一次出现时,一切看起来都很好。但是当我向下(或向上)向下滚动时,自定义视图部分在所有新元素上都不可见。

到目前为止我测试了什么:

  • setItemViewCacheSize - >这会有所帮助,但是当我再次向上滚动时,它会显示相同的错误结果
  • notifyDataSetChanged - >这直接导致所有元素的“错误”可视化

这种行为可能是什么原因?

enter image description here

android android-recyclerview android-canvas
1个回答
0
投票

发现我的错误:我使用了“mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));”在onDraw函数中。但我忘了最后重置Xfermode。

我添加了行“mPaint.setXfermode(null);”一切按预期工作:)

© www.soinside.com 2019 - 2024. All rights reserved.