Android 使用View类绘图

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);
}

/**
* 绘制方法.
*/
@Override
protected 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;

@Override
public 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();// 中断当前线程. } } }
* }
*/
/**
* 触笔事件
*/
@Override
public 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);
}

/**
* 键盘按下事件
*/
@Override
public 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);
}

/**
* 键盘按下之后弹起事件
*/
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {

return super.onKeyUp(keyCode, event);
}

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值