![【移动应用开发技术】Android如何实现画板功能_第1页](http://file4.renrendoc.com/view/f0e1983d657da7e63803c526bbd225e9/f0e1983d657da7e63803c526bbd225e91.gif)
![【移动应用开发技术】Android如何实现画板功能_第2页](http://file4.renrendoc.com/view/f0e1983d657da7e63803c526bbd225e9/f0e1983d657da7e63803c526bbd225e92.gif)
![【移动应用开发技术】Android如何实现画板功能_第3页](http://file4.renrendoc.com/view/f0e1983d657da7e63803c526bbd225e9/f0e1983d657da7e63803c526bbd225e93.gif)
![【移动应用开发技术】Android如何实现画板功能_第4页](http://file4.renrendoc.com/view/f0e1983d657da7e63803c526bbd225e9/f0e1983d657da7e63803c526bbd225e94.gif)
![【移动应用开发技术】Android如何实现画板功能_第5页](http://file4.renrendoc.com/view/f0e1983d657da7e63803c526bbd225e9/f0e1983d657da7e63803c526bbd225e95.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
【移动应用开发技术】Android如何实现画板功能
public
class
MySurfaceView
extends
SurfaceView
implements
SurfaceHolder.Callback,
Runnable
{
//
SurfaceHolder实例
private
SurfaceHolder
mSurfaceHolder;
//
Canvas对象
private
Canvas
mCanvas;
//
控制子线程是否运行
private
boolean
startDraw;
//
Path实例
private
Path
mPath
=
new
Path();
//
Paint实例
private
Paint
mpaint
=
new
Paint();
public
MySurfaceView(Context
context,
AttributeSet
attrs)
{
super(context,
attrs);
initView();
//
初始化
}
private
void
initView()
{
mSurfaceHolder
=
getHolder();
mSurfaceHolder.addCallback(this);
//
设置可获得焦点
setFocusable(true);
setFocusableInTouchMode(true);
//
设置常亮
this.setKeepScreenOn(true);
}
@Override
public
void
run()
{
//
如果不停止就一直绘制
while
(startDraw)
{
//
绘制
draw();
}
}
/*
*
创建
*/
@Override
public
void
surfaceCreated(SurfaceHolder
holder)
{
startDraw
=
true;
new
Thread(this).start();
}
/*
*
改变
*/
@Override
public
void
surfaceChanged(SurfaceHolder
holder,
int
format,
int
width,
int
height)
{
}
/*
*
销毁
*/
@Override
public
void
surfaceDestroyed(SurfaceHolder
holder)
{
startDraw
=
false;
}
private
void
draw()
{
try
{
mCanvas
=
mSurfaceHolder.lockCanvas();
mCanvas.drawColor(Color.WHITE);
mpaint.setStyle(Paint.Style.STROKE);
mpaint.setStrokeWidth(DensityUtil.px2dip(getContext(),
30));
mpaint.setColor(Color.BLACK);
mCanvas.drawPath(mPath,
mpaint);
}
catch
(Exception
e)
{
}
finally
{
//
对画布内容进行提交
if
(mCanvas
!=
null)
{
mSurfaceHolder.unlockCanvasAndPost(mCanvas);
}
}
}
@Override
public
boolean
onTouchEvent(MotionEvent
event)
{
int
x
=
(int)
event.getX();
//获取手指移动的x坐标
int
y
=
(int)
event.getY();
//获取手指移动的y坐标
switch
(event.getAction())
{
case
MotionEvent.ACTION_DOWN:
mPath.moveTo(x,
y);
break;
case
MotionEvent.ACTION_MOVE:
mPath.lineTo(x,
y);
break;
case
MotionEvent.ACTION_UP:
break;
}
return
true;
}
//
重置画布
public
void
reset()
{
mPath.reset();
}
}/upload/information/20200623/125/124154.pngprivate
Button
reset_btn;
private
MySurfaceView
mview;
@Override
protected
void
onCreate(Bundle
savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
context
=
this;
mview
=
(MySurfaceView)
findViewById(R.id.MySurfaceView);
reset_btn
=
(Button)
findViewById(R.id.reset_btn);
reset_btn.setOnClickListener(new
View.OnClickListener()
{
@Override
public
void
onClick(View
v)
{
//清除
mview.reset();
}
});public
class
SecondActivity
extends
Activity
{
private
ImageView
img;
private
Bitmap
mBitmap;
private
Canvas
canvas;
private
Paint
paint;
//
重置按钮
private
Button
reset_btn;
@Override
protected
void
onCreate(Bundle
savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
img
=
(ImageView)
findViewById(R.id.img);
reset_btn
=
(Button)
findViewById(R.id.reset_btn);
reset_btn.setOnClickListener(new
View.OnClickListener()
{
@Override
public
void
onClick(View
v)
{
img.setImageBitmap(null);
showImage();
}
});
//
绘图
showImage();
}
private
void
showImage()
{
//
创建一张空白图片
mBitmap
=
Bitmap.createBitmap(720,
1280,
Bitmap.Config.ARGB_8888);
//
创建一张画布
canvas
=
new
Canvas(mBitmap);
//
画布背景为白色
canvas.drawColor(Color.WHITE);
//
创建画笔
paint
=
new
Paint();
//
画笔颜色为蓝色
paint.setColor(Color.BLUE);
//
宽度5个像素
paint.setStrokeWidth(5);
//
先将白色背景画上
canvas.drawBitmap(mBitmap,
new
Matrix(),
paint);
img.setImageBitmap(mBitmap);
img.setOnTouchListener(new
OnTouchListener()
{
int
startX;
int
startY;
@Override
public
boolean
onTouch(View
v,
MotionEvent
event)
{
switch
(event.getAction())
{
case
MotionEvent.ACTION_DOWN:
//
获取手按下时的坐标
startX
=
(int)
event.getX();
startY
=
(int)
event.getY();
break;
case
MotionEvent.ACTION_MOVE:
//
获取手移动后的坐标
int
endX
=
(int)
event.getX();
int
endY
=
(int)
event.getY();
//
在开始和结束坐标间画一条线
canvas.drawLine(startX,
startY,
endX,
endY,
paint);
//
刷新开始坐标
startX
=
(int)
event.getX();
startY
=
(int)
event.getY();
img.setImageBitmap(mBitmap);
break;
}
return
true;
}
});
}
}File
file
=
new
File(Environment.getExternalSto
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 金融机构保安工作内容详解
- 2025年全球及中国宠物安全救生衣行业头部企业市场占有率及排名调研报告
- 2025-2030全球顶底包装盒行业调研及趋势分析报告
- 2025年全球及中国落地式拆码盘机行业头部企业市场占有率及排名调研报告
- 2025-2030全球厨房家用电器行业调研及趋势分析报告
- 2025-2030全球智能电梯紫外线消毒系统行业调研及趋势分析报告
- 2025-2030全球商用储水式热水器行业调研及趋势分析报告
- 2025-2030全球耐高温硅胶电缆行业调研及趋势分析报告
- 2025-2030全球夹具零件行业调研及趋势分析报告
- 2025-2030全球磁参数测量仪行业调研及趋势分析报告
- 四川省自贡市2024-2025学年上学期八年级英语期末试题(含答案无听力音频及原文)
- 2025-2030年中国汽车防滑链行业竞争格局展望及投资策略分析报告新版
- 2025年上海用人单位劳动合同(4篇)
- 新疆乌鲁木齐地区2025年高三年级第一次质量监测生物学试卷(含答案)
- 卫生服务个人基本信息表
- 高中英语北师大版必修第一册全册单词表(按单元编排)
- 苗圃建设项目施工组织设计范本
- 广东省湛江市廉江市2023-2024学年八年级上学期期末考试数学试卷(含答案)
- 学校食品安全举报投诉处理制度
- 2025年生物安全年度工作计划
- 安徽省芜湖市2023-2024学年高一上学期期末考试 生物 含解析
评论
0/150
提交评论