Android貝塞爾曲線實現手指軌跡
更新時間:2019年06月01日 11:09:11 作者:在云端123
這篇文章主要為大家詳細介紹了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動作也會繼續(xù)傳遞到當前控件中
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
<?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>
運行效果(不夠順滑)

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();
}
}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
edittext + listview 實現搜索listview中的內容方法(推薦)
下面小編就為大家?guī)硪黄猠dittext + listview 實現搜索listview中的內容方法(推薦)。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-03-03
全面解析Android的開源圖片框架Universal-Image-Loader
這篇文章主要介紹了Android的開源圖片框架Universal-Image-Loader,Universal-Image-Loader在GitHub上開源,其提供的圖片加載功能令人印象相當深刻,需要的朋友可以參考下2016-04-04
uniapp打包Android的apk(原生APP-云打包)及發(fā)布測試全過程
uni-app本地打包apk需要提前做非常多的準備工作,而且可能會勸退一些開發(fā)者,下面這篇文章主要給大家介紹了關于uniapp打包Android的apk(原生APP-云打包)及發(fā)布測試的相關資料,需要的朋友可以參考下2023-02-02
Android實現EventBus登錄界面與傳值(粘性事件)
這篇文章主要為大家詳細介紹了Android實現EventBus登錄界面與傳值,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-11-11
Android 開發(fā)中使用Linux Shell實例詳解
這篇文章主要介紹了Android 開發(fā)中使用Linux Shell實例詳解的相關資料,需要的朋友可以參考下2017-03-03

