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);
}
}
分享到:
相关推荐
android自定义View实现手绘地图,包括自定义view与自定义ViewGroup两种实现方式
自己在各个博客copy总结下来的,适合刚刚接触View绘图机制或者Android源代码的初学者学习,浅显易懂
android 自定义view(Paint和Canvas),安卓自定义View,安卓自定义。
整个 View 树的绘图流程在ViewRoot.java类的performTraversals()函数展开,该函数所做 的工作可简单概况为是否需要重新计算视图大小(measure)、是否需要重新安置视图的位置(layout)、以及是否需要重绘(draw),流程图...
1、实现了画直线、矩形、圆形、手绘线。 2、实现了橡皮擦功能,对图上的线段可以擦除。 3、画完的图形可以保存为jpg格式的图片
View类是Android的一个超类,这个类几乎包含了所有的屏幕类型。每一个View都有一个用于绘图的画布,这个画布可以进行任意扩展。在游戏开发中往往需要自定义视图(View),这个画布的功能更能满足我们在游戏开发中的需要...
android.view 显示类 android.widget 控件类 一、android.content.res.Resources 对于Android平台的资源类android.content.res.Resources可能很多网友比较陌生,一起来看看SDK上是怎么介绍的吧,Contains ...
前几天在“Android绘图之渐隐动画”一文中通过画线实现了渐隐动画,但里面有个问题,画笔较粗(大于1)时线段之间会有裂隙,我又改进了一下。这次效果好多了。 先看效果吧: 然后我们来说说基本的做法: •根据...
以下是对Android通过onDraw实现在View中绘图操作的示例代码进行了详细的分析介绍,需要的朋友可以过来参考下
使用traceview和dmtracedump调试Android代码 ✿Android程序调试工具 Google为我们提供的代码调试工具的亮点:traceview和dmtracedump。有了这两个工具,我们调试程序分析bug就非常得心应手了。traceview帮助...
实现了一个有趣的小东西:使用自定义View绘图,一边画线,画出的线条渐渐变淡,直到消失。效果如下图所示: 用属性动画或者渐变填充(Shader)可以做到一笔一笔的变化,但要想一笔渐变(手指不抬起边画边渐隐),没...
自定义view:简单了解Paint常用设置,Canvas的常用方法;
主要为大家详细介绍了Android自定义View绘图实现渐隐动画,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
4.2 View简介 4.2.1 使用View创建Activity(活动)用户界面 4.2.2 Android Widget工具箱 4.3 布局简介 4.4 创建新的View 4.4.1 修改现有的View 4.4.2 创建复合控件 4.4.3 创建定制的Widget和控件 4.4.4 使用定制的控件...
作为使用androidsdk构建这些应用程序的实用指南书籍,《android高级编程》从始至终穿插了一系列示例项目,每个项目都引入android的新功能和新技术,以助您达到最圆满的学习效果。书中介绍android的所有基本功能,并...
三种得到LinearInflater的方法 a. LayoutInflater inflater = getLayoutInflater(); b....(LayoutInflater)context....onDraw 方法绘图,invalidate刷新界面。 效果图: 点击一下换颜色 onDraw画完图后,给控件设置点
1.3.2 使用Android模拟器 (Emulator) 14 1.3.3 使用DDMS进行调试 15 1.3.4 Android Debug Bridge(ADB) 的用法 16 1.3.5 使用DX编译Android应用 18 1.3.6 使用Android Asset Packaging Tool...
Android 自定义Paint画笔 canvas绘图例子,本例子中所用到的方法继承自android.view.View,是一个自定义View的范例,同时可学习画笔的定义: Paint paint;//画笔 public MyView(Context context) {//构造器 ...