2012-06-17 86 views
1

我嘗試使imageview可點擊。 實際上它是可點擊的,所以我可以在用戶觸摸圖像視圖後調用一個Intent。 但我很努力地改變觸摸的圖像。ImageView和touchListener

我想以下幾點:

  • 默認(無觸摸):此搜索
  • 用戶觸摸的ImageView:改變鏡像2
  • 用手指用戶移出的ImageView的:改回此搜索 (無需調用意圖)
  • 用戶untouches imageview的:打電話意圖,然後切換回此搜索

這些東西中的一部分與以下代碼一起工作:

final ImageView v = (ImageView) findViewById(R.id.profileImage); 

    v.setOnTouchListener(new OnTouchListener() { 
     @Override 
     public boolean onTouch(View arg0, MotionEvent arg1) { 
      switch (arg1.getAction()) { 
      case MotionEvent.ACTION_DOWN: { 
        v.setImageResource(R.drawable.ic_contact_picture_down); 

       break; 
      } 


      case MotionEvent.ACTION_CANCEL:{ 

       v.setImageResource(R.drawable.ic_contact_picture); 
       break; 

      } 

      case MotionEvent.ACTION_UP: { 

       takePhoto(); 

       v.setImageResource(R.drawable.ic_contact_picture); 
       break; 
      } 

      } 
      return true; 
     } 
    }); 

圖像觸摸正確地改變爲image2。所以ACTION_DOWN正在工作。 如果用戶不改變圖像視圖,則調用ACTION_UP。但是如果在圖像視圖之外完成觸摸,也會被調用。如果發生這種情況,我想切換到image1但不能調用takePhoto()函數。 ACTION_CANCEL從未被調用,我認爲這是上述情況的候選人。

回答

0

您可以嘗試使用Rect舉行ImageView的邊界,然後用ACTION_MOVE

例如,聲明Rect對象,

private Rect rect; 

然後在你的​​,初始化Rect和檢查使用ACTION_MOVE,

v.setOnTouchListener(new OnTouchListener() { 
    @Override 
    public boolean onTouch(View arg0, MotionEvent arg1) { 
     switch (arg1.getAction()) { 
      case MotionEvent.ACTION_DOWN: { 
      // Declare the bounds of the rect 
      rect = new Rect(v.getLeft(), v.getTop(), v.getRight(), v.getBottom()); 
      v.setImageResource(R.drawable.ic_contact_picture_down); 

      break; 
      } 

      case MotionEvent.ACTION_MOVE:{ 
      if(!rect.contains((int)arg1.getX(), (int)arg1.getY())) { 
       // Outside the bounds 
       v.setImageResource(R.drawable.ic_contact_picture); 
      } 
      break;   
      } 

      case MotionEvent.ACTION_UP: { 

      takePhoto(); 

      v.setImageResource(R.drawable.ic_contact_picture); 
      break; 
      } 
     } 
     return true; 
    } 
}); 

對不起,我沒有測試過這個,但我認爲你可以得到這個想法:)

+0

我已經嘗試過,現在如果我移動到圖像外面,它會設置圖像。但是仍然會調用ACTION_UP,雖然我不接觸圖像。所以我只是在那裏添加了如果聲明。現在工作 – tobias