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. 关于jquery.bind

      随着现在JQuery这个javascript的越来越强大,在我们平常的前端UI开发,如果不使用JQuery,说明你已经很out了.今天我们来学习一下 JQuery的bind事件.虽然,这个话题被很 ...

  2. Cookie 与Session 的区别(转载)

    原地址: http://www.cnblogs.com/shiyangxt/archive/2008/10/07/1305506.html 两个都可以用来存私密的东西,同样也都有有效期的说法. 区别在 ...

  3. 如何从SAP中查找BADI

    如何从SAP中查找BADI   如何从SAP中查找BADI http://blog.csdn.net/CompassButton/article/details/1231652 BADI作为SAP的第 ...

  4. HackRF实现ADS-B飞机信号跟踪定位

    硬件平台:HackRF One软件平台:MAC运行环境搭建系统平台:OS X 10.11 EI Capitan文章特点:捕捉程序支持HackRF One且基于MAC平台验证通过有效. 1. 原理概述 ...

  5. 设置vs2008代码区的背景色

    编写程序.调试代码时,是不是感觉文字的白色背景有些刺眼呢?vs2008 给我们提供了改变背景色的功能. 依次展开:工具->选项->环境->字体和颜色,在“显示项--纯文本--项背景色 ...

  6. Interview----求 1+2+...+n, 不能用乘除法、for、while if、else、switch、case 等关键字以及条件判断语句 (A?B:C)

    题目描述: 求 1+2+...+n, 要求不能使用乘除法.for.while.if.else.switch.case 等关键字以及条件判断语句 (A?B:C). 分析: 首先想到的是写递归函数,但是遇 ...

  7. Generic method return type

    Here's the Animal class: public class Animal{ private Map<String,Animal> friends =new HashMap& ...

  8. utf8与utf-8的区别

    相信很多程序员刚开始也会有这样的疑惑,如题,我也是.    其实,他们可以这样来区分.    一.在php和html中设置编码,请尽量统一写成“UTF-8”,这才是标准写法,而utf-8只是在wind ...

  9. C++学习笔记1:高级语言

    笔记参考资料:http://www.learncpp.com/ 1.high languages:C,C++,Pascal,Java,Javascript,Perl... compiling proc ...

  10. LeetCode Binary Tree Paths(简单题)

    题意: 给出一个二叉树,输出根到所有叶子节点的路径. 思路: 直接DFS一次,只需要判断是否到达了叶子,是就收集答案. /** * Definition for a binary tree node. ...