[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/5449.html

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

相关推荐

发表回复

登录后才能评论