Android实现简单画图画板
作者:yu-Knight 发布时间:2022-04-02 12:52:56
标签:Android,画图,画板
本文实例为大家分享了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
0
投稿
猜你喜欢
- 详解Java读取Jar中资源文件及实现代码 &
- 前言本文主要给大家介绍了关于spring mvc注解@ModelAttribute妙用的相关内容,分享出来供大家参考学习,下面话不多说了,来
- 背景1> 大家都知道SpringBoot是通过main函数启动的,这里面跟踪代码到处都没有找到while(true),为什么启动后可以
- 什么是队列结构一种线性结构,具有特殊的运算法则【只能在一端(队头)删除,在另一端(队尾)插入】。分类:顺序队列结构链式队列结构基本操作:入队
- 本文实例讲解了iOS从背景图中取色的代码,分享给大家供大家参考,具体内容如下实现代码:void *bitmapData; //内存空间的指针
- 混淆器通过删除从未用过的代码和使用晦涩名字重命名类、字段和方法,对代码进行压缩,优化和混淆。结果是一个比較小的.apk文件,该文件比較难进行
- 数据库事务是被当作单个工作单元的操作序列。这些操作要么全部完成或全部不成功。事务管理是面向企业应用程序,以确保数据的完整性和一致性RDBMS
- 不小心将.idea文件提交后无法删除1、同步git最新代码,将.idea文件同步下来如果同步不下来,看看是不是在同步的时候与本地文件产生了冲
- 公司的老项目要改造多租户,于是进入了大坑,本文写点遇到的坑以及解决方案,每次遇到问题在网上搜了好久,记录下来,防止以后忘掉。(一).方案网上
- 题目要求思路一:DFS+序列化设计一种规则将所有子树序列化,保证不同子树的序列化字符串不同,相同子树的序列化串相同。用哈希表存所有的字符串,
- 二进制数据一般输入的格式是0x45, 0x3a, 0xc3, 这种数据格式看起来是16进制的字符串,但是实际上在存储的时候每个都对应一个字节
- 只需要调用该类的一个方法createNewFile(),但是在实际操作中需要注意一些事项,如判断文件是否存在,以及如何向新建文件中写入数据等
- Jackson 日期格式化技巧使用 Spring Boot 时,需要使用 Jackson 处理一些 Java Time API 类型的 JS
- java如何实现ftp上传?如何创建文件夹?最佳答案:准备条件:java实现ftp上传用到了commons-net-3.3.jar包首先建立
- TCPTCP协议是面向连接、保证高可靠性(数据无丢失、数据无失序、数据无错误、数据无重复到达)传输层协议。TCP通过三次握手建立连接,通讯完
- NuGet 安装SqlSugar1.Model文件下新建 DbContext 类 public class DbContext
- HttpClient是一个客户端的HTTP通信实现库。HttpClient的目标是发送和接收HTTP报文。Http协议的重要性相信不用我多说
- 本文实例为大家分享了java实现KFC点餐系统的具体代码,供大家参考,具体内容如下package KFC点餐系统;//food 类 publ
- 数组的长度是固定的,无法适应数据变化的需求。为了解决这个问题,Java提供了另一个容器 java.util.ArrayList集合类,让我们
- Windows的画图板相信很多人都用过,这次我们就来讲讲Java版本的简易画板的实现。基本的思路是这样的:画板实现大致分三部分:一是画板界面