使用ObjectAnimator旋转Gallery里面的图片,gallery的ItemClick无效

akebrt 2016-10-15 01:41:54
代码如下:
adapter代码
public class GalleryBugAdapter extends BaseAdapter{

private ArrayList<HashMap<String, String>> list;

private Context mContext;

private ImageView mImg;

public Bitmap bitmap;

private Gallery gallery;

private int tag = 0;

// rotate
private int nowAngle = 0, toAngle = 0;

private int w, h;

public GalleryBugAdapter(ArrayList<HashMap<String, String>> list, Context context, Gallery gallery) {
if (list != null) {
this.list = list;
} else {
this.list = new ArrayList<HashMap<String, String>>();
}
this.mContext = context;
this.gallery = gallery;
}

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

@Override
public Object getItem(int position) {
return list.get(position);
}

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

@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (tag != position) {
nowAngle = 0;
toAngle = 0;
}

tag = position;
mImg = new ImageView(mContext);

// 父控件的宽高
w = parent.getWidth();
h = parent.getHeight();

String path = list.get(position).get("list_img_path");
Bitmap bitmap = getBitmap(path, w, h);

mImg.setImageBitmap(bitmap);
mImg.setTag(position);
mImg.setFocusable(false);
mImg.setClickable(false);
mImg.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));

return mImg;
}

private Bitmap getBitmap(String imgPath, int nWidth, int nHeight) {
Bitmap bitmap = null;
BitmapFactory.Options options = new BitmapFactory.Options();
if (nWidth != 0 && nHeight != 0) {
options.inJustDecodeBounds = true;
bitmap = BitmapFactory.decodeFile(imgPath, options);
if (options.outWidth <= nWidth && options.outHeight <= nHeight) {
mImg.setScaleType(ScaleType.CENTER_INSIDE);
return BitmapFactory.decodeFile(imgPath);
}
int hRatio = (int) Math.ceil(options.outHeight / (double) nHeight);
int wRatio = (int) Math.ceil(options.outWidth / (double) nWidth);
options.inSampleSize = (hRatio > wRatio) ? hRatio : wRatio;
options.inJustDecodeBounds = false;
}
bitmap = BitmapFactory.decodeFile(imgPath, options);
return bitmap;
}

public void Rotate(boolean flag, int angle) {
mImg = (ImageView) gallery.findViewWithTag(tag);
AnimatorSet aSet = new AnimatorSet();
if (flag) {
toAngle = (toAngle + 90) % 360;
} else {
toAngle = (toAngle - 90) % 360;
}

if (angle == 1) {
toAngle = 0;
}
ObjectAnimator oAX = ObjectAnimator.ofFloat(mImg, "rotation", nowAngle, toAngle);
nowAngle = toAngle;
aSet.play(oAX);
aSet.setDuration(0);
aSet.start();
}
}

控件属性
public void initGallery(int position, ArrayList<HashMap<String, String>> photoList) {

if (layoutGallery == null) {
layoutGallery = ((ViewStub) findViewById(R.id.photo_gallery)).inflate();
}

photoGallery = (Gallery) layoutGallery.findViewById(R.id.Gallery);

adapter = new GalleryAdapter(photoList, this, photoGallery);
photoGallery.setAdapter(adapter);
photoGallery.setOnItemSelectedListener(new OnItemSelectedListener() {

@Override
public void onItemSelected(AdapterView<?> parent, View view, int item, long id) {
Log.d("media", "dell-ItemSelected");
}

@Override
public void onNothingSelected(AdapterView<?> parent) {

}
});

photoGallery.setOnItemClickListener(new OnItemClickListener() {

@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Log.d("media", "dell-ItemClick");
}
});

btnRotate1 = (Button) findViewById(R.id.btnRotate1);
btnRotate2 = (Button) findViewById(R.id.btnRotate2);
btnRotate1.setOnClickListener(new OnClickListener() {// 逆时针旋转90度

@Override
public void onClick(View v) {
Log.e("PhotoRotate", "BUG-旋转后会让gallery的");
adapter.Rotate(false, 0);
}
});
btnRotate2.setOnClickListener(new OnClickListener() {// 顺时针旋转90度

@Override
public void onClick(View v) {
adapter.Rotate(true, 0);
}
});
}

如题,用以上代码旋转图片后 ,出现现象:
顺时针旋转90度,会让以图片为中心,第一象限的区域可以感应到点击事件,其余三个象限完全无效;
再旋转90度,让可以点击的区域也旋转90度,第四象限区域可以感应点击事件,其余三个象限区域点击无效;
然后再旋转,可点击区域转到第三象限。

逆时针旋转类似
当图片转回原始的角度,然后所有区域都可以点击了,这是怎么一回事???
...全文
271 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
akebrt 2016-10-17
  • 打赏
  • 举报
回复
有没有人遇到过这样的?
akebrt 2016-10-15
  • 打赏
  • 举报
回复
这Bug 大神帮忙看看是怎样出来的

80,471

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧