Android onDraw()在所有视图上执行?

Android onDraw()在所有视图上执行?,第1张

概述这是一个我不了解自定义视图的奇怪行为.我在框架布局中有两个视图,一个在另一个上面.观点很简单,我只是为了进行简短的测试 public class View1 extends View {.... @Override public boolean onTouchEvent(MotionEvent event) { if (event.getAction() 这是一个我不了解自定义视图的奇怪行为.我在框架布局中有两个视图,一个在另一个上面.观点很简单,我只是为了进行简短的测试

public class VIEw1  extends VIEw  {....    @OverrIDe     public boolean ontouchEvent(MotionEvent event) {        if (event.getAction() == MotionEvent.ACTION_DOWN){            this.updateDrawings();        }        return true;    }    @OverrIDe    protected voID onDraw(Canvas canvas) {        super.onDraw(canvas);        if (canvas != null)         {            Log.i("Test","Draw VIEw1");        }    }    public voID updateDrawings() {        try {            this.invalIDate();        }        finally {        }    }}

和VIEw2

public class VIEw2  extends VIEw  {....    @OverrIDe    protected voID onDraw(Canvas canvas) {        super.onDraw(canvas);        if (canvas != null)         {            Log.i("Test","Draw VIEw2");        }    }    public voID updateDrawings() {        try {            this.invalIDate();        }        finally {        }    }}

FrameLayout上包装好的东西

<FrameLayout        xmlns:androID="http://schemas.androID.com/apk/res/androID"        androID:orIEntation="vertical"        androID:layout_wIDth="fill_parent"        androID:layout_height="fill_parent"        androID:layout_weight="1"        androID:background="#ffffff">        <linearLayout            androID:orIEntation="horizontal"            androID:layout_wIDth="fill_parent"            androID:layout_height="fill_parent"            androID:layout_weight="1">            <com.VIEw2                androID:layout_centerInParent="true"                androID:layout_wIDth="fill_parent"                androID:layout_height="fill_parent"                androID:layout_marginBottom="5dip" />        </linearLayout>        <linearLayout            androID:orIEntation="horizontal"            androID:layout_wIDth="fill_parent"            androID:layout_height="fill_parent"            androID:layout_weight="1">            <com.VIEw1                androID:layout_centerInParent="true"                androID:layout_wIDth="fill_parent"                androID:layout_height="fill_parent"                androID:layout_marginBottom="5dip" />        </linearLayout></FrameLayout>

我的问题是:为什么当ontouch从VIEw1执行时,两个视图的onDraw()方法都会执行?为什么不只是VIEw1的?

稍后编辑VIEw2有一个要绘制的大图像,图像根据一些保存的首选项旋转和缩放.通常,当我启动Activity时,VIEw2.onDraw()负责旋转,转换和缩放Bitmap并在画布上绘制它.当用户触摸VIEw1时,我只想执行VIEw1.onDraw(),因为没有必要为每个用户交互反复重绘相同的背景图像.如何停止VIEw2.onDraw()执行?

解决方法 我认为这应该回答你的问题:

http://developer.android.com/reference/android/view/ViewParent.html#requestLayout()

“当某些内容发生变化时调用,这会使该视图父项的子项布局无效.这将调度视图树的布局过程.”

总结

以上是内存溢出为你收集整理的Android onDraw()在所有视图上执行?全部内容,希望文章能够帮你解决Android onDraw()在所有视图上执行?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1124348.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-30
下一篇 2022-05-30

发表评论

登录后才能评论

评论列表(0条)

保存