
在AndroID上开发一些小应用既可以积累知识又可以增加乐趣,与任务式开发不同,所以想到在AndroID系统上实现一个简单的涂鸦板,这是我们练手的一种好的方法。
涂鸦板应用的代码实现
新建工程MyWall,修改/res/layout/main.xml文件,在里面添加一个SurfaceVIEw和两个button,用到了relativeLayout布局,完整的main.xml文件如下:
XML/HTML代码
<?xml version="1.0" enCoding="utf-8"?> <relativeLayout xmlns:androID="http://schemas.androID.com/apk/res/androID" androID:layout_wIDth="fill_parent" androID:layout_height="fill_parent" androID:orIEntation="vertical" > <SurfaceVIEw androID:ID="@+ID/surfacevIEw"androID:layout_wIDth="fill_parent"androID:layout_height="wrap_content"androID:layout_above="@+ID/line"androID:layout_alignParenttop="true"/> <linearLayoutandroID:ID="@+ID/line"androID:layout_wIDth="fill_parent"androID:layout_height="wrap_content"androID:layout_alignParentBottom="true"> <buttonandroID:ID="@+ID/flushbutton"androID:layout_wIDth="fill_parent"androID:layout_height="wrap_content"androID:layout_weight="1"androID:text="清屏"/> <buttonandroID:ID="@+ID/colorbutton"androID:layout_wIDth="fill_parent"androID:layout_height="wrap_content"androID:layout_weight="1" androID:text="颜色"/></linearLayout></relativeLayout>
接着,修改MyWallActivity.java文件,最主要是重写了ontouchEvent()函数,在这个函数里过滤出触屏拖动事件,然后获取其相应的坐标和画线。完整的内容如下:
Java代码
package com.nan.wall; import androID.app.Activity; import androID.app.AlertDialog; import androID.app.Dialog; import androID.content.DialogInterface; import androID.graphics.Canvas; import androID.graphics.color; import androID.graphics.Paint; import androID.graphics.Rect; import androID.os.Bundle; import androID.vIEw.MotionEvent; import androID.vIEw.SurfaceHolder; import androID.vIEw.SurfaceVIEw; import androID.vIEw.VIEw; import androID.Widget.button; public class MyWallActivity extends Activity { private SurfaceVIEw mSurfaceVIEw = null; private SurfaceHolder mSurfaceHolder = null; private button cleanbutton = null; private button colorbutton = null; private float oldX = 0f; private float oldY = 0f; private boolean canDraw = false; private Paint mPaint = null; //用来记录当前是哪一种颜色 private int whichcolor = 0; /** Called when the activity is first created. */ @OverrIDe public voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentVIEw(R.layout.main); mSurfaceVIEw = (SurfaceVIEw)this.findVIEwByID(R.ID.surfacevIEw); mSurfaceHolder = mSurfaceVIEw.getHolder(); mPaint = new Paint(); //画笔的颜色 mPaint.setcolor(color.RED); //画笔的粗细 mPaint.setstrokeWIDth(2.0f); cleanbutton = (button)this.findVIEwByID(R.ID.flushbutton); //按钮监听 cleanbutton.setonClickListener(new VIEw.OnClickListener() { @OverrIDe public voID onClick(VIEw v) { // Todo auto-generated method stub //锁定整个SurfaceVIEw Canvas mCanvas = mSurfaceHolder.lockCanvas(); mCanvas.drawcolor(color.BLACK); //绘制完成,提交修改 mSurfaceHolder.unlockCanvasAndPost(mCanvas); //重新锁一次 mSurfaceHolder.lockCanvas(new Rect(0,0)); mSurfaceHolder.unlockCanvasAndPost(mCanvas); } }); colorbutton = (button)this.findVIEwByID(R.ID.colorbutton); //按钮监听 colorbutton.setonClickListener(new VIEw.OnClickListener() { @OverrIDe public voID onClick(VIEw v) { // Todo auto-generated method stub Dialog mDialog = new AlertDialog.Builder(MyWallActivity.this) .setTitle("颜色设置") .setSingleChoiceItems(new String[]{"红色","绿色","蓝色"},whichcolor,new DialogInterface.OnClickListener() { @OverrIDe public voID onClick(DialogInterface dialog,int which) { // Todo auto-generated method stub switch(which) { case 0: { //画笔的颜色 mPaint.setcolor(color.RED); whichcolor = 0; break; } case 1: { //画笔的颜色 mPaint.setcolor(color.GREEN); whichcolor = 1; break; } case 2: { //画笔的颜色106 mPaint.setcolor(color.BLUE); whichcolor = 2; break; } } } }) .setPositivebutton("确定",new DialogInterface.OnClickListener() { @OverrIDe public voID onClick(DialogInterface dialog,int which) { // Todo auto-generated method stub dialog.dismiss(); } }) .create(); mDialog.show(); } }); @OverrIDe public boolean ontouchEvent(MotionEvent event) { //获取x坐标 float x = event.getX(); //获取y坐标(不知道为什么要减去一个偏移值才对得准屏幕) float y = event.getY()-50; //第一次进来先不管 if(canDraw) { //获取触屏事件 switch(event.getAction()) { //如果是拖动事件 case MotionEvent.ACTION_MOVE: { //锁定整个SurfaceVIEw Canvas mCanvas = mSurfaceHolder.lockCanvas(); mCanvas.drawline(x,y,oldX,oldY,mPaint); mSurfaceHolder.unlockCanvasAndPost(mCanvas); //重新锁一次 mSurfaceHolder.lockCanvas(new Rect(0,0)); mSurfaceHolder.unlockCanvasAndPost(mCanvas); break; } } } //保存目前的x坐标值 oldX = x; //保存目前的y坐标值 oldY = y; canDraw = true; return true; } } 应用测试
在模拟器上运行此应用是如下效果:
在AndroID手机上运行效果则是这样的:
字写的有点丑,但是功能实现了。在获取了Y坐标后减去一个偏移值50,这个值是猜出来的,没想到在模拟器和真机上定位得都还蛮准的。
应用比较简易,但是大家可以在此基础上丰富它的功能,使其成为一个像样的AndroID应用。
以上就是AndroID 简单涂鸦板的简单示例,后续继续整理相关资料,谢谢大家对本站的支持!
总结以上是内存溢出为你收集整理的Android 开发实例简单涂鸦板全部内容,希望文章能够帮你解决Android 开发实例简单涂鸦板所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)