2014-08-28 39 views
0

我已經看到了它在海豚瀏覽器。有一些默認情況下已經創建的手勢。他們將重新繪製自己,以便用戶知道從哪裏開始繪畫。我注意到在Gesture對象中,有一個名爲toPath()的方法。但我不知道如何使用它,我不確定我是否在正確的軌道上。有人能告訴我該怎麼做嗎?謝謝。你可以看看下面的圖片。手勢自動繪製本身

enter image description here

回答

1

所有我會建議看看GestureBuilder從SDK樣本應用程序的第一個。它正是在你的問題中顯示的(小手勢縮略圖)。

我稍微延展的典範之作的Gesture API的使用更加清晰:

添加以下代碼GestureBuilderActivityGeatureBuilder樣本:

@Override 
protected void onListItemClick(ListView l, View v, int position, long id) { 
    super.onListItemClick(l, v, position, id); 

    final Intent intent = new Intent(getApplicationContext(), ShowGestureActivity.class); 

    intent.putExtra(ShowGestureActivity.GESTURE_NAME_EXTRA, ((NamedGesture)v.getTag()).name); 
    startActivity(intent); 
} 

它將推出新的測​​試活動ShowGestureActivity

public class ShowGestureActivity extends Activity { 
    public static final String GESTURE_NAME_EXTRA = "gesture_extra"; 
    private Gesture mGesture = null; 
    private FrameLayout mContainer; 
    private MyPathView mMyPathView; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.show_gesture); 

     final ArrayList<Gesture> gestures = GestureBuilderActivity.getStore() 
       .getGestures(getIntent().getStringExtra(GESTURE_NAME_EXTRA)); 

     if (gestures.size() == 1) { 
      mGesture = gestures.get(0); 
     } else { 
      Toast.makeText(getApplicationContext(), "No gesture available!", Toast.LENGTH_LONG).show(); 
     } 

     mContainer = (FrameLayout) findViewById(R.id.container); 
     mMyPathView = (MyPathView) findViewById(R.id.myPathView); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.show_gesture_menu, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     final int id = item.getItemId(); 

     if (mGesture == null) { 
      return false; 
     } 

     switch (id) { 
      case R.id.action_show_gesture_bmp: 
       final Bitmap gestureBmp = mGesture.toBitmap(mContainer.getWidth(), mContainer.getHeight(), 
         getResources().getDimensionPixelSize(R.dimen.gesture_thumbnail_inset), Color.YELLOW); 

       mMyPathView.setVisibility(View.GONE); 
       mContainer.setBackground(new BitmapDrawable(getResources(), gestureBmp)); 
       return true; 

      case R.id.action_show_gesture_path: 
       mMyPathView.setPath(mGesture.toPath(mContainer.getWidth(), mContainer.getHeight(), 
         getResources().getDimensionPixelSize(R.dimen.gesture_thumbnail_inset), 10)); 
       mMyPathView.setVisibility(View.VISIBLE); 
       mContainer.setBackground(null); 
       return true; 
     } 

     return super.onOptionsItemSelected(item); 
    } 
} 

onOptionsItemSelected,你可以看到兩個Gesture方法的使用可用於繪製。似乎toBitmap是很清楚的(GesturesBuilder應用程序本身使用,對於手勢縮略圖方式顯示在列表中)。 關於toPath:它爲您提供了對應於Gesture的路徑。之後,您可以根據需要使用該路徑進行繪製。 MyPathView從測試活動上面提供了這樣做的最簡單的方法:

public class MyPathView extends View { 
    private Paint mPaint; 
    private Path mPath = null; 

    public MyPathView(Context context) { 
     super(context); 
     init(null, 0); 
    } 

    public MyPathView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     init(attrs, 0); 
    } 

    public MyPathView(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
     init(attrs, defStyle); 
    } 

    private void init(AttributeSet attrs, int defStyle) { 
     mPaint = new Paint(); 
     mPaint.setColor(Color.YELLOW); 
     mPaint.setStyle(Paint.Style.STROKE); 
     mPaint.setStrokeWidth(getResources().getDimensionPixelSize(R.dimen.paint_width)); 
    } 

    public void setPath(final Path path) { 
     mPath = path; 
     invalidate(); 
    } 

    @Override 
    protected void onDraw(Canvas canvas) { 
     super.onDraw(canvas); 

     if (mPath != null) { 
      canvas.drawPath(mPath, mPaint); 
     } 
    } 
} 

和XML的(只是爲了舉例方便編譯):

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:id="@+id/container"> 

    <com.sandrstar.testapp.test.MyPathView 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:id="@+id/myPathView" 
     android:visibility="gone"/> 
</FrameLayout> 

如果要應用某種形式的動畫手勢繪圖,你需要獲得路徑,創建如上所述的自定義視圖,並應用一些動畫方法,例如就像一個在這裏描述Draw path on canvas with animation

+0

對不起,我遲到的答覆......太好了!我現在明白了。在閱讀你的答案之前,我使用[AnimatedPathView](https://github.com/matthewrkula/AnimatedPathView)來實現這個動畫。但是,假設我有很多不同的手勢,那麼按照您給我的鏈接的指示,我怎樣才能控制每個手勢的每個動畫? – Androidizing 2014-09-05 14:42:13

+0

控制每一個動畫究竟是什麼意思?該AnimatedPathView +動畫提供足夠的動畫控制。另外,爲了更好地控制動畫(例如啓動 - 停止),可以輕鬆擴展我在答案中的鏈接查看。 – sandrstar 2014-09-05 14:52:47

+0

我的意思是我想用你的方式而不是圖書館。請忘記AnimatedPathView,我只是碰巧提到它。現在我正在處理你給我的鏈接。謝謝:) – Androidizing 2014-09-05 15:30:22