View类是Android的一个超类,这个类几乎包含了所有的屏幕类型。在Android中,任何一个View类都只需要重写onDraw()方法来实现界面显示。自定义的视图可以是复杂的3D实现,也可以是非常简单的文本形式。Android中提供了invalidate方法来实现界面的刷新,注意,invalidate不能直接在线程中调用,因为他违背了单线呈模型:Android UI操作并不是线程安全的,并且这些操作必须在UI线程中执行,因此Android中最长用的方法是利用Handler来实现UI线程的更新


1.写一个类继承View类,一般要重写ondraw方法。一般而言我们去自己绘制一个view,在另一个activity中setContentView(view)去引用它。


public class GameView extends View {
static int count = 0 ;
static int y = 0;
public GameView(Context context) {
super(context);

}

@Override
protected void onDraw(Canvas canvas) {
if (count<100) {
count++;
}
else {
count = 0 ;
}
Paint paint = new Paint();
switch (count%4) {
case 0:
paint.setColor(Color.BLUE);
break;

case 1:
paint.setColor(Color.RED);
break;
case 2:
paint.setColor(Color.GRAY);

break;
case 3:
paint.setColor(Color.GREEN);
break;
}
canvas.drawRect((320-80)/2, y, (320-80)/2+80, y+40, paint);
super.onDraw(canvas);
}


}

2

写一个activity。

public class ViewTestActivity extends Activity {
/** Called when the activity is first created. */
public static GameView gameView;
public static Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
if (msg.what ==11) {

}
super.handleMessage(msg);
}
};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
gameView = new GameView(this);
setContentView(gameView);
new Thread(new GameThread()).start();
}

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
switch (keyCode) {
case KeyEvent.KEYCODE_DPAD_DOWN:
GameView.y+= 3;
break;

case KeyEvent.KEYCODE_DPAD_UP:
GameView.y-=3;
break;
}
return super.onKeyDown(keyCode, event);
}
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
return true;
}

@Override
public boolean onTouchEvent(MotionEvent event) {
// TODO Auto-generated method stub
return true;
}
}

class GameThread implements Runnable{

@Override
public void run() {
while (!Thread.currentThread().isInterrupted()) {

try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
Thread.currentThread().interrupt();

}
ViewTestActivity.gameView.postInvalidate();//使用postnvalidate可以直接在线程中更新界面
}
}

}


更多相关文章

  1. 浅谈Java中Collections.sort对List排序的两种方法
  2. Python list sort方法的具体使用
  3. python list.sort()根据多个关键字排序的方法实现
  4. android上一些方法的区别和用法的注意事项
  5. Android(安卓)Activity界面切换添加动画特效
  6. Android(安卓)拨号器的简单实现
  7. android实现字体闪烁动画的方法
  8. Android中dispatchDraw分析
  9. android用户界面之按钮(Button)教程实例汇

随机推荐

  1. Android中callback(接口回调)机制
  2. android 颜色、 透明度参考表
  3. Android(安卓)uses-feature
  4. android典型代码系列(二十八)------通话
  5. Android(安卓)SDK 有bug
  6. [Android(安卓)Samples视频系列之ApiDemo
  7. Android-Skillful-Craftsman(Android能工
  8. Android(安卓)判断Intent是否存在
  9. Android中文API(140) —— DexFile
  10. Android中打开新的Activity的三种方法