Android实现简单画图画板
作者:yu-Knight 时间:2022-04-02 12:52:56
本文实例为大家分享了Android实现简单画图画板的具体代码,供大家参考,具体内容如下
效果如图:
布局文件:
<RelativeLayout 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"
tools:context=".MainActivity">
<ImageView
android:id="@+id/iv"
android:layout_width="600px"
android:layout_height="900px"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_alignParentStart="true" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_gravity="center_horizontal"
android:orientation="horizontal">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="red"
android:text="红色" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="green"
android:text="绿色"
/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="brush"
android:text="刷子"
/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="eraser"
android:text="橡皮擦"
/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="save"
android:text="保存" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="cancel"
android:text="取消" />
</LinearLayout>
</RelativeLayout>
MainActivity.java
package com.example.yulongji.android10;
import android.app.Activity;
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.Bundle;
import android.os.Environment;
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 Activity {
private ImageView iv;
//原图
private Bitmap bitsrc;
//拷贝图
private Bitmap bitcopy;
private Canvas canvas;
private Paint paint;
private int startX;
private int startY;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
iv = (ImageView) findViewById(R.id.iv);
setBitmap();
// 设置触摸侦听
iv.setOnTouchListener(new View.OnTouchListener() {
// 触摸屏幕时,触摸事件产生时,此方法调用
@Override
public boolean onTouch(View v, MotionEvent event) {
int action = event.getAction();
switch (action) {
// 用户手指摸到屏幕
case MotionEvent.ACTION_DOWN:
startX = (int) event.getX();
startY = (int) event.getY();
break;
// 用户手指正在滑动
case MotionEvent.ACTION_MOVE:
int x = (int) event.getX();
int y = (int) event.getY();
canvas.drawLine(startX, startY, x, y, paint);
// 每次绘制完毕之后,本次绘制的结束坐标变成下一次绘制的初始坐标
startX = x;
startY = y;
iv.setImageBitmap(bitcopy);
break;
// 用户手指离开屏幕
case MotionEvent.ACTION_UP:
break;
}
// true:告诉系统,这个触摸事件由我来处理
// false:告诉系统,这个触摸事件我不处理,这时系统会把触摸事件传递给imageview的父节点
return true;
}
});
}
public void setBitmap() {
// 加载画画板的背景图
bitsrc = BitmapFactory.decodeResource(getResources(), R.drawable.bg);
// 创建图片副本
// 1.在内存中创建一个与原图一模一样大小的bitmap对象,创建与原图大小一致的白纸
bitcopy = Bitmap.createBitmap(bitsrc.getWidth(), bitsrc.getHeight(),
bitsrc.getConfig());
// 2.创建画笔对象
paint = new Paint();
// 3.创建画板对象,把白纸铺在画板上
canvas = new Canvas(bitcopy);
// 4.开始作画,把原图的内容绘制在白纸上
canvas.drawBitmap(bitsrc, new Matrix(), paint);
// 5.将绘制的图放入imageview中
iv.setImageBitmap(bitcopy);
}
public void red(View view){
paint.setColor(Color.RED);
}
public void green(View view){
paint.setColor(Color.GREEN);
}
public void brush(View view){
paint.setStrokeWidth(8);
}
public void cancel(View view){
setBitmap();
}
public void eraser(View view){
paint.setColor(Color.rgb(243,243,243));
paint.setStrokeWidth(30);
}
public void save(View view){
String path = Environment.getExternalStorageDirectory() + "/" + "2.png";
File file = new File(path);
try {
FileOutputStream fos = new FileOutputStream(file);
bitcopy.compress(Bitmap.CompressFormat.PNG, 100, fos);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
// 发送sd卡就绪广播
Intent intent = new Intent();
intent.setAction(Intent.ACTION_MEDIA_MOUNTED);
intent.setData(Uri.fromFile(Environment.getExternalStorageDirectory()));
sendBroadcast(intent);
}
}
来源:https://blog.csdn.net/u014657752/article/details/47983061
标签:Android,画图,画板
0
投稿
猜你喜欢
MongoDB中ObjectId的误区及引起的一系列问题
2023-06-16 09:46:00
Java多线程实现Callable接口
2022-09-01 17:53:54
Spring MVC注解式开发使用详解
2021-07-08 23:27:50
Android List(集合)中的对象以某一个字段排序案例
2021-10-07 03:28:39
SpringBoot如何获取Kafka的Topic列表
2023-11-26 16:01:52
C# 9.0 新特性之模式匹配简化的实现
2023-11-06 19:42:15
Springboot公共字段填充及ThreadLocal模块改进方案
2023-11-17 22:58:39
Android仿百度图片查看功能
2023-09-26 07:50:24
解析Silverlight调用WCF/Rest异常的解决方法
2021-08-19 07:41:37
java实现简单石头剪刀布小游戏
2021-09-17 07:25:41
如何调用chatGPT实现代码机器人
2023-06-05 02:09:33
Android Dialog 设置字体大小的具体方法
2023-09-12 12:46:49
C语言实现超市计价收款系统
2021-08-21 17:56:47
Java实现解出世界最难九宫格问题
2022-06-14 19:47:10
Java线程状态变换过程代码解析
2023-08-06 18:05:29
SpringBoot 如何从容器中获取对象
2023-12-06 08:20:40
C#对Word文档的创建、插入表格、设置样式等操作实例
2021-10-24 23:13:46
Java实现synchronized锁同步机制
2022-07-16 20:19:04
Android 设置应用全屏的两种解决方法
2023-05-07 01:27:50
Java 开发的几个注意点总结
2021-11-30 20:07:11