Androidx学习笔记(75)--- 画画板
2016-02-24 20:06
375 查看
画画板
记录用户触摸事件的XY坐标,绘制直线*给ImageView设置触摸侦听,得到用户的触摸事件,并获知用户触摸ImageView的坐标iv.setOnTouchListener(newOnTouchListener(){ @Override publicbooleanonTouch(Viewv,MotionEventevent){ //TODOAuto-generatedmethodstub switch(event.getAction()){ //触摸屏幕 caseMotionEvent.ACTION_DOWN: //得到触摸屏幕时手指的坐标 startX=(int)event.getX(); startY=(int)event.getY(); break; //在屏幕上滑动 caseMotionEvent.ACTION_MOVE: //用户滑动手指,坐标不断的改变,获取最新坐标 intnewX=(int)event.getX(); intnewY=(int)event.getY(); //用上次onTouch方法得到的坐标和本次得到的坐标绘制直线 canvas.drawLine(startX,startY,newX,newY,paint); iv.setImageBitmap(copyBm); startX=newX; startY=newY; break; } returntrue; } });刷子效果,加粗画笔
paint.setStrokeWidth(8);调色板,改变画笔颜色
paint.setColor(Color.GREEN);保存图片至SD卡
FileOutputStreamfos=null; try{ fos=newFileOutputStream(newFile("sdcard/dazuo.png")); }catch(FileNotFoundExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); } //保存图片 copyBm.compress(CompressFormat.PNG,100,fos);系统每次收到SD卡就绪广播时,都会去遍历sd卡的所有文件和文件夹,把遍历到的所有多媒体文件都在MediaStore数据库保存一个索引,这个索引包含多媒体文件的文件名、路径、大小图库每次打开时,并不会去遍历sd卡获取图片,而是通过内容提供者从MediaStore数据库中获取图片的信息,然后读取该图片系统开机或者点击加载sd卡按钮时,系统会发送sd卡就绪广播,我们也可以手动发送就绪广播
Intentintent=newIntent(); intent.setAction(
Int
ent
.
A
CTION_MEDIA_MOUNTED
); intent.setData(
Uri.fromFile(Environment.getExternalStorageDirectory())
); sendBroadcast(intent);打开模拟器选项,便于调试观察
publicclassMainActivityextendsActivity{
privateImageViewiv;
intstartX;
intstartY;
privateCanvascanvas;
privatePaintpaint;
privateBitmapbmCopy;
@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//加载画画板的背景图
BitmapbmSrc=BitmapFactory.decodeResource(getResources(),R.drawable.bg);
bmCopy=Bitmap.createBitmap(bmSrc.getWidth(),bmSrc.getHeight(),bmSrc.getConfig());
paint=newPaint();
canvas=newCanvas(bmCopy);
//绘制
canvas.drawBitmap(bmSrc,newMatrix(),paint);
iv=(ImageView)findViewById(R.id.iv);
iv.setImageBitmap(bmCopy);
//设置触摸侦听
iv.setOnTouchListener(newOnTouchListener(){
//触摸屏幕时,触摸事件产生时,此方法调用
@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(bmCopy);
break;
//用户手指离开屏幕
caseMotionEvent.ACTION_UP:
break;
}
//true:告诉系统,这个触摸事件由我来处理
//false:告诉系统,这个触摸事件我不处理,这时系统会把触摸事件传递给imageview的父节点
returntrue;
}
});
}//设置颜色
publicvoidred(Viewv){
paint.setColor(Color.RED);
}
publicvoidgreen(Viewv){
paint.setColor(Color.GREEN);
}
//设置画刷
publicvoidbrush(Viewv){
paint.setStrokeWidth(7);
}
//保存
publicvoidsave(Viewv){
Filefile=newFile("sdcard/dazuo.png");
FileOutputStreamfos=null;
try{
fos=newFileOutputStream(file);
}catch(FileNotFoundExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
bmCopy.compress(CompressFormat.PNG,100,fos);
//发送sd卡就绪广播
Intentintent=newIntent();
intent.setAction(Intent.ACTION_MEDIA_MOUNTED);
intent.setData(Uri.fromFile(Environment.getExternalStorageDirectory()));
sendBroadcast(intent);
}
}
相关文章推荐
- Androidx学习笔记(74)--- 对图片进行特效处理
- Android卡片式布局的简单实现方法
- 使用Toolbar + DrawerLayout快速实现菜单侧滑
- Androidx学习笔记(73)--- 在内存中创建图片的副本
- Android的IPC机制(三)——Binder连接池
- TooBar的使用
- Androidx学习笔记(72)--- 加载大图片
- Androidx学习笔记(71)--- 需要支付的应用(调用远程的服务)
- android的进阶findViewById
- 如何解决Android 5.0中出现的警告: Service Intent must be explicit:
- startActivity构成的Activity链中间断掉会如何?
- Android的消息循环机制 Looper Handler类分析
- Android样式的开发:Style篇
- Androidx学习笔记(70)--- 进程优先级
- Androidx学习笔记(69)--- AIDL
- Androidx学习笔记(68)--- 服务分类
- Android技术积累:开发规范
- Androidx学习笔记(67)--- 使用代码注册广播接收者(实现屏幕锁屏和解锁)
- Androidx学习笔记(66)--- 简单音乐播放器原理
- Androidx学习笔记(65)--- 通过绑定服务调用服务里的方法