2010-04-03 96 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