View类是Android的一个超类,这个类几乎包含了所有的屏幕类型,每一个View都有一个用户绘画的画布。任何一个View类都只要重写onDraw方法来实现界面显示。

package com.Aina.Android;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.view.View;public class ImageView extends View {public static int x = 20;public static int y = 20;public ImageView(Context context) {super(context);}/** * 绘制方法. */@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);Paint paint = new Paint();paint.setColor(Color.RED);//设置颜色canvas.drawRect(x, y, x+40, y+40, paint);//绘制一个矩形}}


package com.Aina.Android;import android.app.Activity;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.view.KeyEvent;import android.view.MotionEvent;import android.view.Window;import android.view.WindowManager;import android.util.DisplayMetrics;import android.util.Log;public class Test_View extends Activity {/** Called when the activity is first created. */private ImageView iv = null;private static final int MSG = 0x0000001;private int DisplayWidth = 0, DisplayHeight = 0;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);//隐藏标题栏和状态栏也可以设置主题(Theme)在AndridManifest.xml里面设置:android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen"Window window = this.getWindow();window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);//隐藏状态栏this.requestWindowFeature(Window.FEATURE_NO_TITLE);//隐藏标题栏iv = new ImageView(this);setContentView(iv);// 获得屏幕宽带和高度DisplayMetrics dm = new DisplayMetrics();this.getWindowManager().getDefaultDisplay().getMetrics(dm);DisplayWidth = dm.widthPixels;// 屏幕宽带DisplayHeight = dm.heightPixels;// 屏幕高度MyThread th = new MyThread();th.start();}private Handler handle = new Handler() {public void handleMessage(Message msg) {super.handleMessage(msg);if (msg.what == MSG) {iv.invalidate();// 更新界面}}};class MyThread extends Thread {public void run() {while (!Thread.currentThread().isInterrupted()) {// 当前线程没有中断try {Message msg = new Message();msg.what = MSG;Test_View.this.handle.sendMessage(msg);// 发送消息Thread.sleep(100);} catch (Exception ex) {ex.printStackTrace();Thread.currentThread().interrupt();// 中断当前线程.}}}}/*使用postInvalidate()方法更新界面,可以直接在线程里面更新。 * class MyThread extends Thread { public void run() { while * (!Thread.currentThread().isInterrupted()) {// 当前线程没有中断 try { * Thread.sleep(100); iv.postInvalidate(); } catch (Exception ex) { * ex.printStackTrace(); Thread.currentThread().interrupt();// 中断当前线程. } } } * } *//** * 触笔事件 */@Overridepublic boolean onTouchEvent(MotionEvent event) {int x = (int) event.getX();int y = (int) event.getY();ImageView.x = x;ImageView.y=y;Log.d("EVENT", x+"|"+y);return super.onTouchEvent(event);}/** * 键盘按下事件 */@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {switch (keyCode) {case KeyEvent.KEYCODE_DPAD_DOWN:// 向下Log.d("y", ImageView.y + "");if (ImageView.y + 40 >= DisplayHeight) {ImageView.y = DisplayHeight - 40;} else {ImageView.y += 5;}break;case KeyEvent.KEYCODE_DPAD_UP:// 向上if (ImageView.y <= 0) {ImageView.y = 0;} else {ImageView.y -= 5;}break;case KeyEvent.KEYCODE_DPAD_LEFT:// 向左if (ImageView.x <= 0) {ImageView.x = 0;} else {ImageView.x -= 5;}break;case KeyEvent.KEYCODE_DPAD_RIGHT:// 向右if (ImageView.x + 40 >= DisplayWidth) {ImageView.x = DisplayWidth - 40;} else {ImageView.x += 5;}break;default:break;}return super.onKeyDown(keyCode, event);}/** * 键盘按下之后弹起事件 */@Overridepublic boolean onKeyUp(int keyCode, KeyEvent event) {return super.onKeyUp(keyCode, event);}}

更多相关文章

  1. Google Android官方文档进程与线程(Processes and Threads)翻译
  2. Android-Jni线程(一)— 创建线程
  3. 如何让你的手机屏幕固定横屏和竖屏
  4. Android应用界面开发_学习笔记_第二周
  5. Android 线程池相关知识
  6. Android屏幕截图实现 (adbd部分)
  7. Android屏幕信息获取
  8. ViewPager实现QQ主界面,ViewFlipper实现某些新闻应用,自动播放,很
  9. 调用Android自带的联系人选择界面

随机推荐

  1. 访问器属性原理及获取DOM元素方法
  2. classList对象与用blur事件进行表单非空
  3. js操作class和使用blur事件进行表单非空
  4. html 学习
  5. 字符串与数组常用api学习
  6. JS 函数
  7. 图文列表和课程表
  8. 头发如何上色?SAI头发上色技法!
  9. 字符串和数组的API演示
  10. 如何快速画出金属的质感?金属质感的画法