Android没有重绘API 16上的无效视图

时间:2014-03-22 19:56:16

标签: android api invalidation

我已经实现了ZoomView,我在其中绘制了许多项目,当我点击其中一个时,它会更改它的视图并调用invalidate。这适用于我测试的所有地方(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 个答案:

没有答案