Android貝塞爾曲線實現(xiàn)手指軌跡
本文實例為大家分享了Android貝塞爾曲線實現(xiàn)手指軌跡的具體代碼,供大家參考,具體內(nèi)容如下
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表示當前控件已經(jīng)消費了下按動作,
// 之后的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);// 填充樣式改為描邊
// 路徑和畫筆聯(lián)合繪制成圖形
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、使用貝塞爾曲線后
將上面函數(shù)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前兩個參數(shù)是控制點,后兩個是終點
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();
}
}

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
- Android自定義view實現(xiàn)車載可調(diào)整軌跡線
- android繪制觸點軌跡的代碼
- Android自定義View實現(xiàn)公交成軌跡圖
- Android自定義視圖實現(xiàn)手指移動軌跡
- Android 利用三階貝塞爾曲線繪制運動軌跡的示例
- Android貝塞爾曲線初步學習第三課 Android實現(xiàn)添加至購物車的運動軌跡
- Android 游戲開發(fā)中繪制游戲觸摸軌跡的曲線圖
- Android輕松畫出觸摸軌跡
- 解決Android SurfaceView繪制觸摸軌跡閃爍問題的方法
- Android中SurfaceView和view畫出觸摸軌跡
- 一個簡單的Android軌跡動畫
相關文章
edittext + listview 實現(xiàn)搜索listview中的內(nèi)容方法(推薦)
下面小編就為大家?guī)硪黄猠dittext + listview 實現(xiàn)搜索listview中的內(nèi)容方法(推薦)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧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手機獲取gps和基站的經(jīng)緯度地址實現(xiàn)代碼
android手機如何獲取gps和基站的經(jīng)緯度地址,疑問,于是網(wǎng)上搜集整理一些,拿出來和大家分享下,希望可以幫助你們2012-12-12
Android實現(xiàn)EventBus登錄界面與傳值(粘性事件)
這篇文章主要為大家詳細介紹了Android實現(xiàn)EventBus登錄界面與傳值,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-11-11
Android 開發(fā)中使用Linux Shell實例詳解
這篇文章主要介紹了Android 開發(fā)中使用Linux Shell實例詳解的相關資料,需要的朋友可以參考下2017-03-03

