Android 多媒体开发学习之制作一个简单的画板
2015-07-30 21:08
796 查看
一个简单的画板,可以绘制,可以选择颜色,可以保存。 当然了这种工具一般常用的通讯软件都是会有的,比如QQ, 飞秋等
其中我们必须监听手指的触摸事件,手指的触摸事件就分为3种: 按下,抬起,移动。 通常我们只需要关系按下的时候,然后就是整个手指滑动的过程。然后将手指滑动的过程绘制为不同的直线。当然也可以设置绘制的颜色,绘制直线的宽度等。
public class MainActivity extends Activity {
private int TouchX;
private int TouchY;
private Paint paint;
private Canvas canvas;
Bitmap bitmapCopy;
ImageView lView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//1: 先创建一个画板的背景图片,这时候这图片需要修改,就需要创建该图片的副本
Bitmap bitmapSrc = BitmapFactory.decodeResource(getResources(), R.drawable.bg);
bitmapCopy = Bitmap.createBitmap(bitmapSrc.getWidth(), bitmapSrc.getHeight(), bitmapSrc.getConfig());
paint = new Paint();
canvas = new Canvas(bitmapCopy);
canvas.drawBitmap(bitmapSrc, new Matrix(), paint);
lView = (ImageView) findViewById(R.id.lv);
lView.setImageBitmap(bitmapCopy);
//2: 就需要监听手指的触摸事件
lView.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
//手指触摸分三种: 按下, 抬起,移动
int action = event.getAction();
switch (action) {
case MotionEvent.ACTION_DOWN:
//首先是按下,当按下时,需要记录第一次按下的位置
TouchX = (int) event.getX();
TouchY = (int) event.getY();
break;
case MotionEvent.ACTION_MOVE:
//只要每次移动,都会产生移动事件的,得到当前的坐标
int x = (int)event.getX();
int y = (int)event.getY();
//画线
canvas.drawLine(TouchX, TouchY, x, y, paint);
//更改下次绘制的起始坐标
TouchX = x;
TouchY = y;
lView.setImageBitmap(bitmapCopy);
break;
case MotionEvent.ACTION_UP:
break;
}
//true:告诉系统,这个触摸事件由我来处理
//false:告诉系统,这个触摸事件我不处理,这时系统会把触摸事件传递给imageview的父节点
return true;
}
});
}
//设置画笔的颜色为红色
public void red(View v)
{
paint.setColor(Color.RED);
}
//设置画笔的颜色为绿色
public void green(View v)
{
paint.setColor(Color.GREEN);
}
//设置刷子的宽度
public void brush(View v)
{
paint.setStrokeWidth(7);
}
//保存
public void save(View v)
{
File file = new File("sdcard/tupian.png");
FileOutputStream fStream = null;
try {
fStream = new FileOutputStream(file);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//保存为png格式,100代表最高质量
bitmapCopy.compress(CompressFormat.PNG, 100, fStream);
}
}
以上就是一个简单的画板,可以绘制简单的图片,可以实现保存。
其中我们必须监听手指的触摸事件,手指的触摸事件就分为3种: 按下,抬起,移动。 通常我们只需要关系按下的时候,然后就是整个手指滑动的过程。然后将手指滑动的过程绘制为不同的直线。当然也可以设置绘制的颜色,绘制直线的宽度等。
public class MainActivity extends Activity {
private int TouchX;
private int TouchY;
private Paint paint;
private Canvas canvas;
Bitmap bitmapCopy;
ImageView lView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//1: 先创建一个画板的背景图片,这时候这图片需要修改,就需要创建该图片的副本
Bitmap bitmapSrc = BitmapFactory.decodeResource(getResources(), R.drawable.bg);
bitmapCopy = Bitmap.createBitmap(bitmapSrc.getWidth(), bitmapSrc.getHeight(), bitmapSrc.getConfig());
paint = new Paint();
canvas = new Canvas(bitmapCopy);
canvas.drawBitmap(bitmapSrc, new Matrix(), paint);
lView = (ImageView) findViewById(R.id.lv);
lView.setImageBitmap(bitmapCopy);
//2: 就需要监听手指的触摸事件
lView.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
//手指触摸分三种: 按下, 抬起,移动
int action = event.getAction();
switch (action) {
case MotionEvent.ACTION_DOWN:
//首先是按下,当按下时,需要记录第一次按下的位置
TouchX = (int) event.getX();
TouchY = (int) event.getY();
break;
case MotionEvent.ACTION_MOVE:
//只要每次移动,都会产生移动事件的,得到当前的坐标
int x = (int)event.getX();
int y = (int)event.getY();
//画线
canvas.drawLine(TouchX, TouchY, x, y, paint);
//更改下次绘制的起始坐标
TouchX = x;
TouchY = y;
lView.setImageBitmap(bitmapCopy);
break;
case MotionEvent.ACTION_UP:
break;
}
//true:告诉系统,这个触摸事件由我来处理
//false:告诉系统,这个触摸事件我不处理,这时系统会把触摸事件传递给imageview的父节点
return true;
}
});
}
//设置画笔的颜色为红色
public void red(View v)
{
paint.setColor(Color.RED);
}
//设置画笔的颜色为绿色
public void green(View v)
{
paint.setColor(Color.GREEN);
}
//设置刷子的宽度
public void brush(View v)
{
paint.setStrokeWidth(7);
}
//保存
public void save(View v)
{
File file = new File("sdcard/tupian.png");
FileOutputStream fStream = null;
try {
fStream = new FileOutputStream(file);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//保存为png格式,100代表最高质量
bitmapCopy.compress(CompressFormat.PNG, 100, fStream);
}
}
以上就是一个简单的画板,可以绘制简单的图片,可以实现保存。
相关文章推荐
- 全自动化的 Android 编译管线
- 【Android平台安全方案】の #00-请不要在外部存储(SD卡)加密存储的敏感信息
- Android - 滚动ListView的适配器
- android动画之从源码角度分析动画原理(一)
- Android studio在函数头部添加说明性注释和参数的注释的快捷键
- Android下拉刷新完全解析
- Zoiper Iphone android 通话推荐设置!
- Android AsyncTask的使用
- 【Android】利用AutoCompleteTextView控件联系人自动补全与根据联系人姓名查询电话
- 深入剖析Android四大组件(二)——Service服务之启动与绑定
- Android:仿手机QQ朋友动态ListView
- Android Native C Log
- Android环境安装后adb命令不生效的解决
- Android:Handler消息传递机制
- Android自定义AlterDialog,并给其中的控件添加监听事件
- Android 多媒体开发学习之创建图片的副本
- Android中注册和发送广播中添加权限
- Android中实现全屏、无标题栏
- android相关资料
- Android进程内通信