本文实例为大家分享了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
30
31
32
33
34
35
|
<? xml version = "1.0" encoding = "utf-8" ?> < LinearLayout xmlns:android = "http://schemas.android.com/apk/res/android" xmlns:tools = "http://schemas.android.com/tools" android:id = "@+id/activity_main" android:layout_width = "match_parent" android:layout_height = "match_parent" android:paddingBottom = "@dimen/activity_vertical_margin" android:paddingLeft = "@dimen/activity_horizontal_margin" android:paddingRight = "@dimen/activity_horizontal_margin" android:paddingTop = "@dimen/activity_vertical_margin" android:orientation = "vertical" tools:context = "com.example.it.MainActivity" > < LinearLayout android:layout_width = "match_parent" android:layout_height = "wrap_content" > < Button android:text = "修改颜色" android:onClick = "color" android:layout_width = "wrap_content" android:layout_height = "wrap_content" /> < Button android:text = "粗细+1" android:onClick = "size" android:layout_width = "wrap_content" android:layout_height = "wrap_content" /> < Button android:text = "保存图片" android:onClick = "save" android:layout_width = "wrap_content" android:layout_height = "wrap_content" /> </ LinearLayout > < ImageView android:id = "@+id/iv_bg" android:layout_width = "wrap_content" android:layout_height = "wrap_content" /> </ LinearLayout > |
② 核心代码
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
|
package com.example.it; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Matrix; import android.graphics.Paint; import android.net.Uri; import android.os.Environment; import android.os.SystemClock; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.MotionEvent; import android.view.View; import android.widget.ImageView; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; public class MainActivity extends AppCompatActivity { private final String TAG = getClass().getSimpleName(); private ImageView iv_show; private Bitmap copyBm; private float x; private float y; private Paint paint; private int paintsize = 1 ; private FileOutputStream fos; @Override protected void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout.activity_main); //初始化控件 iv_show = (ImageView) findViewById(R.id.iv_bg); //创建一个空白的bitmap Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.bg); copyBm = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), bitmap.getConfig()); //创建画布 final Canvas canvas = new Canvas(copyBm); //使用画布绘制图片 paint = new Paint(); canvas.drawBitmap(bitmap, new Matrix(), paint); iv_show.setImageBitmap(copyBm); //为画笔在屏幕上移动设置监听事件 iv_show.setOnTouchListener( new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { //获取当前事件的类型 int action = event.getAction(); switch (action){ case MotionEvent.ACTION_DOWN: //如果是手指按下时,记录一下手指的位置 x = event.getX(); y = event.getY(); Log.e(TAG,x+ "******" +y); break ; case MotionEvent.ACTION_MOVE: //如果手指正在移动时 float x1 = event.getX(); float y1 = event.getY(); canvas.drawLine(x,y,x1,y1, paint); x = x1; y = y1; Log.e(TAG,x1+ "**********" +y1); break ; case MotionEvent.ACTION_UP: break ; } iv_show.setImageBitmap(copyBm); return true ; } }); } //修改颜色 public void color(View view) { paint.setColor(Color.RED); } //修改线条粗细 public void size(View view) { paintsize+= 1 ; paint.setStrokeWidth(paintsize); } //保存图片 public void save(View view) { //设置图片保存的位置 File file = new File(Environment.getExternalStorageDirectory(), SystemClock.currentThreadTimeMillis()+ ".png" ); try { fos = new FileOutputStream(file); } catch (FileNotFoundException e) { e.printStackTrace(); } //设置参数保存的质量 copyBm.compress(Bitmap.CompressFormat.PNG, 100 ,fos); //定义一个意图,通过发出广播告诉系统扫描指定的位置的文件 Intent intent = new Intent(); intent.setAction(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE); intent.setData(Uri.fromFile(file)); sendBroadcast(intent); } } |
③ 权限信息
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/qq_32890771/article/details/71566165