Android开发:简单涂鸦板的实例

涂鸦板应用的代码实现

新建工程MyWall,修改/res/layout/main.xml文件,在里面添加一个SurfaceView和两个Button,用到了RelativeLayout布局,完整的main.xml文件如下:

玉门网站制作公司哪家好,找创新互联建站!从网页设计、网站建设、微信开发、APP开发、响应式网站设计等网站项目制作,到程序开发,运营维护。创新互联建站公司2013年成立到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选创新互联建站

 

  
 
 
  1.   
  2. android:layout_width="fill_parent"  
  3. android:layout_height="fill_parent"  
  4. android:orientation="vertical"  
  5. >  
  6. android:id="@+id/surfaceview"  
  7. android:layout_width="fill_parent"  
  8. android:layout_height="wrap_content"  
  9. android:layout_above="@+id/line"  
  10. android:layout_alignParentTop="true"  
  11. />  
  12. android:id="@+id/line"  
  13. android:layout_width="fill_parent"  
  14. android:layout_height="wrap_content"  
  15. android:layout_alignParentBottom="true"  
  16. >  
  17. android:id="@+id/flushbutton"  
  18. android:layout_width="fill_parent"  
  19. android:layout_height="wrap_content"  
  20. android:layout_weight="1"  
  21. android:text="清屏"  
  22. />  
  23. android:id="@+id/colorbutton"  
  24. android:layout_width="fill_parent"  
  25. android:layout_height="wrap_content"  
  26. android:layout_weight="1"  
  27. android:text="颜色"  
  28. />  
  29.   
  30.   

接着,修改MyWallActivity.java文件,最主要是重写了onTouchEvent()函数,在这个函数里过滤出触屏拖动事件,然后获取其相应的坐标和画线。完整的内容如下:

 
 
 
  1. package com.nan.wall;       
  2. import android.app.Activity;       
  3. import android.app.AlertDialog;       
  4. import android.app.Dialog;       
  5. import android.content.DialogInterface;       
  6. import android.graphics.Canvas;       
  7. import android.graphics.Color;       
  8. import android.graphics.Paint;       
  9. import android.graphics.Rect;       
  10. import android.os.Bundle;       
  11. import android.view.MotionEvent;       
  12. import android.view.SurfaceHolder;        
  13. import android.view.SurfaceView;       
  14. import android.view.View;        
  15. import android.widget.Button;        
  16. publicclass MyWallActivity extends Activity         
  17. {       
  18. private SurfaceView mSurfaceView = null;        
  19. private SurfaceHolder mSurfaceHolder = null;        
  20. private Button cleanButton = null;        
  21. private Button colorButton = null;        
  22. privatefloat oldX = 0f;        
  23. privatefloat oldY = 0f;        
  24. privateboolean canDraw = false;       
  25. private Paint mPaint = null;       
  26. //用来记录当前是哪一种颜色      
  27. privateint whichColor = 0;        
  28. /** Called when the activity is first created. */ 
  29. @Override 
  30. publicvoid onCreate(Bundle savedInstanceState)         
  31. {        
  32. super.onCreate(savedInstanceState);       
  33. setContentView(R.layout.main);       
  34. mSurfaceView = (SurfaceView)this.findViewById(R.id.surfaceview);       
  35. mSurfaceHolder = mSurfaceView.getHolder();       
  36. mPaint = new Paint();        
  37. //画笔的颜色      
  38. mPaint.setColor(Color.RED);        
  39. //画笔的粗细      
  40. mPaint.setStrokeWidth(2.0f);       
  41. cleanButton = (Button)this.findViewById(R.id.flushbutton);        
  42. //按钮监听      
  43. cleanButton.setOnClickListener(new View.OnClickListener()         
  44. {        
  45. @Override 
  46. publicvoid onClick(View v)         
  47. {        
  48. // TODO Auto-generated method stub      
  49. //锁定整个SurfaceView      
  50. Canvas mCanvas = mSurfaceHolder.lockCanvas();        
  51. mCanvas.drawColor(Color.BLACK);        
  52. //绘制完成,提交修改     
  53. mSurfaceHolder.unlockCanvasAndPost(mCanvas);        
  54. //重新锁一次      
  55. mSurfaceHolder.lockCanvas(new Rect(0, 0, 0, 0));        
  56. mSurfaceHolder.unlockCanvasAndPost(mCanvas);        
  57. }       
  58. });           
  59. colorButton = (Button)this.findViewById(R.id.colorbutton);       
  60. //按钮监听      
  61. colorButton.setOnClickListener(new View.OnClickListener()         
  62. {        
  63. @Override 
  64. publicvoid onClick(View v)        
  65. {        
  66. // TODO Auto-generated method stub     
  67. Dialog mDialog = new AlertDialog.Builder(MyWallActivity.this)        
  68. .setTitle("颜色设置")        
  69. .setSingleChoiceItems(new String[]{"红色","绿色","蓝色"}, whichColor, new DialogInterface.OnClickListener()         
  70. {        
  71. @Override 
  72. publicvoid onClick(DialogInterface dialog, int which)         
  73. {        
  74. // TODO Auto-generated method stub      
  75. switch(which)        
  76. {        
  77. case0:        
  78. {        
  79. //画笔的颜色      
  80. mPaint.setColor(Color.RED);        
  81. whichColor = 0;        
  82. break;        
  83. }        
  84. case1:        
  85. {        
  86. //画笔的颜色     
  87. mPaint.setColor(Color.GREEN);       
  88. whichColor = 1;       
  89. break;       
  90. }       
  91. case2:       
  92. {       
  93. //画笔的颜色106                                  
  94. mPaint.setColor(Color.BLUE); 
  95. whichColor = 2;                                  
  96. break;                                   
  97. }       
  98. }       
  99. }       
  100. })       
  101. .setPositiveButton("确定", new DialogInterface.OnClickListener()       
  102. {       
  103. @Override 
  104. publicvoid onClick(DialogInterface dialog, int which)        
  105. {       
  106. // TODO Auto-generated method stub     
  107. dialog.dismiss();       
  108. }       
  109. })       
  110. .create();       
  111. mDialog.show();       
  112. }       
  113. });       
  114. @Override 
  115. publicboolean onTouchEvent(MotionEvent event)       
  116. {             
  117. //获取x坐标     
  118. float x = event.getX();       
  119. //获取y坐标(不知道为什么要减去一个偏移值才对得准屏幕)     
  120. float y = event.getY()-50;       
  121. //第一次进来先不管     
  122. if(canDraw)       
  123. {            
  124. //获取触屏事件     
  125. switch(event.getAction())       
  126. {       
  127. //如果是拖动事件     
  128. case MotionEvent.ACTION_MOVE:       
  129. {       
  130. //锁定整个SurfaceView     
  131. Canvas mCanvas = mSurfaceHolder.lockCanvas();           
  132. mCanvas.drawLine(x, y, oldX, oldY, mPaint);       
  133. mSurfaceHolder.unlockCanvasAndPost(mCanvas);       
  134. //重新锁一次     
  135. mSurfaceHolder.lockCanvas(new Rect(0, 0, 0, 0));       
  136. mSurfaceHolder.unlockCanvasAndPost(mCanvas);       
  137. break;       
  138. }       
  139. }       
  140. }       
  141. //保存目前的x坐标值     
  142. oldX = x;       
  143. //保存目前的y坐标值     
  144. oldY = y;       
  145. canDraw = true;       
  146. returntrue;       
  147. }       
  148. }      

 

应用测试

在模拟器上运行此应用是如下效果:

在Android手机上运行效果则是这样的:

字写的有点丑,但是功能实现了。在获取了Y坐标后减去一个偏移值50,这个值是猜出来的,没想到在模拟器和真机上定位得都还蛮准的。

应用比较简易,但是大家可以在此基础上丰富它的功能,使其成为一个像样的Android应用。

新闻标题:Android开发:简单涂鸦板的实例
文章地址:http://www.csdahua.cn/qtweb/news38/57238.html

网站建设、网络推广公司-快上网,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 快上网