永发信息网

android invalidate()调用onDraw()引起重绘。这段代码为何无法运行?

答案:2  悬赏:80  手机版
解决时间 2021-02-20 16:24
  • 提问者网友:呐年旧曙光
  • 2021-02-20 04:22
public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(new View(null){
Paint paint=new Paint();
int i =0;
public void onDraw(Canvas canvas){
super.onDraw(canvas);

// 设定绘图样式
paint.setColor( 0xff00ffff ); //画笔颜色
paint.setAntiAlias( true ); //反锯齿
paint.setStyle( Paint.Style.STROKE );

// 绘制一个弧形
canvas.drawArc(new RectF(60, 120, 260, 320), 0, i, true, paint );

// 弧形角度
if( (i+=10) > 360 )
i = 0;

// 重绘, 再一次执行onDraw 程序
invalidate();

}
});

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}

}
最佳答案
  • 五星知识达人网友:底特律间谍
  • 2021-02-20 05:28
setContentView(new View(null){。。。});改成setContentView(new View(this){。。。});试试。
全部回答
  • 1楼网友:迟山
  • 2021-02-20 05:54
android中实现view的更新有两组方法,一组是invalidate,另一组是postinvalidate,其中前者是在ui线程自身中使用,而后者在非ui线程中使用。 android提供了invalidate方法实现界面刷新,但是invalidate不能直接在线程中调用,因为他是违背了单线程模型:android ui操作并不是线程安全的,并且这些操作必须在ui线程中调用。 android程序中可以使用的界面刷新方法有两种,分别是利用handler和利用postinvalidate()来实现在线程中刷新界面。 1,利用invalidate()刷新界面 实例化一个handler对象,并重写handlemessage方法调用invalidate()实现界面刷新;而在线程中通过sendmessage发送界面更新消息。 // 在oncreate()中开启线程 new thread(new gamethread()).start();、 // 实例化一个handler handler myhandler = new handler() { // 接收到消息后处理 public void handlemessage(message msg) { switch (msg.what) { case activity01.refresh: mgameview.invalidate(); // 刷新界面 break; } super.handlemessage(msg); } }; class gamethread implements runnable { public void run() { while (!thread.currentthread().isinterrupted()) { message message = new message(); message.what = activity01.refresh; // 发送消息 activity01.this.myhandler.sendmessage(message); try { thread.sleep(100); } catch (interruptedexception e) { thread.currentthread().interrupt(); }
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯