Android не перерисовывает недействительное представление в API 16

Я реализовал ZoomView, на котором я рисую много элементов, и когда я нажимаю на один из них, он меняет свой вид и вызывает недействительные вызовы. Это работает везде, где я тестировал (API 8, API 10, API 19), но не работает с API 16.

В API 16 проблема заключается в том, что измененный элемент перерисовывается только тогда, когда я двигаюсь с экраном в моем ZoomView.

И что еще более странно, даже если все элементы идентичны и имеют только различную позицию, некоторые из них перерисовываются при нажатии, а некоторые нет. Работающие элементы - это элементы в верхнем левом углу, которые можно нарисовать на экране в масштабе 1 и перевести [0,0].

Проблема, вероятно, с моим ZoomView, вот упрощенный код:

public class ZoomView extends FrameLayout {
//SOME VARIABLES

public ZoomView(Context context) {
    super(context);

    setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
    setBackgroundColor(getResources().getColor(R.color.background));

    scaleDetector = new ScaleGestureDetector(context, new ScaleListener());
}

@Override
public boolean dispatchTouchEvent(final MotionEvent ev) {
    //COMPUTE TRANSLATION OR DETERMINE WHERE IT WAS CLICKED
}

@Override
protected void dispatchDraw(final Canvas canvas) {
    canvas.save();
    canvas.translate(posX, posY);
    canvas.scale(scaleFactor, scaleFactor);
    v.draw(canvas);
    canvas.restore();
}

private class ScaleListener extends ScaleGestureDetector.SimpleOnScaleGestureListener {
    @Override
    public boolean onScale(ScaleGestureDetector detector) {
        //COMPUTE SCALE AND CALL INVALIDATE
    }
}
}

0 ответов

Другие вопросы по тегам