2011-10-31 5 views
-1

pls이 내 문제의 원인입니다.GridView onTouchListener가 예상대로 작동하지 않습니다.

해당 요소에 gridview 및 touchListener가 있습니다. 문제는 내가 배경을 변경하려는 요소를 터치 할 때 및 터치가 완료되면 (동작 위로 또는 ouside) 초기 배경을 표시하는 것입니다. 문제는 요소 위에 두드리고 다른 요소 위로 손가락을 드래그하면 초기 요소가 배경으로 바뀌지 만 손가락을 다른 요소 위로 드래그하고 터치를 끝내면 터치 된 첫 번째 요소의 배경이 바뀌지 않습니다. 초기 배경. 아이디어는 내가 그의 자물쇠를 얻기 위해 gridview에서 elemnt를 만질 때이다.

package com.mines.gui.components; 

import android.content.Context; 
import android.graphics.Bitmap; 
import android.graphics.drawable.BitmapDrawable; 
import android.util.Log; 
import android.view.MotionEvent; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.BaseAdapter; 
import android.widget.GridView; 
import android.widget.ImageView; 

import com.mines.globals.GlobalVariables; 

public class MinesView extends GridView { 

    private int[] length = new int[81]; 
    private final Bitmap grid0 = Bitmap.createBitmap(GlobalVariables.icons, 0, 88, 50, 50); 
    private final Bitmap grid1 = Bitmap.createBitmap(GlobalVariables.icons, 50, 88, 50, 50); 
    private int id; 

    public MinesView(Context context) { 
     super(context); 

     setAdapter(new MineAdapter(context)); 
     setStretchMode(GridView.NO_STRETCH); 
     setNumColumns(9); 
     setHorizontalSpacing(40); 
    } 

    class MineAdapter extends BaseAdapter { 

     private Context context; 

     public MineAdapter(Context context) { 
      this.context = context; 
     } 

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

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

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

     public View getView(int position, View convertView, ViewGroup parent) { 
      final ImageView imageView; 

      if(convertView == null) { 
       imageView = new ImageView(context); 
       imageView.setLayoutParams(new GridView.LayoutParams(40, 40)); 
       imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); 
      } else { 
       imageView = (ImageView) convertView; 
      } 
      imageView.setBackgroundDrawable(new BitmapDrawable(grid0)); 
      imageView.setId(position); 

      imageView.setOnTouchListener(new OnTouchListener() { 
       public boolean onTouch(View arg0, MotionEvent arg1) { 

        switch (arg1.getAction() & MotionEvent.ACTION_MASK) { 
         case MotionEvent.ACTION_DOWN: 
         case MotionEvent.ACTION_POINTER_DOWN: 
          imageView.setBackgroundDrawable(new BitmapDrawable(grid1)); 
         break; 
         case MotionEvent.ACTION_OUTSIDE: 
         case MotionEvent.ACTION_UP: 
         case MotionEvent.ACTION_POINTER_UP: 
          imageView.setBackgroundDrawable(new BitmapDrawable(grid0)); 
         break; 
        } 
        return false; 
       } 
      }); 

      imageView.setOnClickListener(new OnClickListener() { 

       public void onClick(View arg0) { 
        // TODO Auto-generated method stub 

       } 
      }); 

      return imageView; 
     } 

    } 

} 

답변

0

이 코드를 사용해보십시오 ... 가있는 gridview에 대한 ontouchlistener 작성이 5 월의 코드입니다.

public class HelloGridViewActivity extends Activity { 
/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     GridView gridview = (GridView) findViewById(R.id.gridview); 
     gridview.setAdapter(new ImageAdapter(this)); 

} 

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); 
     } else { 
      imageView = (ImageView) convertView; 
     } 

     imageView.setImageResource(mThumbIds[position]); 
     imageView.setOnTouchListener(new OnTouchListener() { 

      @Override 
      public boolean onTouch(View v, MotionEvent event) { 
       // TODO Auto-generated method stub 

       if(event.getAction() == MotionEvent.ACTION_DOWN) 
       { 
        v.setBackgroundResource(R.drawable.sample_0); 
        Log.v("log_tag", "MotionEvent.ACTION_DOWN"); 
        return true; 
       } 
       else if(event.getAction()==MotionEvent.ACTION_UP) 
       { 

        v.setBackgroundDrawable(null); 
        Log.v("log_tag", "MotionEvent.ACTION_UP"); 
        return true; 
       } 
       return false; 
      } 
     }); 
     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

은 if 루프에 들어 가지 않습니다. 그리드의 요소를 터치 할 때 뷰가 인식하는지 모르겠다. – moctavianro

+0

안녕하세요 사용자, 업데이트 된 코드보기. –

+0

버튼에서 체크 박스로 슈퍼 클래스를 변경하여 문제를 해결했습니다. 친구들 ... 안드로이드 초보자에게 더 많은 도움이 되십시오. – moctavianro

관련 문제