2010-04-03 155 views
3

我使用下面的代碼來做gridview事情(從http://developer.android.com/resources/tutorials/views/hello-gridview.html稍作修改)。我想用touchlistener和onTouch()替換onClicklistener和onClick()方法,這樣當我觸摸gridview中的元素時,元素的圖像會發生變化,並且同一元素上的雙點觸摸會將它回到原始狀態。Android初學者:觸摸事件android gridview

我該怎麼做?我不能讓我的代碼來做到這一點。 clicklistener工作在一定程度上,但觸摸不是。請幫忙。

public class ImageAdapter extends BaseAdapter { 
private Context mContext; 

public ImageAdapter(Context c) { 
    mContext = c; 
} 

public int getCount() { 
    return mThumbIds.length; 
} 

public Object getItem(int position) { 
    return null; 
} 

public long getItemId(int position) { 
    return 0; 
} 

// create a new ImageView for each item referenced by the Adapter 
public View getView(int position, View convertView, ViewGroup parent) { 
    ImageView imageView; 
    if (convertView == null) { // if it's not recycled, initialize some attributes 
     imageView = new ImageView(mContext); 
     imageView.setLayoutParams(new GridView.LayoutParams(85, 85)); 
     imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); 
     imageView.setPadding(8, 8, 8, 8); 

     imageView.setOnClickListener(new View.OnClickListener() 
      { 

       @Override 
       public void onClick(View view) 
       { 

        if(position==0) 
        { 
            //do this 
           } 
           else 
           { 
           //do this 
           } 
          } 
        }); 

    } else { 
     imageView = (ImageView) convertView; 
    } 

    imageView.setImageResource(mThumbIds[position]); 
    return imageView; 
} 

// references to our images 
private Integer[] mThumbIds = { 
     R.drawable.sample_2, R.drawable.sample_3, 
     R.drawable.sample_4, R.drawable.sample_5, 
     R.drawable.sample_6, R.drawable.sample_7, 
     R.drawable.sample_0, R.drawable.sample_1, 
     R.drawable.sample_2, R.drawable.sample_3, 
     R.drawable.sample_4, R.drawable.sample_5, 
     R.drawable.sample_6, R.drawable.sample_7, 
     R.drawable.sample_0, R.drawable.sample_1, 
     R.drawable.sample_2, R.drawable.sample_3, 
     R.drawable.sample_4, R.drawable.sample_5, 
     R.drawable.sample_6, R.drawable.sample_7 
}; 
} 
+0

嗨AJ, 我想做同樣的事情意味着我想要在網格中獲得它的位置,並改變它的形象,我該如何做到這一點?現在你有沒有懶惰? 問候 Faheem – 2010-05-05 13:53:35

回答

2

繼續從您的代碼中,因爲jaydeepfifadra建議您可以使用gride視圖的setOnItemClickListener方法而不是圖像本身。 (不是說這不可能,但我沒有嘗試過)。

gridView.setOnItemClickListener(

    new OnItemClickListener(){ 
     public void onItemClick(AdapterView<?> arg0, View view, int arg2, long arg3) { 
      ((Image)view.setSelected(!(Image)view.getSelected())); 
     } 
    }); 
); 

現在我不是100%肯定,如果下面的工作,但在上面我已經設置圖像的view.setSelected()狀態切換。我有點猜測你可以將圖像資源設置爲可繪製選擇器。即

讓你R.drawable.sample_2資源選擇,如:

<?xml version="1.0" encoding="utf-8"?>  
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_selected="true" android:drawable="@drawable/image_selected" /> 

    <item android:drawable="@drawable/image_unselected" /> 
</selector> 

然而,儘管這使您可以檢測單輕叩,將切換選擇的狀態。它不包括雙擊。還沒有出現setOnDoubleClickItemListener()方法。

因此,您可能需要針對具體情況實施GestureDetector並實現您自己的SimpleOnGestureListener類(MyGestureListener extends SimpleOnGestureListener),該類管理您要查找的雙擊事件和單擊事件。

你可以在這裏看到一個實現手勢監聽器和檢測器的例子。

how to implement both ontouch and also onfling in a same listview?

您將設置gestureListener爲您的網格視圖onTouchListener。

7

以這種方式使用OnTouchListener。閱讀上MotionEvent類型,如ACTION_UPACTION_MOVEACTION_DOWN這意味着該鍵被按下這裏,鼠標被移動,或者關鍵是未按這裏...

public void addListenerToGrid() { 
    gridView = (GridView) findViewById(R.id.gridView1); 

    gridView.setOnTouchListener(new OnTouchListener() { 
     public boolean onTouch(View v, MotionEvent me) { 

      int action = me.getActionMasked(); 
      float currentXPosition = me.getX(); 
      float currentYPosition = me.getY(); 
      int position = gridView.pointToPosition((int) currentXPosition, (int) currentYPosition); 
         if (action == MotionEvent.ACTION_UP) { 
          // Key was pressed here 
         } 

      return true; 

}

+0

非常感謝你PAVI! – GOLDEE 2014-08-07 19:14:28

+0

由於onItemClickListener不會捕捉每一個觸摸事件,所以這是處理非常快的觸摸的唯一解決方案。 – 2017-12-01 06:19:10