Android实现简单画图画板

 更新时间:2021年01月05日 08:43:19   作者:yu-Knight  
这篇文章主要为大家详细介绍了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);
 }
 
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • listview 选中高亮显示实现方法

    listview 选中高亮显示实现方法

    当点击左侧ListView后,选中的一行就会一直呈高亮状态显示,图中选中行字的颜色显示为蓝色(注意:是选中行后一直高亮,而不是只是点击时高亮),如果再次点击另外的一行, 则新的那一行就高亮,下面就来实现这个高亮效果的显示
    2012-11-11
  • 微信公众平台开发入门教程(SAE方倍工作室)

    微信公众平台开发入门教程(SAE方倍工作室)

    在这篇微信公众平台开发教程中,我们假定你已经有了PHP语言程序、MySQL数据库、计算机网络通讯、及HTTP/XML/CSS/JS等基础
    2014-05-05
  • Android 代码写控件代替XML简单实例

    Android 代码写控件代替XML简单实例

    这篇文章主要介绍了Android 代码写控件代替XML简单实例的相关资料,需要的朋友可以参考下
    2017-05-05
  • android中贝塞尔曲线的应用示例

    android中贝塞尔曲线的应用示例

    本篇文章主要介绍了android中贝塞尔曲线的应用示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-03-03
  • Android工程:引用另一个Android工程的方法详解

    Android工程:引用另一个Android工程的方法详解

    本篇文章是对在Android中引用另一个Android工程的方法进行了详细的分析介绍。需要的朋友参考下
    2013-05-05
  • Android Notification通知使用详解

    Android Notification通知使用详解

    消息通知(Notification)是Android系统中比较有特色的一个功能,当某个应用程序希望用户发出一些提示信息,而该应用又不在前台运行时,就可以借助通知来实现
    2022-09-09
  • Android与JS相互调用的方法

    Android与JS相互调用的方法

    这篇文章主要介绍了Android与JS相互通信的方法,帮助大家更好的理解和学习使用Android开发,感兴趣的朋友可以了解下
    2021-04-04
  • Android Activity进出动画三种方法

    Android Activity进出动画三种方法

    这篇文章主要介绍了Android Activity进出动画三种方法的相关资料,需要的朋友可以参考下
    2017-05-05
  • Android升级支持库版本遇到的两个问题详解

    Android升级支持库版本遇到的两个问题详解

    安卓平台其中一个很牛逼的地方在于它支持各种不同的设备。从你的平板电脑,到你的手机,电视等,安卓无处不在。这篇文章主要给大家介绍了关于Android升级支持库版本遇到的两个问题,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-10-10
  • 浅谈Android中线程池的管理

    浅谈Android中线程池的管理

    本篇文章主要介绍了浅谈Android中线程池的管理,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-01-01

最新评论