2015-12-19 110 views
-1

我想製作一個ImageView?當我觸摸它,它改變的背景下,當我拖動手指遠的它,它變得不正常,我不知道該怎麼辦,謝謝完成觸摸後ImageView

imgButton.setOnTouchListener(new View.OnTouchListener() { 
     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      cmp++; 
      txt2.setText(" " + cmp); 
      //Quant on touche l'image : 
      if (event.getActionMasked() == MotionEvent.ACTION_DOWN) { 
       imgButton.getDrawable().setColorFilter(0x77000000, PorterDuff.Mode.SRC_ATOP); 
      } 
      // si Je bouge le dois sur l'image et .... 
      if (event.getActionMasked() == MotionEvent.ACTION_MOVE) { 
       //... et que le doit quitte l'image 
       if (event.getX() < 0 || event.getX() > v.getWidth() || event.getY() < 0 || event.getY() > v.getHeight()) { 
        imgButton.getDrawable().setColorFilter(0x00000001, PorterDuff.Mode.SRC_ATOP); 
       } 
       if (event.getX() > 0 && event.getX() < v.getWidth() && event.getY() > 0 && event.getY() < v.getHeight()) { 
        // ... et que le doit revient vers L'image 
        imgButton.getDrawable().setColorFilter(0x77000000, PorterDuff.Mode.SRC_ATOP); 
       } 
      } 
      // Si je lève le doits et... 
      if (event.getActionMasked() == MotionEvent.ACTION_UP) { 
       // .... sur l'image : 
       if (event.getX() > 0 && event.getX() < v.getWidth() && event.getY() > 0 && event.getY() < v.getHeight()) { 
        //Finger back to the view 
        imgButton.getDrawable().setColorFilter(0x00000001, PorterDuff.Mode.SRC_ATOP); 
        Intent i = new Intent(MainActivity.this, game.class); 
        startActivity(i); 
       } 
      } 
      return true; 
     } 
    }); 
+1

不清楚。爲什麼不使用通常的點擊監聽器呢? –

+0

這就是我想要做的: 我有圖像視圖,當我觸摸它時,它會像更改ColorFilter一樣生效(通知用戶該按鈕被觸摸),並且當我拖動手指遠離圖像時,它變得正常(通知用戶該圖像沒有被觸摸),並再次當我拖動手指靠近imgView它再次採取的效果, –

+0

在我看來,你確實想要一個狀態列表選擇器,在正常的點擊。沒有「拖動,關閉,遠,觸摸,非觸摸......」。只需點擊或不點擊。通過視覺反饋。 –

回答

0

您應該使用getActionMasked()而不是的getAction()

的getAction()返回與指針信息的動作而getActionMasked()只返回簡單的動作,這使得正確的動作的比較工作。

然後在onTouch方法中捕捉正確的操作。

public boolean onTouch(View v, MotionEvent event) { 
    if(event.getActionMasked()==MotionEvent.ACTION_DOWN) { 
     //Finger down 
     //Change the color 
    } 
    if(event.getActionMasked()==MotionEvent.ACTION_MOVE) { 
     if(event.getX()<0 || event.getX()>v.getWidth() || event.getY()<0 || event.getY()>v.getHeight()){ 
      //Finger exit the view 
      //Change the color back 
     } 
    } 
    if(event.getActionMasked()==MotionEvent.ACTION_UP) { 
     //Finger up 
     //Change the color back 
    } 
    return true; 
} 

返回的值應該是在大多數情況下真正。見this article

+0

謝謝你有幫助;) 但是,如果我仍然感動和回到圖像視圖並對其進行操作,邏輯上必須觸發事件Onclick如何執行此操作 –

+0

在操作中,添加if語句以檢查手指是否在視圖中(就像我在動作中移動一樣)。然後使用View的callOnClick()方法手動觸發onClick事件。 –

0

繪製創建文件夾下的XML文件命名爲您的應用程序的change.xml,並把下面的代碼。用你的顏色代碼修改它。

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android" > 
    <item android:state_pressed="true"> 
     <color android:color="#00FF00"/> 
    </item> 
    <item android:state_pressed="false"> 
     <color android:color="#00FFFF"/> 
    </item> 
</selector> 

和下面的屬性添加到您的佈局中的ImageView

android:background="@drawable/change" 
+0

完成,但現在我應該怎麼做MainActivity.java,這是我第一次使用這種方法,那麼我應該在代碼中做什麼? –

+0

刪除setOnTouchListener,不需要那個 – SachinS

+0

答案呢? – SachinS