当前位置: 移动技术网 > IT编程>移动开发>Android > Android实现画画板案例

Android实现画画板案例

2019年07月29日  | 移动技术网IT编程  | 我要评论

无动力风球,黄家驹中文网,郭淮作关中都督

本文实例为大家分享了android实现画画板的具体代码,供大家参考,具体内容如下

① 准备一个布局文件

<?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>

② 核心代码

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"/>

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

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网