2013-11-19 10:52 117人阅读 评论(0) 收藏 举报

HandWritingActivity.java

  1. package xiaosi.handWriting;
  2. import android.app.Activity;
  3. import android.app.AlertDialog;
  4. import android.content.DialogInterface;
  5. import android.os.Bundle;
  6. import android.view.View;
  7. import android.view.View.OnClickListener;
  8. import android.widget.Button;
  9. public class HandWritingActivity extends Activity
  10. {
  11. /** Called when the activity is first created. */
  12. private HandWrite handWrite = null;
  13. private Button clear = null;
  14. @Override
  15. public void onCreate(Bundle savedInstanceState)
  16. {
  17. super.onCreate(savedInstanceState);
  18. setContentView(R.layout.main);
  19. handWrite = (HandWrite)findViewById(R.id.handwriteview);
  20. clear = (Button)findViewById(R.id.clear);
  21. clear.setOnClickListener(new clearListener());
  22. }
  23. private class clearListener implements OnClickListener{
  24. public void onClick(View v)
  25. {
  26. handWrite.clear();
  27. }
  28. }
  29. }
  1. package xiaosi.handWriting;
  2. import android.app.Activity;
  3. import android.app.AlertDialog;
  4. import android.content.DialogInterface;
  5. import android.os.Bundle;
  6. import android.view.View;
  7. import android.view.View.OnClickListener;
  8. import android.widget.Button;
  9. public class HandWritingActivity extends Activity
  10. {
  11. /** Called when the activity is first created. */
  12. private HandWrite handWrite = null;
  13. private Button clear = null;
  14. @Override
  15. public void onCreate(Bundle savedInstanceState)
  16. {
  17. super.onCreate(savedInstanceState);
  18. setContentView(R.layout.main);
  19. handWrite = (HandWrite)findViewById(R.id.handwriteview);
  20. clear = (Button)findViewById(R.id.clear);
  21. clear.setOnClickListener(new clearListener());
  22. }
  23. private class clearListener implements OnClickListener{
  24. public void onClick(View v)
  25. {
  26. handWrite.clear();
  27. }
  28. }
  29. }

HandWrite.java

  1. public class HandWrite extends View
  2. {
  3. private Paint paint = null;
  4. private Bitmap originalBitmap = null;
  5. private Bitmap new1Bitmap = null;
  6. private Bitmap new2Bitmap = null;
  7. private float clickX = 0,clickY = 0;
  8. private float startX = 0,startY = 0;
  9. private boolean isMove = true;
  10. private boolean isClear = false;
  11. private int color = Color.GREEN;
  12. private float strokeWidth = 2.0f;
  13. public HandWrite(Context context, AttributeSet attrs)
  14. {
  15. super(context, attrs);
  16. originalBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.girl_a);
  17. new1Bitmap = Bitmap.createBitmap(originalBitmap);
  18. }
  19. public void clear(){
  20. isClear = true;
  21. new2Bitmap = Bitmap.createBitmap(originalBitmap);
  22. invalidate();
  23. }
  24. public void setstyle(float strokeWidth){
  25. this.strokeWidth = strokeWidth;
  26. }
  27. @Override
  28. protected void onDraw(Canvas canvas)
  29. {
  30. super.onDraw(canvas);
  31. canvas.drawBitmap(HandWriting(new1Bitmap), 0, 0,null);
  32. }
  33. public Bitmap HandWriting(Bitmap originalBitmap)
  34. {
  35. Canvas canvas = null;
  36. if(isClear){
  37. canvas = new Canvas(new2Bitmap);
  38. }
  39. else{
  40. canvas = new Canvas(originalBitmap);
  41. }
  42. paint = new Paint();
  43. paint.setStyle(Style.STROKE);
  44. paint.setAntiAlias(true);
  45. paint.setColor(color);
  46. paint.setStrokeWidth(strokeWidth);
  47. if(isMove){
  48. canvas.drawLine(startX, startY, clickX, clickY, paint);
  49. }
  50. startX = clickX;
  51. startY = clickY;
  52. if(isClear){
  53. return new2Bitmap;
  54. }
  55. return originalBitmap;
  56. }
  57. @Override
  58. public boolean onTouchEvent(MotionEvent event)
  59. {
  60. clickX = event.getX();
  61. clickY = event.getY();
  62. if(event.getAction() == MotionEvent.ACTION_DOWN){
  63. isMove = false;
  64. invalidate();
  65. return true;
  66. }
  67. else if(event.getAction() == MotionEvent.ACTION_MOVE){
  68. isMove = true;
  69. invalidate();
  70. return true;
  71. }
  72. return super.onTouchEvent(event);
  73. }
  74. }
  1. public class HandWrite extends View
  2. {
  3. private Paint paint = null;
  4. private Bitmap originalBitmap = null;
  5. private Bitmap new1Bitmap = null;
  6. private Bitmap new2Bitmap = null;
  7. private float clickX = 0,clickY = 0;
  8. private float startX = 0,startY = 0;
  9. private boolean isMove = true;
  10. private boolean isClear = false;
  11. private int color = Color.GREEN;
  12. private float strokeWidth = 2.0f;
  13. public HandWrite(Context context, AttributeSet attrs)
  14. {
  15. super(context, attrs);
  16. originalBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.girl_a);
  17. new1Bitmap = Bitmap.createBitmap(originalBitmap);
  18. }
  19. public void clear(){
  20. isClear = true;
  21. new2Bitmap = Bitmap.createBitmap(originalBitmap);
  22. invalidate();
  23. }
  24. public void setstyle(float strokeWidth){
  25. this.strokeWidth = strokeWidth;
  26. }
  27. @Override
  28. protected void onDraw(Canvas canvas)
  29. {
  30. super.onDraw(canvas);
  31. canvas.drawBitmap(HandWriting(new1Bitmap), 0, 0,null);
  32. }
  33. public Bitmap HandWriting(Bitmap originalBitmap)
  34. {
  35. Canvas canvas = null;
  36. if(isClear){
  37. canvas = new Canvas(new2Bitmap);
  38. }
  39. else{
  40. canvas = new Canvas(originalBitmap);
  41. }
  42. paint = new Paint();
  43. paint.setStyle(Style.STROKE);
  44. paint.setAntiAlias(true);
  45. paint.setColor(color);
  46. paint.setStrokeWidth(strokeWidth);
  47. if(isMove){
  48. canvas.drawLine(startX, startY, clickX, clickY, paint);
  49. }
  50. startX = clickX;
  51. startY = clickY;
  52. if(isClear){
  53. return new2Bitmap;
  54. }
  55. return originalBitmap;
  56. }
  57. @Override
  58. public boolean onTouchEvent(MotionEvent event)
  59. {
  60. clickX = event.getX();
  61. clickY = event.getY();
  62. if(event.getAction() == MotionEvent.ACTION_DOWN){
  63. isMove = false;
  64. invalidate();
  65. return true;
  66. }
  67. else if(event.getAction() == MotionEvent.ACTION_MOVE){
  68. isMove = true;
  69. invalidate();
  70. return true;
  71. }
  72. return super.onTouchEvent(event);
  73. }
  74. }

main.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="fill_parent"
  4. android:layout_height="fill_parent"
  5. android:orientation="vertical" >
  6. <xiaosi.handWriting.HandWrite
  7. android:id="@+id/handwriteview"
  8. android:layout_width="fill_parent"
  9. android:layout_height="380dp" />
  10. <LinearLayout
  11. android:layout_width="fill_parent"
  12. android:layout_height="fill_parent"
  13. android:orientation="horizontal"
  14. android:gravity="center_horizontal" >
  15. <Button
  16. android:id="@+id/clear"
  17. android:layout_width="200dp"
  18. android:layout_height="wrap_content"
  19. android:text="清屏" />
  20. </LinearLayout>
  21. </LinearLayout>

Android学习笔记进阶之在图片上涂鸦(能清屏)的更多相关文章

  1. Android学习笔记进阶16之BitmapShader

    <1>简介 具体的看一下博文:Android学习笔记进阶15之Shader渲染 public   BitmapShader(Bitmap bitmap,Shader.TileMode ti ...

  2. Android学习笔记进阶17之LinearGradient

    具体的看一下博文:Android学习笔记进阶15之Shader渲染 package xiaosi.BitmapShader; import android.app.Activity; import a ...

  3. Android学习笔记进阶18 之画图并保存图片到本地

    1.首先创建一个Bitmap图片,并指定大小:   2.在该图片上创建一个新的画布Canvas,然后在画布上绘制,并保存即可:   3.需要保存的目录File,注意如果写的目录如“/sdcard/so ...

  4. Android学习笔记进阶18之画图并保存图片到本地

    1.首先创建一个Bitmap图片,并指定大小:   2.在该图片上创建一个新的画布Canvas,然后在画布上绘制,并保存即可:   3.需要保存的目录File,注意如果写的目录如“/sdcard/so ...

  5. ASP.NET学习笔记 —— 一般处理程序之图片上传

    简单图片上传功能目标:实现从本地磁盘读取图片文件,展示到浏览器页面.步骤:(1). 首先创建一个用于上传图片的HTML模板,命名为ImageUpload.html: <!DOCTYPE html ...

  6. Android 学习笔记进阶十二之裁截图片

    package xiaosi.cut; import java.io.File; import android.app.Activity; import android.content.Intent; ...

  7. Android学习笔记进阶20 之得到图片的缩略图

    <1>简介 之前往往是通过Bitmap.Drawable和Canvas配合完成,需要写一系列繁杂的逻辑去缩小原有图片,从而得到缩略图. 现在我给大家介绍一种比较简单的方法:(网上有) 在A ...

  8. Android学习笔记进阶20之得到图片的缩略图

    <1>简介 之前往往是通过Bitmap.Drawable和Canvas配合完成,需要写一系列繁杂的逻辑去缩小原有图片,从而得到缩略图. 现在我给大家介绍一种比较简单的方法:(网上有) 在A ...

  9. Android学习笔记进阶十一图片动画播放(AnimationDrawable)

    大家平时见到的最多的可能就是Frame动画了,Android中当然也少不了它.它的使用更加简单,只需要创建一个 AnimationDrawabledF对象来表示Frame动画,然后通过addFrame ...

随机推荐

  1. LoadImage函数问题

    loadimage函数加载图片类型 Value Meaning IMAGE_BITMAP Loads a bitmap. IMAGE_CURSOR Loads a cursor. IMAGE_ICON ...

  2. iOS之《 Human Interface Guidelines:from Concept to Product 》<界面设计指南 二>:从概念到产品的实现

    开发之前需要想到的: 1.列出所有用户可能喜欢的功能. 例子:食谱 (1)创建一个总的食谱菜单 (2)食谱的获取方法  (3)比较价格 (4)当地的食材店 (5)食谱每道菜的注释 (6)能够获取和使用 ...

  3. 待研究之iOS硬件调研

    1.磁力计 完成指南针 参考类:CLLocationManager,CLHeading 2.照相机 完成一个按钮点击拍照,拍照完使用照片,一个按钮打开系统相册 选择图片 参考类: UIImagePic ...

  4. SWUST0249 (凸包面积)

    type node=record x,y:longint; end; ; var k,q,qq:longint; sum:double; f,g:..maxn] of node; m,i,j,a,b: ...

  5. 用Inno Setup来解决.NetFramework安装问题

    用Inno Setup来解决.NetFramework安装问题 2010-03-01 09:59:26 标签:.Net Framework Setup 休闲 Inno 原创作品,允许转载,转载时请务必 ...

  6. D - 排列

    #include<cstdio> #include<algorithm> #include<string.h> using namespace std; #defi ...

  7. windows操作系统的快捷键

    编号:1015时间:2016年5月26日09:25:34功能:windows操作系统的快捷键URL:https://www.douban.com/group/topic/5937774/

  8. dedecms 列表页调用自定义字段

    在列表附加字段中添加自己定义的字段 如: lwulr调用:{dede:list addfields="lwurl" channelid="1"}[field:l ...

  9. 听VOA还不如学这些 (转自知乎恶魔奶爸)

    该专栏文章网址 http://zhuanlan.zhihu.com/aisapo/19634180 鉴于知乎无法插图片和音频,所以有了这篇教程集合,大家看这个就足够了其实 每次一学英语,材料无非就是V ...

  10. web app 开发必不可少的滑动插件 Flipsnap

    flipsnap.js一个轻量级的滑动效果JS开发库,仅有8k大小(压缩版),包含了10种滑动方式,是web app开发必备的js库,除了兼容主流的智能手机浏览器(iossafari,android, ...