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;
}
}
android invalidate()调用onDraw()引起重绘。这段代码为何无法运行?
答案:2 悬赏:80 手机版
解决时间 2021-02-20 16:24
- 提问者网友:呐年旧曙光
- 2021-02-20 04:22
最佳答案
- 五星知识达人网友:底特律间谍
- 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();
}
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯