Android 开发实例简单涂鸦板

Android 开发实例简单涂鸦板,第1张

概述      在Android上开发一些小应用既可以积累知识又可以增加乐趣,与任务式开发不同,所以想到在Android系统上实现一个简单的涂鸦板,这是我们练手的一种好的方法。

       在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 开发实例简单涂鸦板所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/1148580.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-31
下一篇2022-05-31

发表评论

登录后才能评论

评论列表(0条)

    保存