Android贝塞尔曲线实现手指轨迹

发布时间:2019-08-08 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了Android贝塞尔曲线实现手指轨迹脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

本文实例为大家分享了AndROId贝塞尔曲线实现手指轨迹的具体代码,供大家参考,具体内容如下

1、使用贝塞尔曲线前

MyView.java

 public 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.java

 public 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

 <&#63;xML version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.COM/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>

运行效果(不够顺滑)

Android贝塞尔曲线实现手指轨迹

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);     canvas.drawPath(mPath,paint);    }     public void reset(){     mPath.reset();     postInvalidate();    }   }

Android贝塞尔曲线实现手指轨迹

android教程
脚本网站
android studio

脚本宝典总结

以上是脚本宝典为你收集整理的Android贝塞尔曲线实现手指轨迹全部内容,希望文章能够帮你解决Android贝塞尔曲线实现手指轨迹所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。