随手涂鸦

来源:互联网 发布:1.5厚js防水涂料用量 编辑:程序博客网 时间:2024/05/16 02:04

之前其实就感觉这个小功能很实用,现在就简单说一下吧,首先要画画我们肯定会想到的需要画板,画笔跟画纸,其实android也是如此,需要我先说一下布局吧。

<ImageView    android:id="@+id/iv_image"    android:layout_width="fill_parent"    android:layout_height="fill_parent" /><Button    android:id="@+id/btn_save"    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:text="保存"    android:layout_alignParentBottom="true"    android:layout_alignParentRight="true"/><Button    android:id="@+id/btnclean"    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:text="清空"    android:layout_toLeftOf="@id/btn_save"    android:layout_alignTop="@id/btn_save"/>

使一张图片填充窗体,也就是我们展示的图片,初始化这些控件我就不说了,因为只要大家稍微有点android基础就会啦,然后也就是我们的关键部分啦,也就是当我们点击图片Imageview时就要画画啦,首先我们要给图片Imageview设定一个触摸事件即 mimageView.setOnTouchListener(new MyTouchivListener());
其中MyTouchivListener是自定义的。代码如下:

 /** *当ImageView被用户手指触摸时,触发此方法     * 按下跟抬起时只会触发一次,移动的事件会触发多次     *     * MotionEvent.ACTION_DOWN://按下事件     * MotionEvent.ACTION_MOVE://移动事件     * MotionEvent.ACTION_UP://  抬起事件     */class MyTouchivListener implements View.OnTouchListener{    @Override    public boolean onTouch(View v, MotionEvent event) {        int action = event.getAction();        switch (action){            case MotionEvent.ACTION_DOWN://按下事件                if(panel == null){        //创建一个空白的画纸,指定宽高:跟ImageView一模一样            panel = Bitmap.createBitmap(mimageView.getWidth(), mimageView.getHeight(), Bitmap.Config.ARGB_8888);        //初始化一个画板        canvas = new Canvas(panel);        //初始化画笔        paint = new Paint();        paint.setColor(Color.RED);//画笔的颜色        paint.setStrokeWidth(5);//指定画笔的画出来线的宽度        //画板向画纸画一个黄色的颜色        canvas.drawColor(Color.YELLOW);        mimageView.setImageBitmap(panel);    }        return true;                //true 消费当前的事件   false 不消费事件,由其他控件处理    }}

到这里我想我的一个初始画板已经实现啦,但是 我一触摸还是没画呀,因为什么呢,当然还是自己的画笔没划线,但是又该怎么做呢,大家想一想,其实画画也就是画线,而划线不就是俩个点之间连线么,那点呢,我又该怎么表示呢,其实android中点的获取也就是通过你的坐标X,Y轴来具体定位你的某一个点。例如
我们要获取初始点(需要触摸事件event)
int downX = (int)event.getX();
int downY = (int)event.getY();
然后也就是移动后的点啦

 case MotionEvent.ACTION_MOVE://移动事件 //取出移动的点 int moveX = (int)event.getX(); int moveY = (int)event.getY(); //把按下的点跟移动的点连接起来canvas.drawLine(downX,downY,moveX,moveY,paint); mimageView.setImageBitmap(panel);//在初始化一下起始点   更新一下     downX = moveX ;     downY = moveY ;

在这里我需要点出一点的是初始点必须要更新,不然就会出现是围绕你按下的那点来画的。好啦,你发现代码已经完整无缺啦,运行一下发现果然能顺利的跑起来啦
这里是我用Android studio编写,点击下载
这个demo很好地实现了画板的绘画以及保存跟清空图片,有兴趣的可以下载参考参考

0 0
原创粉丝点击