[android] 图片画画板详解手机开发

页面布局,相对布局

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

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

 

获取到ImageView对象

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

参数:width height宽高写死,configBitmap.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()方法,可以得到坐标

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

调用Canvas对象的drawLine()方法,画一条线,参数:startXstartYnewXnewYpaint

 

获取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()方法 发送广播

 代码:

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(); 
        } 
         
    } 
}

[android] 图片画画板详解手机开发

原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/tech/app/5449.html

(0)
上一篇 2021年7月16日 23:48
下一篇 2021年7月16日 23:48

相关推荐

发表回复

登录后才能评论