【移动应用开发技术】怎么在Android中利用贝塞尔曲线实现手指轨迹_第1页
【移动应用开发技术】怎么在Android中利用贝塞尔曲线实现手指轨迹_第2页
【移动应用开发技术】怎么在Android中利用贝塞尔曲线实现手指轨迹_第3页
【移动应用开发技术】怎么在Android中利用贝塞尔曲线实现手指轨迹_第4页
【移动应用开发技术】怎么在Android中利用贝塞尔曲线实现手指轨迹_第5页
免费预览已结束,剩余2页可下载查看

下载本文档

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

文档简介

【移动应用开发技术】怎么在Android中利用贝塞尔曲线实现手指轨迹

本篇文章给大家分享的是有关怎么在Android中利用贝塞尔曲线实现手指轨迹,在下觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着在下一起来看看吧。1、使用贝塞尔曲线前MyView.javapublic

class

MyView

extends

View

{

//

实例一个路径对象

private

Path

mPath

=

new

Path();

public

MyView(Context

context)

{

super(context);

//

TODO

Auto-generated

constructor

stub

}

public

MyView(Context

context,

AttributeSet

attrs)

{

super(context,

attrs);

}

@Override

public

boolean

onTouchEvent(MotionEvent

event)

{

//

TODO

Auto-generated

method

stub

switch

(event.getAction())

{

//

按下

case

MotionEvent.ACTION_DOWN:

//getX()和getY()获得的永远是相对view的触摸位置坐标

mPath.moveTo(event.getX(),

event.getY());

//

return

true表示当前控件已经消费了下按动作,

//

之后的ACTION_MOVE、ACTION_UP动作也会继续传递到当前控件中

return

true;

//

移动

case

MotionEvent.ACTION_MOVE:

mPath.lineTo(event.getX(),

event.getY());

//

postInvalidate用来重绘控件,在非UI线程中使用

postInvalidate();

default:

break;

}

return

super.onTouchEvent(event);

}

@Override

protected

void

onDraw(Canvas

canvas)

{

//

TODO

Auto-generated

method

stub

super.onDraw(canvas);

//

实例一个画笔并设置画笔样式

Paint

paint

=

new

Paint();

paint.setColor(Color.RED);

paint.setStyle(Paint.Style.STROKE);//

填充样式改为描边

//

路径和画笔联合绘制成图形

canvas.drawPath(mPath,

paint);

}

public

void

reset()

{

//

清除掉path里的线条和曲线,但是不会改变它的fill-type

mPath.reset();

//刷新View,清屏

invalidate();

}

}MyActivity.javapublic

class

MyActivity

extends

Activity

{

MyView

myView;

Button

reset;

@Override

protected

void

onCreate(Bundle

savedInstanceState)

{

//

TODO

Auto-generated

method

stub

super.onCreate(savedInstanceState);

setContentView(R.layout.gesture);

myView

=

(MyView)

findViewById(R.id.myView);

reset

=

(Button)

findViewById(R.id.reset);

reset.setOnClickListener(new

OnClickListener()

{

@Override

public

void

onClick(View

v)

{

//

TODO

Auto-generated

method

stub

myView.reset();

}

});

}

}gesture.xml<?xml

version="1.0"

encoding="utf-8"?>

<LinearLayout

xmlns:android="/apk/res/android"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical"

>

<Button

android:id="@+id/reset"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:text="reset"

/>

<com.example.gesture.MyView

android:id="@+id/myView"

android:layout_width="match_parent"

android:layout_height="match_parent"

/>

</LinearLayout>运行效果(不够顺滑)2、使用贝塞尔曲线后将上面函数lineTo()改为quadTo()public

class

MySecondView

extends

View

{

private

Path

mPath=new

Path();

private

float

mPreX,mPreY;

public

MySecondView(Context

context)

{

super(context);

}

public

MySecondView(Context

context,

AttributeSet

attrs)

{

super(context,

attrs);

//

TODO

Auto-generated

constructor

stub

}

@Override

public

boolean

onTouchEvent(MotionEvent

event)

{

//

TODO

Auto-generated

method

stub

switch

(event.getAction())

{

case

MotionEvent.ACTION_DOWN:

//将Path的初始位置设置到手指的触点处

mPath.moveTo(event.getX(),

event.getY());

mPreX=event.getX();

mPreY=event.getY();

return

true;

case

MotionEvent.ACTION_MOVE:

float

endX=(mPreX+event.getX())/2;

float

endY=(mPreY+event.getY())/2;

//quadTo前两个参数是控制点,后两个是终点

mPath.quadTo(mPreX,

mPreY,

endX,

endY);

mPreX=event.getX();

mPreY=event.getY();

invalidate();

default:

break;

}

return

super.onTouchEvent(event);

}

@Override

protected

void

onDraw(Canvas

canvas)

{

super.onDraw(canvas);

Paint

paint

=

new

Paint();

paint.setStyle(Paint.Style.STROKE);

paint.setColor(Color.RED);

paint.setStrokeWidth(2);

c

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论