Android画布更新过程OnDraw调用过程

onDraw是触发的外置接口,用户可以复写这个方法,这样当回调onDraw时,就可以绘制出用户需要的画面

这个接口方法类似onLayout的回调,利用layout(l,t,r,b)就可以触发。 而这里onDraw方法需要invalidateI() 或者postInvalidate()来触发

发布了34 篇原创文章 · 获赞 30 · 访问量 27万+
展开阅读全文

为什么TextView.onDraw会被调用???

09-02

[code="xml"] <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:id="@+id/title" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="----" /> <com.myTextViewDemo.MyTextView android:id="@+id/text" android:layout_width="fill_parent" android:layout_height="wrap_content" /> <Button android:id="@+id/btn" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="change" /> </LinearLayout> [/code] [code="java"] public class MyTextViewDemo extends Activity { private MyTextView mt; private Button btn; private TextView tv; private int i = 0; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mt = (MyTextView) findViewById(R.id.text); tv = (TextView) findViewById(R.id.title); btn = (Button) findViewById(R.id.btn); btn.setOnClickListener(new Button.OnClickListener() { @Override public void onClick(View v) { tv.setText("adsf:" + i++); } }); } } [/code] 自定义TextView [code="java"] public class MyTextView extends TextView { public MyTextView(Context context) { super(context); } public MyTextView(Context context, AttributeSet attrs) { super(context, attrs); } public MyTextView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } @Override protected void onDraw(Canvas canvas) { System.out.println("--------------- onDraw --------------"); super.onDraw(canvas); } } [/code] 现在的问题是,当点击button时,会改变title的值,但是MyTextView.onDraw也会被调用,而且点击几次就调用几次,这是为什么?? 问答

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览