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周期的好方法. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |