2010-04-03 7 views
3

다음 코드를 사용하여 gridview (http://developer.android.com/resources/tutorials/views/hello-gridview.html에서 약간 수정)로 작업하고 있습니다. onClickListener 및 onClick() 메소드를 touch 리 테인 (touchlistener)과 onTouch() 메소드로 대체하고자합니다. 그리드 뷰의 엘리먼트를 터치하면 엘리먼트의 이미지가 바뀌고 같은 엘리먼트에 더블 터치가 걸리게됩니다. 원래의 상태로 되돌아갑니다.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 –

답변

1

gridView의 onItemSelectListener을 사용하십시오.

2

코드에서 jaydeepfifadra는 이미지 자체가 아니라 그리드 뷰의 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() 상태가 전환 설정했습니다. 저는 이미지 리소스를 drawable selector로 설정할 수 있다고 생각합니다. 이것은 당신이 선택한 상태를 전환 할 단일 탭을 감지 할 수 있습니다 동안, 그러나

<?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> 

: 즉

같은 당신의 R.drawable.sample_2 자원 선택기를합니다. 더블 탭은 포함되지 않습니다. 또한 setOnDoubleClickItemListener() 메소드가 아닌 것으로 보입니다.

GestureDetector를 구현하고 원하는 Double 및 Single Tap 이벤트를 관리하는 고유 한 SimpleOnGestureListener 클래스 (MyGestureListener extends SimpleOnGestureListener)를 구현해야하는 경우가 있습니다.

제스처 수신기 및 감지기 구현 예를 볼 수 있습니다.

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

당신은 그리드 뷰의 onTouchListener로 gestureListener을 설정합니다.

7

이렇게하면 OnTouchListener을 사용하십시오. MotionEvent 유형에 최대 읽기 키가 여기에 눌러 진 것을 의미 ACTION_UP, ACTION_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

+0

onItemClickListener는 모든 단일 터치 이벤트를 감지하지 못하기 때문에 매우 빠른 처리를 처리 할 수있는 유일한 솔루션입니다. –

관련 문제