android view 绘图,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、付费专栏及课程。

余额充值