之前其实就感觉这个小功能很实用,现在就简单说一下吧,首先要画画我们肯定会想到的需要画板,画笔跟画纸,其实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 ;在这里我需要点出一点的是初始点必须要更新,不然就会出现是围绕你按下的那点来画的。好啦,你发现代码已经完整无缺啦,运行一下发现果然能顺利的跑起来啦
















