加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – Android自定义视图只能调用onDraw一次

发布时间:2020-12-15 08:47:30 所属栏目:Java 来源:网络整理
导读:我做了一个自定义视图,它应该根据一些外部数据为背景上的点设置动画. (就像带有textviews的魅力一样) 然后在xml中添加视图并设置android:background. 视图正确呈现但不更新.一些调试显示onDraw只被调用一次.缺什么? 我的自定义视图的代码: public class G
我做了一个自定义视图,它应该根据一些外部数据为背景上的点设置动画. (就像带有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);
    }

}

解决方法

无论在数据中设置x都需要调用invalidate()来告诉View它需要根据新数据重绘.当新数据可用时,View无法读懂您的想法:).

并且肯定将它与数据更新联系起来……如果你从onDraw()中调用invalidate(),你将有一个浪费CPU周期的好方法.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读