这个应该是简易版的美图秀秀(小伙伴们吐槽:你这也叫简易版的??我们看着怎么不像啊……)。好吧,只是在图片上绘制涂鸦,然后保存。
一、选择图片
这个道长有必要说一下,在绘制涂鸦时,笔画会根据设置ImageView的大小和屏幕的尺寸(不是像素)产生误差。这个道长暂时还没有找到解决方法,只是规避了一下。
- 把ImageView设置为全屏,布局文件代码如下
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_margin="5dp"android:orientation="vertical"><ImageView
android:id="@+id/iv_draw_pic"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_gravity="center_horizontal"android:layout_margin="10dp" /><RelativeLayout
android:layout_width="match_parent"android:layout_height="wrap_content"><Button
android:id="@+id/btn_choose"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_margin="5dp"android:layout_weight="1"android:text="选择照片" /><Button
android:id="@+id/btn_save"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentRight="true"android:layout_margin="5dp"android:layout_weight="1"android:text="保存照片" /><Button
android:id="@+id/btn_clear"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentBottom="true"android:layout_centerHorizontal="true"android:layout_margin="5dp"android:layout_weight="1"android:text="擦除笔迹" /></RelativeLayout></FrameLayout>
- 根据机型设置缩放比例
switch (model){case "MI 4LTE":scale = 1.1f;break;case "HUAWEI NXT-AL10":scale = 1.5f;break;}
- 效果图如下
二、绘制涂鸦
实现代码如下:
@Overridepublic boolean onTouch(View view, MotionEvent motionEvent) {int action = motionEvent.getAction();switch (action) {case MotionEvent.ACTION_CANCEL:break;case MotionEvent.ACTION_DOWN:downX = motionEvent.getX() * scale;downY = motionEvent.getY() * scale;break;case MotionEvent.ACTION_UP:upX = motionEvent.getX() * scale;upY = motionEvent.getY() * scale;canvas.drawLine(downX, downY, upX, upY, paint);iv_drawpicture.invalidate();break;case MotionEvent.ACTION_MOVE:upX = motionEvent.getX() * scale;upY = motionEvent.getY() * scale;canvas.drawLine(downX, downY, upX, upY, paint);iv_drawpicture.invalidate();downX = upX;downY = upY;break;default:break;}return true;}
效果图如下:
三、保存绘制涂鸦后的图片
实现代码如下:
try {Uri imageUri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, new ContentValues());OutputStream os = getContentResolver().openOutputStream(imageUri);//compress方法将图片转换成JPG或者PNG格式drawBitmap.compress(Bitmap.CompressFormat.JPEG, 90, os);Toast.makeText(this, "Saved:" + imageUri.toString(), Toast.LENGTH_LONG).show();} catch (FileNotFoundException e) {e.printStackTrace();}
四、擦除涂鸦笔迹
实现代码如下:
drawBitmap = Bitmap.createBitmap(bmp.getWidth(), bmp.getHeight(), bmp.getConfig());canvas = createCanvas(drawBitmap);paint = createPaint();canvas.drawBitmap(bmp, 0, 0, paint);iv_drawpicture.setImageBitmap(drawBitmap);iv_drawpicture.setOnTouchListener(this);
在照片上绘制涂鸦暂时就到这里,功能比较单一。希望这篇博客能够为小伙伴们提供一些帮助。