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

标签: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
  • asp之家 软件编程 m.aspxhome.com