Пользовательский вид в окне реселлера не отображается после прокрутки - PullRequest
0 голосов
/ 03 марта 2019

У меня есть собственное представление, которое рисует вогнутую форму (визуализируется с красным прямоугольником на скриншоте).Этот пользовательский вид является частью моего макета элемента вида рециркулятора, который также содержит простой вид с цветом фона (правая часть).

Это фрагмент моего пользовательского вида (без поворота, но с теми же методами рисования):

    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);
    }
 }

Когда в первый раз появляется окно рециркулятора, все выглядит хорошо.Но когда я прокручиваю вниз (или вверх), часть пользовательского представления не видна на всех новых элементах.

Что я тестировал до сих пор:

  • setItemViewCacheSize -> это помогает, но когда я снова прокручиваю вверх, он показывает тот же плохой результат
  • notifyDataSetChanged -> это напрямую приводит к "неправильной" визуализации для всех элементов

В чем может быть причина такого поведения?

enter image description here

1 Ответ

0 голосов
/ 03 марта 2019

Обнаружил мою ошибку: я использовал "mPaint.setXfermode (new PorterDuffXfermode (PorterDuff.Mode.CLEAR));"в функции onDraw.Но я забыл сбросить Xfermode в конце.

Я добавил строку "mPaint.setXfermode (null);"и все работает как положено:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...