本文实例为大家分享了Android实现简单画图画板的具体代码,供大家参考,具体内容如下
效果如图:
布局文件:
<RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<ImageView
android:id="@+id/iv"
android:layout_width="600px"
android:layout_height="900px"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_alignParentStart="true"/>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_gravity="center_horizontal"
android:orientation="horizontal">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="red"
android:text="红色"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="green"
android:text="绿色"
/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="brush"
android:text="刷子"
/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="eraser"
android:text="橡皮擦"
/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="save"
android:text="保存"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="cancel"
android:text="取消"/>
</LinearLayout>
</RelativeLayout>
MainActivity.java
packagecom.example.yulongji.android10;
importandroid.app.Activity;
importandroid.content.Intent;
importandroid.graphics.Bitmap;
importandroid.graphics.BitmapFactory;
importandroid.graphics.Canvas;
importandroid.graphics.Color;
importandroid.graphics.Matrix;
importandroid.graphics.Paint;
importandroid.net.Uri;
importandroid.os.Bundle;
importandroid.os.Environment;
importandroid.view.MotionEvent;
importandroid.view.View;
importandroid.widget.ImageView;
importjava.io.File;
importjava.io.FileNotFoundException;
importjava.io.FileOutputStream;
publicclassMainActivityextendsActivity{
privateImageViewiv;
//原图
privateBitmapbitsrc;
//拷贝图
privateBitmapbitcopy;
privateCanvascanvas;
privatePaintpaint;
privateintstartX;
privateintstartY;
@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
iv=(ImageView)findViewById(R.id.iv);
setBitmap();
//设置触摸侦听
iv.setOnTouchListener(newView.OnTouchListener(){
//触摸屏幕时,触摸事件产生时,此方法调用
@Override
publicbooleanonTouch(Viewv,MotionEventevent){
intaction=event.getAction();
switch(action){
//用户手指摸到屏幕
caseMotionEvent.ACTION_DOWN:
startX=(int)event.getX();
startY=(int)event.getY();
break;
//用户手指正在滑动
caseMotionEvent.ACTION_MOVE:
intx=(int)event.getX();
inty=(int)event.getY();
canvas.drawLine(startX,startY,x,y,paint);
//每次绘制完毕之后,本次绘制的结束坐标变成下一次绘制的初始坐标
startX=x;
startY=y;
iv.setImageBitmap(bitcopy);
break;
//用户手指离开屏幕
caseMotionEvent.ACTION_UP:
break;
}
//true:告诉系统,这个触摸事件由我来处理
//false:告诉系统,这个触摸事件我不处理,这时系统会把触摸事件传递给imageview的父节点
returntrue;
}
});
}
publicvoidsetBitmap(){
//加载画画板的背景图
bitsrc=BitmapFactory.decodeResource(getResources(),R.drawable.bg);
//创建图片副本
//1.在内存中创建一个与原图一模一样大小的bitmap对象,创建与原图大小一致的白纸
bitcopy=Bitmap.createBitmap(bitsrc.getWidth(),bitsrc.getHeight(),
bitsrc.getConfig());
//2.创建画笔对象
paint=newPaint();
//3.创建画板对象,把白纸铺在画板上
canvas=newCanvas(bitcopy);
//4.开始作画,把原图的内容绘制在白纸上
canvas.drawBitmap(bitsrc,newMatrix(),paint);
//5.将绘制的图放入imageview中
iv.setImageBitmap(bitcopy);
}
publicvoidred(Viewview){
paint.setColor(Color.RED);
}
publicvoidgreen(Viewview){
paint.setColor(Color.GREEN);
}
publicvoidbrush(Viewview){
paint.setStrokeWidth(8);
}
publicvoidcancel(Viewview){
setBitmap();
}
publicvoideraser(Viewview){
paint.setColor(Color.rgb(243,243,243));
paint.setStrokeWidth(30);
}
publicvoidsave(Viewview){
Stringpath=Environment.getExternalStorageDirectory()+"/"+"2.png";
Filefile=newFile(path);
try{
FileOutputStreamfos=newFileOutputStream(file);
bitcopy.compress(Bitmap.CompressFormat.PNG,100,fos);
}catch(FileNotFoundExceptione){
e.printStackTrace();
}
//发送sd卡就绪广播
Intentintent=newIntent();
intent.setAction(Intent.ACTION_MEDIA_MOUNTED);
intent.setData(Uri.fromFile(Environment.getExternalStorageDirectory()));
sendBroadcast(intent);
}
}
您可能感兴趣的文章:Android自定义view之画图板实现方法Android画图之抗锯齿paint和Canvas两种方式实例Androidcanvas画图操作之切割画布实现方法(clipRect)Android简单实现画图功能Android编程画图之抗锯齿解决方法Android入门之画图详解Android画图并保存图片的具体实现代码android实现简单的画画板实例代码Android实现画板、写字板功能(附源码下载)Android自定义SurfaceView实现画板功能