前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[android] 图片画画板

[android] 图片画画板

作者头像
唯一Chat
发布2019-09-10 11:48:57
8600
发布2019-09-10 11:48:57
举报
文章被收录于专栏:陶士涵的菜地陶士涵的菜地

页面布局,相对布局

按钮位于父窗体的下方使用android:layout_alignParentBottom=”true”

图片位于按钮的上方,填充父窗体,使用android:layout_above=”@+id/xxxxxid”

获取到ImageView对象

调用Bitmap.createBitmap(width,height,config)方法,创建一个可以被修改的Bitmap对象

参数:width height宽高写死,config是Bitmap.Config.ARGB_8888

获取Canvas对象,通过new Canvas(bitmap)

调用Canvas对象的drawColor()方法,初始化背景颜色,参数:Color.WHITE白色

调用ImageView对象的setOnTouchListener()方法,参数:OnTouchListener对象,这个类是一个接口类型,因此直接new它创建匿名内部类实现方法onTouch()

在onTouch(View v,MotionEvent event)方法里面

参数:View对象是被触摸的对象,MotionEvent对象是触摸事件对象

调用MotionEvent对象的getAction()方法,获取触摸事件

switch判断这个事件

事件为MotionEvent.ACTION_DOWN是手指第一次触摸屏幕

事件为MotionEvent.ACTION_MOVE是手指在屏幕上移动

事件为MotionEvent.ACTION_UP是手指离开屏幕

当手指触摸屏幕时

定义手指开始位置的坐标startX startY

调用MotionEvent对象的getX() 和 getY()方法,可以得到坐标

当手指移动的时候,我们要获取新的坐标newX和newY,方法和上面一样

调用Canvas对象的drawLine()方法,画一条线,参数:startX,startY,newX,newY,paint

获取Paint画笔对象,通过new出来

调用Paint对象的setTrokeWidth()方法,设置画笔粗细,参数:像素

调用Paint对象的setColor()方法,设置画笔颜色,参数:Color.GREEN

注意要从新更新画笔的位置

调用ImageView对象的setImageBitmap(bitmap)方法,把Bitmap显示到控件里

onTouch()方法一定要返回true,才能被持续执行

点击保存按钮,把图片保存到SD卡上

调用Bitmap对象的compress()方法,参数:图片格式CompressFormat.JPEG,图片质量100,输出流

获取File对象,通过new File(Environment.getExternalStorageDirectory(),文件名),文件名是时间戳

获取FileOutputStream对象

需要权限android.permission.WRITE_EXTERNAL_STORGE

使用系统图库查看图片

此时会看不到,以为图库只有在sd卡挂载的时候,才扫描文件

获取Intent对象,通过new出来

调用Intent对象的setAction()方法,参数:Intent.ACTION_MEDIA_MOUNTED

调用Intent对象的setData()方法,

参数:文件目录对象Uri.fromFile(Environment.getExternalStorageDirectory())

调用sendBroadcast()方法 发送广播

代码:

代码语言:javascript
复制
package com.tsh.tshpaint;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;

import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.Bitmap.CompressFormat;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.view.InputDevice.MotionRange;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.ImageView;
import android.widget.Toast;

public class MainActivity extends Activity {
    private ImageView iv_img;
    private Bitmap baseBitmap;
    private Canvas canvas;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        iv_img = (ImageView) findViewById(R.id.iv_img);
        // 创建空Bitmap
        baseBitmap = Bitmap.createBitmap(320, 359, Bitmap.Config.ARGB_8888);
        canvas = new Canvas(baseBitmap);
        canvas.drawColor(Color.WHITE);
        // 设置手指滑动事件
        iv_img.setOnTouchListener(new OnTouchListener() {
            int startX;
            int startY;
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                int action = event.getAction();
                
                //画笔
                Paint paint=new Paint();
                paint.setStrokeWidth(5);
                paint.setColor(Color.GREEN);
                switch (action) {
                // 手指按下
                case MotionEvent.ACTION_DOWN:
                    startX=(int) event.getX();
                    startY=(int) event.getY();
                    break;
                // 手指移动
                case MotionEvent.ACTION_MOVE:
                    int newX=(int) event.getX();
                    int newY=(int) event.getY();
                    //划线
                    canvas.drawLine(startX, startY, newX, newY, paint);
                    startX=(int) event.getX();
                    startY=(int) event.getY();
                    iv_img.setImageBitmap(baseBitmap);
                    break;
                // 手指离开
                case MotionEvent.ACTION_UP:

                    break;
                }
                return true;
            }
        });
    }
    //保存图片
    public void save(View v){
        File file=new File(Environment.getExternalStorageDirectory(),System.currentTimeMillis()+".jpg");
        FileOutputStream stream;
        try {
            stream = new FileOutputStream(file);
            baseBitmap.compress(CompressFormat.JPEG, 100, stream);
            stream.close();
            //发送sd卡挂载通知
            Intent intent=new Intent();
            intent.setAction(Intent.ACTION_MEDIA_MOUNTED);
            intent.setData(Uri.fromFile(Environment.getExternalStorageDirectory()));
            sendBroadcast(intent);
            
            Toast.makeText(this, "保存图片成功", 0).show();
        } catch (Exception e) {
            e.printStackTrace();
            Toast.makeText(this, "保存图片失败", 0).show();
        }
        
    }
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016-04-02 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档