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. poj1992 数论

    //Accepted 168 KB 969 ms //n!中含有质因数p的个数为t=n/p+n/p^2+n/p^3+... #include <cstdio> #include <c ...

  2. PAT 06-2 字符串字母大小写转换

    没什么好说的,记得使用ctype.h就好了,谭浩强那本书就介绍了,再不使用就太对不起他老人家了:有一点小小的地方需要注意一下,&&的优先级比=号高,所以getchar()两边没有括号的 ...

  3. Interview----链表的倒数第K个元素

    这个题虽然简单,但是一定要细心,bug-free 能力很重要. 分析: 如果不知道链表的长度,可以采用双指针的方法,让一个指针先走 k 步,然后两个指针同时走, 前面的指针变成 NULL时, 第一个指 ...

  4. Android布局居中的几种做法

    Android的布局文件中,如果想让一个组件(布局或View)居中显示在另一个布局(组件)中,可以由这么几种做法: android:layout_gravity android:gravity and ...

  5. Unity3D ShaderLab 基础的高光实现

    Unity3D ShaderLab 基础的高光实现 关于高光: 在一个物体表面的高光属性就是为了描述它是如何表现光泽.这种类型的效果在着色器的世界中通常称为视点相关效果. 之所以这样说,是因为为了实现 ...

  6. HDU 4704

    http://acm.hdu.edu.cn/showproblem.php?pid=4704 求(2^n)%mod的方法 #include <iostream> #include < ...

  7. Magento中,调用静态块的几种方法

    在后台创建一个order_form静态块Block Title :Order FormIdentifier :order_formStatus :EnabledContent :自定义内容 1.如果要 ...

  8. linxu c语言 fcntl函数和flock函数区别 【转】

    flock和fcntl都有锁的功能,但他们还有一点小小的区别: 1.flock只能加全局锁,fcntl可以加全局锁也可以加局部锁. 2.当一个进程用flock给一个文件加锁时,用另一个进程再给这个文件 ...

  9. LeetCode Sort Colors (技巧)

    题意: 一个数组只可能含有3种数据,分别为1,2,3,请将数组排序(只能扫一遍). 思路: 如果扫两遍的话,用个桶记录一下,再赋值上去就行了. class Solution { public: voi ...

  10. clone 深拷贝 浅拷贝

    1. 定义:知道一个对象,但不知道类,想要得到该对象相同的一个副本,在修改该对象的属性时,副本属性不修改,clone的是对象的属性 2. 意义:当一个对象里很多属性,想要得到一个相同的对象,还有set ...