2015-09-27 18 views
0

我知道有一個MotionEvent,但這是一個不同的情況:我想要一個View越來越大,而我正在接觸它,並且如果我不再按這個View,它會逐漸縮小到原來的大小。Android:如何確定視圖是按下還是釋放?

onTouchEvent僅當我第一次按ViewACTION_DOWN);釋放ViewACTION_UP);或擦洗我的手指(ACTION_MOVE)。他們不幫助我的情況。所以我想知道,有沒有什麼優雅的解決方案,而不是像定時器一樣使用來解決低級別的問題?

回答

1

不,沒有一個真正優雅的方法來做到這一點(如果你考慮使用定時器不雅)。但我真的不用擔心使用這些解決方案。你可以這樣來做(假設viewView你動畫):

  1. 添加字段(的東西,管理您的View - 一個ActivityFragment):

private static final float SCALE_FACTOR = 0.2f; 
private static final long STEP_DELAY = 300; 
private Handler handler = new Handler(); 
private Runnable runnable = new Runnable() { 
    @Override 
    public void run() { 
     view.animate().scaleXBy(SCALE_FACTOR).scaleYBy(SCALE_FACTOR); 
     handler.postDelayed(runnable, STEP_DELAY); 
    } 
}; 
  • 設置一個OnTouchListener爲您View
  • view.setOnTouchListener(new View.OnTouchListener() { 
        @Override 
        public boolean onTouch(View v, MotionEvent event) { 
         switch (event.getAction()) { 
          case MotionEvent.ACTION_DOWN: 
           handler.postDelayed(runnable, STEP_DELAY); 
           return true; 
          case MotionEvent.ACTION_CANCEL: 
          case MotionEvent.ACTION_UP: 
           userImage.animate().cancel(); 
           handler.removeCallbacks(mRunnable); 
           return false; 
         } 
         return true; 
        } 
    }); 
    

    調整SCALE_FACTORSTEP_DELAY恰好滿足您的需求。

    相關問題