【移动应用开发技术】Android如何实现画板功能_第1页
【移动应用开发技术】Android如何实现画板功能_第2页
【移动应用开发技术】Android如何实现画板功能_第3页
【移动应用开发技术】Android如何实现画板功能_第4页
【移动应用开发技术】Android如何实现画板功能_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

【移动应用开发技术】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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论