Android学习笔记进阶之在图片上涂鸦(能清屏)

Android学习笔记进阶之在图片上涂鸦(能清屏)

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

HandWritingActivity.java

[java] view plaincopy

  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. }

[java] view plaincopy

  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

[java] view plaincopy

  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. }

[java] view plaincopy

  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

[java] view plaincopy

  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学习笔记进阶之在图片上涂鸦(能清屏)

时间: 2024-08-19 01:17:43

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

Android学习笔记进阶16之BitmapShader

<1>简介 具体的看一下博文:Android学习笔记进阶15之Shader渲染 public   BitmapShader(Bitmap bitmap,Shader.TileMode tileX,Shader.TileMode tileY) 调用这个方法来产生一个画有一个位图的渲染器(Shader). bitmap   在渲染器内使用的位图 tileX      The tiling mode for x to draw the bitmap in.   在位图上X方向花砖模式 tileY  

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

1.首先创建一个Bitmap图片,并指定大小: 2.在该图片上创建一个新的画布Canvas,然后在画布上绘制,并保存即可: 3.需要保存的目录File,注意如果写的目录如"/sdcard/song/"如果不存在的话,要先创建(file.mkdirs).. 4.需要添加权限:<uses-permission Android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> Canvas是一个画布,你可以建

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

1.首先创建一个Bitmap图片,并指定大小: 2.在该图片上创建一个新的画布Canvas,然后在画布上绘制,并保存即可: 3.需要保存的目录File,注意如果写的目录如"/sdcard/song/"如果不存在的话,要先创建(file.mkdirs).. 4.需要添加权限:<uses-permission Android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> Canvas是一个画布,你可以建

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

<1>简介 之前往往是通过Bitmap.Drawable和Canvas配合完成,需要写一系列繁杂的逻辑去缩小原有图片,从而得到缩略图. 现在我给大家介绍一种比较简单的方法:(网上有) 在Android 2.2版本中,新增了一个ThumbnailUtils工具类来是实现缩略图,此工具类的功能是强大的,使用是简单,它提供了一个常量和三个方法.利用这些常数和方法,可以轻松快捷的实现图片和视频的缩略图功能. <2>ThumbnailUtils工具类 常量: OPTIONS_RECYCLE_

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

<1>简介 之前往往是通过Bitmap.Drawable和Canvas配合完成,需要写一系列繁杂的逻辑去缩小原有图片,从而得到缩略图. 现在我给大家介绍一种比较简单的方法:(网上有) 在Android 2.2版本中,新增了一个ThumbnailUtils工具类来是实现缩略图,此工具类的功能是强大的,使用是简单,它提供了一个常量和三个方法.利用这些常数和方法,可以轻松快捷的实现图片和视频的缩略图功能. <2>ThumbnailUtils工具类 常量: OPTIONS_RECYCLE_

Android学习笔记进阶19之给图片加边框

[java] view plain copy //设置颜色 public void setColour(int color){ co = color; } //设置边框宽度 public void setBorderWidth(int width){ borderwidth = width; } 具体实现: [java] view plain copy package xiaosi.imageborder; import android.app.Activity; import android.

Android学习笔记进阶19 之给图片加边框

[java] view plain copy //设置颜色 public void setColour(int color){ co = color; } //设置边框宽度 public void setBorderWidth(int width){ borderwidth = width; } 具体实现: [java] view plain copy package xiaosi.imageborder; import android.app.Activity; import android.

Android学习笔记进阶15之Shader渲染

Android提供的Shader类主要是渲染图像以及一些几何图形. Shader有几个直接子类: BitmapShader    : 主要用来渲染图像 LinearGradient  :用来进行线性渲染 RadialGradient  : 用来进行环形渲染 SweepGradient   : 扫描渐变---围绕一个中心点扫描渐变就像电影里那种雷达扫描,用来梯度渲染. ComposeShader   : 组合渲染,可以和其他几个子类组合起来使用. 1   BitmapShader 渲染器着色一个位

Android学习笔记进阶十三获得本地全部照片

这是Intent的一个用法. 在ActivityAction里面有一个"ACTION_GET_CONTENT"字符串常量,该常量让用户选择特定类型的数据. intent.setType("image/*");  选择本地所有的图片. 返回该数据的URI.我们利用该常量生成该图片的位图Bitmap,然后为添加到图片控件(ImageView)上就行了. 选择你想要的图片: main.xml [java] view plain copy <?xml version=