Android应用开发之Android 实现手绘功能教程
白羽 2018-09-14 来源 :网络 阅读 1190 评论 0

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

        本文将带你了解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() {@Overridepublic 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 {// 保存图片到SD卡上String fileName = "/sdcard/"+System.currentTimeMillis() + ".png";File file = new File(fileName);FileOutputStream stream = new FileOutputStream(file);baseBitmap.compress(Bitmap.CompressFormat.PNG, 100, stream);Toast.makeText(DrawActivity.this, "保存图片成功", Toast.LENGTH_SHORT).show(); // Android设备Gallery应用只会在启动的时候扫描系统文件夹 // 这里模拟一个媒体装载的广播,用于使保存的图片可以在Gallery中查看Intent intent = new Intent();intent.setAction(Intent.ACTION_MEDIA_MOUNTED);intent.setData(Uri.fromFile(Environment  .getExternalStorageDirectory()));sendBroadcast(intent);  } catch (Exception e) {Toast.makeText(DrawActivity.this, "保存图片失败", Toast.LENGTH_SHORT).show();e.printStackTrace();  } }  // 手动清除画板的绘图,重新创建一个画板 protected void resumeCanvas() {  if (baseBitmap != null) {baseBitmap = Bitmap.createBitmap(iv.getWidth(),  iv.getHeight(), Bitmap.Config.ARGB_8888);canvas = new Canvas(baseBitmap);canvas.drawColor(Color.WHITE);iv.setImageBitmap(baseBitmap);Toast.makeText(DrawActivity.this, "清除画板成功,可以重新开始绘图", Toast.LENGTH_SHORT).show();  } }}    

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

本文由 @白羽 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved