2014-09-09 2 views
0

imageView를 gridView에 추가하고 imageView를 클릭하면 큰 그림 뷰어가 실행됩니다. 그리고 내 손가락이 imageView를 터치하면 뷰가 어두워집니다.클릭하면 gridView의 이미지가 어두워지며 동시에 다른 액티비티가 열립니다.

여기에 그것을 실현하는 방법이 있습니다.

gridView.setAdapter(new ImageAdapter()); 

gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) { 
       JumpToImageViewer(imageUrlsFinal, position); 
      } 
     }); 

ImageAdapter에서 ImageView의 setOnTouchListener입니다. 그리고 OnTouch 메서드를 다시 작성하십시오. ACTION_DOWN을 얻으면 imageView를 더 어둡게 만들고 ACTION_UP을 얻으면 정상적으로 만듭니다. 그런 다음 거짓을 반환합니다.

문제가 있습니다. 1, onTouch 메서드에서 false를 반환 한 다음 imageView를 클릭하면 JumpToImageViewer가 제대로 실행되지만 imageView가 어두워 지지만 뒤로 돌아갈 수 없습니다.

2 OnTouch에서 return true를 사용하면 imageView가 색상을 성공적으로 변경할 수 있습니다. 그러나 JumpToImageViewer는 실행되지 않습니다.

그리고 아마도 false를 사용하면 listener가 imageview에서 father gridview로 변경 될 것이므로 그 이유는 효과가 없습니다.

그러나이 상황을 해결할 수있는 해결책을 찾을 수 없습니다. GridView에서 imageView를 클릭하면 다른 Activity로 이동한다는 것을 어떻게 알 수 있습니까? 그리고 동시에 imageView의 색상이 변경됩니다.

대단히 감사합니다.

+0

어댑터 코드를 게시 할 수 있습니까? –

+0

내 코드를 게시했습니다. 확인해주세요. 고맙습니다. – CodeAlien

답변

0

여기 내 ImageAdaper입니다.

public class ImageAdapter extends BaseAdapter { 
private Activity mActivity; 
private List<String> mImageUrls; 
private int mImageWidth; 

public ImageAdapter(Activity activity, List<String> imageUrls, int imageWidth) { 
    this.mActivity = activity; 
    this.mImageUrls = imageUrls; 
    this.mImageWidth = imageWidth; 
} 

@Override 
public int getCount() { 
    return mImageUrls.size(); 
} 

@Override 
public Object getItem(int i) { 
    return mImageUrls.get(i); 
} 

@Override 
public long getItemId(int i) { 
    return i; 
} 

@Override 
public View getView(int pos, View view, ViewGroup viewGroup) { 
    final ImageView imageView; 
    if (null == view) { 
     imageView = new ImageView(mActivity); 
     imageView.setScaleType(ImageView.ScaleType.CENTER); 
     imageView.setLayoutParams(new GridView.LayoutParams(mImageWidth, mImageWidth)); 
    } else { 
     imageView = (ImageView)view; 
    } 

    String imageUrl = mImageUrls.get(pos); 

    ImageCacheManager.getInstance().getImageLoader().get(imageUrl, ImageLoader.getImageListener(imageView, R.drawable.logologo, R.drawable.logologo)); 

    AnimationUtils.addTouchColorChange(imageView, true); 

    return imageView; 
} 
} 



public class AnimationUtils { 
/** 
* 给试图添加点击效果,让背景变深 
* */ 
public static void addTouchColorChange(View view, boolean isClick){ 
    view.setOnTouchListener(VIEW_TOUCH_DARK) ; 

    if(!isClick){ 
     view.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
      } 
     }); 
    } 
} 

/** 
* 给试图添加点击效果,让背景变淡 
* */ 
public static void addTouchLight(View view , boolean isClick){ 
    view.setOnTouchListener(VIEW_TOUCH_LIGHT) ; 

    if(!isClick){ 
     view.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
      } 
     }); 
    } 
} 


/** 
* 让控件点击时,颜色变深 
* */ 
public static final OnTouchListener VIEW_TOUCH_DARK = new OnTouchListener() { 
    /*设定透明值,越小透明度越大*/ 
    public int transparent_level = 150; 

    public final float[] DARKER = new float[] { 1, 0, 0, 0, -50, 0, 1, 
     0, 0, -50, 0, 0, 1, 0, -50, 0, 0, 0, 1, 0 }; 
    public final float[] RESTORE = new float[] { 1, 0, 0, 0, 0, 0, 
     1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0 }; 
    public final float[] TRANSPARENT = new float[] { 1, 0, 0, 0, 0, 
                0, 1, 0, 0, 0, 
                0, 0, 1, 0, 0, 
                0, 0, 0, 1, transparent_level - 255 
    }; 
    int r, g, b; 

    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
     switch (event.getAction()) { 
     case MotionEvent.ACTION_DOWN: 
      if(v instanceof ImageView){ 
       ImageView iv = (ImageView) v; 
       iv.setColorFilter(new ColorMatrixColorFilter(DARKER)) ; 
      } else if (v instanceof TextView){ 
       TextView tv = (TextView) v; 
       String tvColor = Integer.toHexString(tv.getCurrentTextColor()); 
       b = Integer.parseInt(tvColor.substring(6, 8), 16); 
       g = Integer.parseInt(tvColor.substring(4, 6), 16); 
       r = Integer.parseInt(tvColor.substring(2, 4), 16); 
       tv.setTextColor(Color.argb(transparent_level, r, g, b)); 
       Drawable[] drawables = tv.getCompoundDrawables(); 
       if(null != drawables[0]) { 
        drawables[0].setColorFilter(new ColorMatrixColorFilter(TRANSPARENT)); 
       } 
      } else{ 
       v.getBackground().setColorFilter(new ColorMatrixColorFilter(DARKER)); 
       v.setBackgroundDrawable(v.getBackground()); 
      } 
      break; 
     case MotionEvent.ACTION_UP: 
      if(v instanceof ImageView){ 
       ImageView iv = (ImageView) v; 
       iv.setColorFilter(new ColorMatrixColorFilter(RESTORE)) ; 
      } else if (v instanceof TextView){ 
       TextView tv = (TextView) v; 
       tv.setTextColor(Color.argb(255, r, g, b)); 
       Drawable[] drawables = tv.getCompoundDrawables(); 
       if(null != drawables[0]) { 
        drawables[0].setColorFilter(new ColorMatrixColorFilter(RESTORE)); 
       } 
      } else{ 
       v.getBackground().setColorFilter(
        new ColorMatrixColorFilter(RESTORE)); 
       v.setBackgroundDrawable(v.getBackground()); 
      } 
      break; 
     default: 
      if(v instanceof ImageView){ 
       ImageView iv = (ImageView) v; 
       iv.setColorFilter(new ColorMatrixColorFilter(RESTORE)) ; 
      } 
      break; 
     } 
     return false; 
    } 
}; 
} 
관련 문제