2015-12-15 75 views
1

我想設置一個imageview onclicklistener,當用戶點擊圖片時,它回到最後的活動。但不知何故,我也需要捏縮放功能。問題是,當我嘗試捏和放大時,聽衆認爲我正在點擊圖像,因此它返回到最後一個活動。我怎樣才能實現這兩個?如何設置縮放縮放功能並點擊返回上一個活動?

+0

我用這https://github.com/davemorrissey/subsampling-scale-image-view庫用於捏縮放和圖像點擊正在與它完美配合 –

回答

0

我不知道你是想在同一時間還是一個一個地做兩個。 但這裏有一個想法。

mImageView.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      Animation anim = null; 
      // init your anim 
      anim.setAnimationListener(new AnimationListener() { 

       @Override 
       public void onAnimationStart(Animation animation) { 
        // TODO Auto-generated method stub 

       } 

       @Override 
       public void onAnimationRepeat(Animation animation) { 
        // TODO Auto-generated method stub 

       } 

       @Override 
       public void onAnimationEnd(Animation animation) { 
        // TODO Auto-generated method stub 
        startActivity(new Intent()); 
       } 
      }); 

      anim.start(); 
     } 
    }); 

在整個動畫完成後開始意圖。

+0

不,它不起作用。情況是:現在我有一個由我創建的'ScaleImageView'類,它包含有關如何縮放和拖動圖像的事件。但在'ScaleImageView'類中它有一個'onTouchListener',在監聽器中,每個事件都會對我進行點擊和完成()。 –

+0

如果你的'onTouchuListener'返回'false',可能會起作用,如果stil不起作用,那麼發佈'onTouchuListener'。 –

0

我找到了一種輕鬆解決問題的方法,但它有點硬編碼。

我已經設置了一個觸摸監聽器,而不是一個點擊監聽器,然後當我的手指觸及時,我得到當前的毫秒數。當我的手指向上時,我再次獲得當前的毫秒數。所以我比較兩個時間,如果endTime - startTime < 100(0.1秒),活動將關閉。否則將被認爲是一個捏動作

這裏是我的代碼(因爲你不能在0.1秒右捏?):

private View.OnTouchListener mAttachmentViewOnTouch = new View.OnTouchListener(){ 
     public boolean onTouch(View v, MotionEvent event) { 
      if (event.getAction() == MotionEvent.ACTION_DOWN) { 
       startTime = System.currentTimeMillis(); 
       return true; 
      } 

      if (event.getAction() == MotionEvent.ACTION_UP) { 
       endTime = System.currentTimeMillis(); 
       if (endTime - startTime < 100) 
        finish(); 
       return true; 
      } 

      if (event.getAction() == MotionEvent.ACTION_POINTER_DOWN) 
      { 
       startTime = 0; 
       endTime = 1000; 
       return true; 
      } 
      if(event.getAction() == MotionEvent.ACTION_POINTER_UP) 
      { 
       startTime = 0; 
       endTime = 1000; 
       return true; 
      } 



      return false; 
     } 
    };