首先先说两个类:canva与paint;这两个类在·Android中绘图用途非常广;后续还会继续更新关于这两个类的一些用法;

下面先进行一个简单的实现;(这里需要实现的是下面4个按钮,最后把自己画的图存入SD卡)

首先是布局:比较简单(不写布局,直接上图)

现在直接开始写代码:(注释比较详细,利于新手学习)

 @Override
    protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //先加载原图
        bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.bg);
        //创建白纸,宽 高,图片的参数
        bitmap1 = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), bitmap.getConfig());
        //创建画板
        canvas = new Canvas(bitmap1);
        //创建画笔
        paint = new Paint();
        //在纸上作画
        canvas.drawBitmap(bitmap,new Matrix(),paint);

        iv= (ImageView) findViewById(R.id.iv);
        ///手势识别器和画笔结合的知识/
        //给控件设置手势适配器,可以得到用户在这个控件上所做的手势;
        iv.setOnTouchListener(new View.OnTouchListener() {//当用户的手在这个控件时,自动回调
            @Override
            public boolean onTouch(View view, MotionEvent motionEvent) {switch (motionEvent.getAction()){//获取用户的行动
                    case MotionEvent.ACTION_DOWN://按下时回调
                        Log.d("PY","按下");
                        //获取用户手指按下时的坐标
                        startx = motionEvent.getX();
                        starty = motionEvent.getY();
                        Toast.makeText(MainActivity.this,startx+""+starty,Toast.LENGTH_SHORT).show();
                        break;

                    case MotionEvent.ACTION_MOVE://手指滑动时调用
                        Log.d("PY","正在滑动");
                        newx = motionEvent.getX();
                        newy = motionEvent.getY();
                        //在背景图画线
                        canvas.drawLine(startx,starty,newx,newy,paint);
                        startx=newx;
                        starty=newy;
                        iv.setImageBitmap(bitmap1);
                        break;
                    case MotionEvent.ACTION_UP://松开(抬起)的调用
                        Log.d("PY","松开");
                        break;

                }//事件分发机制
                //true:iv处理该触摸事件
                //false:iv不处理触摸事件,事件传递给上一级
                return true;
            }});
    }//点击改变颜色(红色)
    public void red(View view){paint.setColor(Color.RED);
    }//点击改变颜色(绿色)
    public void green(View view){paint.setColor(Color.GREEN);
    }//点击刷子(及变粗)
    public void brush(View view){paint.setStrokeWidth(10);

    }//点击保存并存储到SD卡中
    public void save(View view){canvas.save(Canvas.ALL_SAVE_FLAG);
        String sdpath= Environment.getExternalStorageDirectory()+"/temp.png";
        File file=new File(sdpath);
        try {file.createNewFile();
            FileOutputStream fos=new FileOutputStream(file);
            if (bitmap1!=null){bitmap1.compress(Bitmap.CompressFormat.PNG,100,fos);

            }fos.flush();
            fos.close();
        } catch (IOException e) {e.printStackTrace();
        }}
}

Android触摸事件进行画图简单实现相关推荐

  1. android触摸事件分发,Android 事件分发机制

    Android 事件分发机制一直让人头痛,之前也是面向 GitHub 编程得过且过.今天下定决心了解一下,以便后面自己定制 View 效果.Android 触摸事件有三个基本类型:ACTION_DOW ...

  2. 为了讲清楚Android触摸事件,我“拆了部手机”

    Android 是一个有用户界面(GUI)的操作系统,在它诞生之初,就是为带有触摸屏的手持设备准备的.作为提供给用户最重要的交互方式之一,了解触摸系统是怎么工作的,对于实际的项目开发有着非常大的帮助. ...

  3. Android触摸事件传递分析与实践

    设计UI时,亲爱的交互设计师们总会有一些天马行空的想法,大多数情况下原生的控件已不能支持这些"看似简单"的交互逻辑,需要继承ListView.ViewPager.ScrollVie ...

  4. Android触摸事件分发

    Android的触摸分发机制和如何实现拦截 Android的触摸分发机制和如何实现拦截 前言 触摸事件的分发 情景分析 总结 前言 在自定义ViewGroup中,有时候需要实现触摸事件拦截,比如Lis ...

  5. Android触摸事件实现笔触画布

    任何View都有触摸事件,经常在自定义控件时重写setOnTouchListener 本篇通过手绘图片来讲述这个知识点 本篇分为三个等级:一览图: 直线 曲线 笔触 LEVEL1.png LEVEL2 ...

  6. 【知识梳理1】Android触摸事件机制

    前言 随着科学技术的发展,智能手机早已成为我们当代人身边不可缺少的"伙伴"之中的一个,堪比对象女友.每天我们对着手机反复的做着点击.滑动操作,而手机则随着我们的操作给我们展示她的精 ...

  7. android方向触摸事件,Android触摸事件传递机制,这一篇就够了

    整个触摸事件牵涉到的是,Activity,View,ViewGroup三者的传递机制. 这个触摸事件就是从外层往内层一层层的传递. 整个传递机制,分为3个步骤:分发,拦截,和消费. 1. 触摸事件的类 ...

  8. android 触摸事件 取消,如何禁用/重新启用Android中的触摸事件?

    快速,可能很简单,问题.我有一个视图,其背景是动画,在那段时间,我想禁止用户与视图交互.我的视图是一个FrameLayout,我用onTouchEvent()捕获触摸事件.我试过的解决方案:如何禁用/ ...

  9. 【源码分析】Android触摸事件的分发拦截

    Android中View的分发拦截机制是一块重要的内容,网上也有很多大神进行过相关的分析. 在这篇文章里我将以自己的理解尽量全面地分析整个流程,有些分析结果是很多文章没有提及的. 整个分析过程将通过d ...

最新文章

  1. php利用openssl实现RSA非对称加密签名
  2. 关于PChar(@string)的疑惑
  3. MySql允许被远程访问
  4. 堆、栈及静态数据区详解 转
  5. 饥荒进地洞服务器无响应,饥荒联机洞穴设置及常见问题的解决方法
  6. python list sort by,python中List的sort方法指南
  7. 毕业设计一周一记02
  8. Linux: Shared MIME
  9. mysql 中文字符 函数_MySQL基础之字符函数-Go语言中文社区
  10. 丢弃法(基于MXNet)
  11. nupkg 本地安装_使用Nuget安装离线包nupkg
  12. PHP strtotime 将时间转换为时间戳
  13. 谷歌安装ntko跨浏览器插件_Chrome浏览器不能安装WebEx扩展插件的解决方案
  14. 支持向量机(SVM)原理小结(3)支持向量回归SVR
  15. SQLMAP参数中文详解(看过来)!
  16. 中文代码示例视频演示Python入门教程第五章 数据结构
  17. 高德定位,只能定位一次,导航图标就消失
  18. 酷炫cmd命令行工具——windows terminal的详细配置
  19. 【找不到与请求 URI匹配的 HTTP 资源】(转)
  20. Three.js - 图形界面工具(lil-gui)(四)

热门文章

  1. 生活随笔与读书笔记20140302
  2. 切比雪夫,霍夫丁不等式证明
  3. Android 实战项目:简单计算器
  4. 【Python相关】PyCharm如何修改行注释颜色
  5. 如何使用 Python 操作 .npy 文件?详细教程分享
  6. IT猎头首秀-希望认识更多的程序员朋友
  7. html5 放风筝,萧山5个放风筝绝佳地
  8. 2022中级Android开发面试解答,当上项目经理才知道
  9. PageAdmin CMS建站系统最新版本(V4.0.09)体验评测
  10. Ubuntu操作系统如何搭建可视化界面?