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. HDU 3829 - Cat VS Dog (二分图最大独立集)

    题意:动物园有n只猫和m条狗,现在有p个小孩,他们有的喜欢猫,有的喜欢狗,其中喜欢猫的一定不喜欢狗,喜欢狗的一定不喜欢猫.现在管理员要从动物园中移除一些动物,如果一个小孩喜欢的动物留了下来而不喜欢的动 ...

  2. PED结构获取进程路径和命令行地址

    1.FS寄存器 2.进入FS寄存器地址,7FFDD000 3.偏移30为PED结构 4.偏移地址10 3C,44偏移:路径地址,命令行地址 // 通过PEB结构去查找所有进程模块 void *PEB ...

  3. 几种判断asp.net中session过期方法的比较

    方法一:最麻烦也是最容易想到的方法,在每个页面的page_load()方法里面判断: protected void Page_Load(object sender, EventArgs e) { if ...

  4. 在windows上搭建ftp服务

    在控制面板->程序和功能->打开或关闭Windows功能中开启ftp和IIS信息服务管理器 在控制面板->管理工具中打开Internet信息服务管理器->添加ftp站点 建好之 ...

  5. Java异常机制

    Java异常分类 异常表明程序运行发生了意外,导致正常流程发生错误,例如数学上的除0,打开一个文件但此文件实际不存在,用户输入非法的参数等.在C语言中我们处理这类事件一般是将其与代码正常的流程放在一起 ...

  6. Svn win7系统下状态图标不显示-转载

    Svn win7系统下状态图标不显示 Svn版本 tortoisesvn-1.8.8.25755-x64-svn-1.8.10.msi 2.不显示图标状态如图1,期望结果显示图标状态如图2 图1 图2 ...

  7. JavaScript封装的几种方式

    JS 对象封装的常用方式 JS是一门面向对象语言,其对象是用prototype属性来模拟的.来看看如何封装JS对象. 常规封装 function Person (name,age,sex){ this ...

  8. Unity3D ShaderLab 漫反射卷积光照模型

    Unity3D ShaderLab 漫反射卷积光照模型 漫反射卷积[Diffuse convolution]是一个模糊立方体的过程,它保留了立方图的整体光照强度,只模糊了细节. 这种效果在我们要活得一 ...

  9. C#里partial关键字的作用(转摘)

    C#里partial关键字的作用(转摘) 1. 什么是局部类型? C# 2.0 引入了局部类型的概念.局部类型允许我们将一个类.结构或接口分成几个部分,分别实现在几个不同的.cs文件中. 局部类型适用 ...

  10. 原来DataTable的Distinct竟如此简单!

    DataView可以帮我们直接获取Distinct数据, DataTable dataTable;DataView dataView = dataTable.DefaultView; DataTabl ...