服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Android - android 实现在照片上绘制涂鸦的方法

android 实现在照片上绘制涂鸦的方法

2022-08-08 11:19雨幕青山 Android

今天小编就为大家分享一篇android 实现在照片上绘制涂鸦的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

这个应该是简易版的美图秀秀(小伙伴们吐槽:你这也叫简易版的??我们看着怎么不像啊……)。好吧,只是在图片上绘制涂鸦,然后保存。

一、选择图片

这个道长有必要说一下,在绘制涂鸦时,笔画会根据设置ImageView的大小和屏幕的尺寸(不是像素)产生误差。这个道长暂时还没有找到解决方法,只是规避了一下。

把ImageView设置为全屏,布局文件代码如下

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
<?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>

根据机型设置缩放比例

?
1
2
3
4
5
6
7
8
switch (model){
 case "MI 4LTE":
  scale = 1.1f;
  break;
 case "HUAWEI NXT-AL10":
  scale = 1.5f;
  break;
}

效果图如下

android 实现在照片上绘制涂鸦的方法

二、绘制涂鸦

实现代码如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
@Override
public 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;
}

效果图如下:

android 实现在照片上绘制涂鸦的方法

三、保存绘制涂鸦后的图片

实现代码如下:

?
1
2
3
4
5
6
7
8
9
10
11
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();
 }

四、擦除涂鸦笔迹

实现代码如下:

?
1
2
3
4
5
6
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);

在照片上绘制涂鸦暂时就到这里,功能比较单一。

以上这篇android 实现在照片上绘制涂鸦的方法就是小编分享给大家的全部内容了,希望这篇文章能够为小伙伴们提供一些帮助,也希望大家多多支持服务器之家。

原文链接:https://blog.csdn.net/JJ583500596/article/details/72638595

延伸 · 阅读

精彩推荐
  • AndroidAndroid编程实现自定义进度条颜色的方法

    Android编程实现自定义进度条颜色的方法

    这篇文章主要介绍了Android编程实现自定义进度条颜色的方法,涉及Android进度条的样式布局及功能实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下...

    sengeiou6262021-04-15
  • Androidandroid使用videoview播放视频

    android使用videoview播放视频

    这篇文章主要介绍了Android利用自带VideoView控件播放视频的示例,需要的朋友可以参考下...

    Android开发网3362021-02-27
  • AndroidAndroid仿Win8界面开发

    Android仿Win8界面开发

    这篇文章主要介绍了Android仿Win8界面开发的实例代码,将要模仿的Win8界面的一个个设计,分割成一个一个的方块,感兴趣的小伙伴们可以参考一下...

    林炳文Evankaka5862021-04-26
  • Android查看apk签名信息方法

    查看apk签名信息方法

    用shell写了一个查看apk签名的脚本,下面与大家分享下如何查看apk签名信息,感兴趣的朋友可以了解下哈...

    Android开发网12722021-01-25
  • Androidandroid图片类型之间相互转换实现代码

    android图片类型之间相互转换实现代码

    这篇文章主要介绍了android图片类型之间相互转换的方法,涉及Android实现各种常用图片类型及字节类型的转换技巧,具有一定参考借鉴价值,需要的朋友可以参...

    一叶飘舟10502021-04-05
  • Android仿网易新闻客户端头条ViewPager嵌套实例

    仿网易新闻客户端头条ViewPager嵌套实例

    正确使用requestDisallowInterceptTouchEvent(boolean flag)方法,下面为大家介绍下外层ViewPager布局的实例,感兴趣的朋友可以参考下哈...

    Android开发网4832021-01-27
  • AndroidAndroid解析Intent Filter的方法

    Android解析Intent Filter的方法

    这篇文章主要介绍了Android解析Intent Filter的方法,较为详细的分析了Intent解析的原理与相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下...

    craigyang11312021-03-27
  • AndroidAndroid Web3j OOM解决详解

    Android Web3j OOM解决详解

    这篇文章主要介绍了Android Web3j OOM解决详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    沉默的范大叔9912022-07-14