Android自定义视图只会调用onDraw一次

edo*_*fic 3 java user-interface android rendering view

我做了一个自定义视图,它应该根据一些外部数据为背景上的点设置动画.(就像带有textviews的魅力一样)

然后在xml中添加视图并设置android:background.

视图正确呈现但不更新.一些调试显示onDraw只被调用一次.缺什么?

我的自定义视图的代码:

 public class Gmeter extends ImageView {
    private Bitmap dot;
    private float dotHeight, dotWidth;

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

        dot = BitmapFactory.decodeResource(getContext().getResources(), R.drawable.g_dot);
        dotWidth = dot.getWidth();
        dotHeight = dot.getHeight();
    }

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

        float dataX =(float) Data.getX();

        float x = (getWidth()-dotWidth)/2f;
        float y = (getHeight()-dotHeight)/2f;

        x+= dataX * getWidth() /2f;

        canvas.drawBitmap(dot, x, y, null);
    }

}
Run Code Online (Sandbox Code Playgroud)

Bri*_*uis 5

无论是什么设置x,Data需要调用invalidate()告诉View它需要根据新数据重绘.在View无法了解你的心思,知道什么时候新的数据可用:).

并且肯定将它与数据更新联系起来...如果你invalidate()从你内部打电话,onDraw()你会有一个浪费CPU周期的好方法.