作者daytodayme
http://www.iteye.com/topic/435147
调用Handler.post(Runnable r)方法,Runnable运行在UI所在线程,所以可以直接调用View.invalidate()
引用
package com.ray.test;
import android.app.Activity;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
public class TestHandler extends Activity {
private MyView myView;
private Handler mHandler;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
myView = new MyView(this);
mHandler = new Handler();
mHandler.post(new Runnable(){
@Override
public void run() {
myView.invalidate();
mHandler.postDelayed(this, 5);
}
});
setContentView(myView);
}
class MyView extends View{
private float x = 0f;
public MyView(Context context) {
super(context);
}
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
x+=1;
Paint mPaint = new Paint();
mPaint.setColor(Color.BLUE);
canvas.drawRect(x, 40, x+40, 80, mPaint);
}
}
}
在新线程里更新UI,可以直接postInvalidate()
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
myView = new MyView(this);
this.setContentView(this.myView);
new Thread(new myThread()).start();
}
class myThread implements Runnable {
public void run() {
while (!Thread.currentThread().isInterrupted()) {
try {
myView.postInvalidate();
Thread.sleep(100);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
}
}
分享到:
相关推荐
例如,一个线程负责游戏画面的更新,另一个线程则处理用户的操作,这样即使在计算密集型操作时,也能保证游戏界面的流畅显示。 在实现多线程时,开发者通常会用到Java或C++等编程语言的线程库,如Java的`java.lang....
1. **主线程**:负责游戏的整体控制和协调,如初始化界面、处理用户输入以及游戏结束时的结算。 2. **显示线程**:用于实时显示待打的文本,确保文字流畅滚动,不因输入处理而阻塞。它可能包含一个缓冲区,存储即将...
3. **UI更新线程**:游戏界面的更新,包括显示计分、提示信息、游戏状态等,应该在一个与游戏逻辑分离的线程中进行。这样可以确保即使游戏逻辑线程在进行复杂计算,UI仍然能够及时刷新,提供良好的视觉反馈。 4. **...
主线程通常负责游戏的主循环,它不断地绘制游戏画面、更新游戏状态。例如,在Java中,我们可以利用`javax.swing.JFrame`和`javax.swing.Timer`来创建窗口和定时器,定时器每隔一定时间调用回调方法,更新游戏状态并...
蛇的移动线程负责计算蛇的位置并更新游戏界面,而食物生成线程则定时在合适的位置创建新的食物,增加游戏的挑战性。 1. **线程基础**:在Java中,我们可以使用`Thread`类或者实现`Runnable`接口来创建线程。创建一...
如果抽奖结果需要在UI上实时更新,那么就需要确保更新操作是线程安全的,例如通过使用`SwingUtilities.invokeLater()`方法来更新UI组件,这样可以确保在事件调度线程中执行,防止出现线程冲突。 总的来说,这个项目...
3. **用户界面更新线程**:在用户完成打字后,更新游戏界面,如显示正确和错误的字符,以及当前的打字速度。由于UI更新通常涉及到控件的操作,C#中通常使用`Control.Invoke`或`Control.BeginInvoke`来保证在UI线程中...
【Java多线程赛马游戏】是一个通过Java编程语言实现的互动小游戏,它巧妙地结合了多线程技术和Swing图形用户界面库。这个项目旨在展示如何在Java中创建并发执行的任务,模拟赛马比赛的过程,并提供用户友好的图形...
9. **异常处理**:由于多线程可能导致的不确定性和并发问题,异常处理是必不可少的,以确保游戏在遇到错误时能优雅地处理而不是崩溃。 10. **源码分析**:博客中提供的源码可能是分析的重点,通过阅读和学习,读者...
游戏中的“bar”文件夹可能包含了游戏的进度条、生命值条等元素的图片,这些都是游戏界面不可或缺的部分,通过动态更新这些元素的状态,可以让玩家直观地了解游戏进程。 地图("map")是游戏世界的基础,它定义了...
2. **渲染线程**:独立于主循环,负责绘制游戏画面,保证视觉效果的流畅。 3. **输入处理线程**:监听用户的键盘或鼠标输入,实时响应玩家的操作。 4. **音频播放线程**:处理背景音乐和音效播放,确保声音的同步和...
4. **UI更新**:游戏界面的更新应该在UI线程上进行,以避免界面无响应。因此,可能使用了`Control.Invoke`或`Control.BeginInvoke`来在UI线程中执行更新操作。 5. **性能优化**:多线程可以提高性能,但过度使用也...
【Java多线程打字游戏】是一个非常适合Java初学者学习的项目,它涵盖了Java编程语言中的几个关键概念,包括多线程、AWT(Abstract Window Toolkit)和Swing图形用户界面库。在这个打字游戏中,玩家需要在限定时间内...
游戏通常有一个主循环,负责处理用户输入、更新游戏状态和渲染画面。多线程可以用来实现并发的游戏逻辑,例如一个线程处理用户输入,另一个线程处理游戏逻辑,从而提高游戏性能。 七、事件和委托 C#中的事件和委托...
3. **用户交互**:用户界面(UI)允许玩家点击选择落子位置,游戏逻辑需要监听这些事件,处理玩家的动作,并更新棋盘状态。 4. **游戏状态管理**:包括游戏开始、进行中、结束等状态的管理,以及平局、胜利等判断。...
在本游戏中,可能需要确保在任何时刻只有一个线程能够更新小球的状态。 最后,为了使用户界面(UI)保持流畅,开发者可能使用了双缓冲技术,即在后台创建一个缓冲区绘制新的小球位置,然后一次性将缓冲区的内容复制...
这个程序的特点是弹球会随机出现、随机选择颜色,并且在碰到边界时能自动反弹,充分展示了多线程技术在游戏和图形用户界面中的应用。 首先,我们需要理解Java中的线程。在Java中,每个运行的程序都至少有一个线程,...