本文将带你了解Android应用开发Android 实现手绘功能教程,希望本文对大家学Android有所帮助。

布局文件如下。

Activity代码如下,其中线的颜色,宽度等属性都可以修改。

package com.example.administrator.main;

import android.content.Intent;

import android.graphics.Bitmap;

import android.graphics.Canvas;

import android.graphics.Color;

import android.graphics.Paint;

import android.net.Uri;

import android.os.Environment;

import android.support.v7.app.AppCompatActivity;

import android.os.Bundle;

import android.view.MotionEvent;

import android.view.View;

import android.widget.Button;

import android.widget.ImageView;

import android.widget.Toast;

import java.io.File;

import java.io.FileOutputStream;

public class DrawActivity extends AppCompatActivity {

private ImageView iv;

private Bitmap baseBitmap;

private Button btn_resume;

private Button btn_save;

private Canvas canvas;

private Paint paint;

float radio;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_draw);

radio = 10;

iv = (ImageView) findViewById(R.id.iv);

// 初始化一个画笔,笔触宽度为5,颜色为红色

paint = new Paint();

paint.setStrokeWidth(radio);

paint.setColor(Color.BLACK);

iv = (ImageView) findViewById(R.id.iv);

btn_resume = (Button) findViewById(R.id.btn_resume);

btn_save = (Button) findViewById(R.id.btn_save);

btn_resume.setOnClickListener(click);

btn_save.setOnClickListener(click);

iv.setOnTouchListener(touch);

}

private View.OnTouchListener touch = new View.OnTouchListener() {

// 定义手指开始触摸的坐标

float startX;

float startY;

@Override

public boolean onTouch(View v, MotionEvent event) {

switch (event.getAction()) {

// 用户按下动作

case MotionEvent.ACTION_DOWN:

// 第一次绘图初始化内存图片,指定背景为白色

if (baseBitmap == null) {

baseBitmap = Bitmap.createBitmap(iv.getWidth(),

iv.getHeight(), Bitmap.Config.ARGB_8888);

canvas = new Canvas(baseBitmap);

canvas.drawColor(Color.WHITE);

}

// 记录开始触摸的点的坐标

startX = event.getX();

startY = event.getY();

break;

// 用户手指在屏幕上移动的动作

case MotionEvent.ACTION_MOVE:

// 记录移动位置的点的坐标

float stopX = event.getX();

float stopY = event.getY();

Thread t = new Thread(new Runnable() {

@Override

public void run() {

radio += 0.1;

try {

Thread.sleep(1000);

} catch (InterruptedException e) {

e.printStackTrace();

}

}

});

t.start();

paint.setStrokeWidth(radio);

//根据两点坐标,绘制连线

canvas.drawLine(startX, startY, stopX, stopY, paint);

// 更新开始点的位置

startX = event.getX();

startY = event.getY();

// 把图片展示到ImageView中

iv.setImageBitmap(baseBitmap);

break;

case MotionEvent.ACTION_UP:

radio = 5;

break;

default:

break;

}

return true;

}

};

private View.OnClickListener click = new View.OnClickListener() {

@Override

public void onClick(View v) {

switch (v.getId()) {

case R.id.btn_save:

saveBitmap();

break;

case R.id.btn_resume:

resumeCanvas();

break;

default:

break;

}

}

};

/**

* 保存图片到SD卡上

*/

protected void saveBitmap() {

try {

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标移动开发之Android频道!

Android自动手绘,Android应用开发之Android 实现手绘功能教程相关推荐

  1. android 图片横竖判断_Android应用开发之android 判断ImageView当前显示的是哪一张图片...

    本文将带你了解Android应用开发之android   判断ImageView当前显示的是哪一张图片,希望本文对大家学Android有所帮助. 判断ImageView当前显示的是哪一张图片 Java ...

  2. android webview权限申请_Android应用开发之android 6.0下webview的定位权限设置方法

    本文将带你了解Android应用开发android 6.0下webview的定位权限设置方法,希望本文对大家学Android有所帮助. 如下所示: WebView webView =   (WebVi ...

  3. Android之基于xmpp openfire smack开发之Android消息推送技术原理分析和实践[4]

    http://blog.csdn.net/shimiso/article/details/8156439 前面几篇给大家系统讲解的有关xmpp openfire smack asmack相关的技术和使 ...

  4. Android之基于xmpp openfire smack开发之Android客户端开发[3]

    http://blog.csdn.net/shimiso/article/details/11225873 在上两篇文章中,我们依次介绍openfire部署以及smack常用API的使用,这一节中我们 ...

  5. 镜像处理坐标 android,Android应用开发之Android重写ImageView实现图片镜像效果的代码教程...

    本文将带你了解Android应用开发之Android重写ImageView实现图片镜像效果的代码教程,希望本文对大家学Android有所帮助. 前两天朋友问我一个问题,如何实现从手机系统相册加载一张图 ...

  6. android添加截图功能,Android应用开发之Android 5.0及以上编程实现屏幕截图功能的方法...

    本文将带你了解Android应用开发Android 5.0及以上编程实现屏幕截图功能的方法,希望本文对大家学Android有所帮助. 本文实例讲述了Android   5.0及以上编程实现屏幕截图功能 ...

  7. Android关掉多个activity,Android应用开发之Android Activity栈管理 制定关闭某一个Activity,关闭所有Activit...

    本文将带你了解Android应用开发之Android Activity栈管理  制定关闭某一个Activity,关闭所有Activit,希望本文对大家学Android有所帮助. 系统Api :打开新的 ...

  8. java edittext 输入监听_Android应用开发之Android EditText 监听用户输入完成的实例

    本文将带你了解Android应用开发Android EditText 监听用户输入完成的实例,希望本文对大家学Android有所帮助. 我们都知道, Android   EditText输入框,并没有 ...

  9. android图片保存形式,Android应用开发之Android ScrollView截图和图片保存到相册的方式...

    本文将带你了解Android应用开发之Android ScrollView截图和图片保存到相册的方式,希望本文对大家学Android有所帮助. 1.1首先来看你一种截取屏幕,这种代码有缺陷,只能截取一 ...

最新文章

  1. 【中文字幕】加州理工《数据学习:机器学习课程》视频及ppt分享
  2. Logstash 推送告警到阿里钉钉(Dingtalk)
  3. Java Array 常见报错
  4. android getitem,android – ItemDecoration重写getItemOffsets()和动画
  5. 梯度方向直方图和物体检测Histogram of Oriented Gradients and Object Detection
  6. Cortex-A 的内核寄存器组
  7. c++ primer 5th 练习11.38自己编写答案(用无序容器重写单词计数程序)
  8. LeetCode 71. 简化路径(栈)
  9. js删除服务器上文件,js删除服务器文件
  10. HTML/CSS 面试总结
  11. 什么是Excel宏?
  12. mysql 身份证 年龄_mysql 中通过身份证号码计算年龄
  13. DSP28335 ecap使用
  14. V神以太坊:协议设计中的“封装复杂性” vs. “系统复杂性”
  15. 国内外Android大牛Blog
  16. 阿里巴巴商品详情API接口(item_get-获得商品详情接口),阿里巴巴API接口
  17. 2022年,程序员如何选择电脑
  18. windows 模拟按键与鼠标
  19. 作为一名平面设计师,你必须知道的一些素材网站
  20. android x86 arm64,Android 的ARM架构和X86架构

热门文章

  1. java文件异步上传_java 异步上传文件
  2. 游戏中的数据可视化设计分析
  3. 初窥Java哈希(如何解决Hash冲突)
  4. Dart可选参数方法的写法!
  5. CentOS安装MySQL详解
  6. 笔记本电脑启动计算机出现了页面,笔记本电脑开机弹出广告解决方法
  7. 碎片化学习Java(十一)Java if买手机问题
  8. Java:简述Java中满足线程安全的数据结构
  9. Python量化投资初探:自动化选股策略
  10. 彻底删除mysql服务