我做了一個拖放GridView。除了第一次拖放之外,一切都很完美。我找不到它第一次發生的原因。第一次丟失ImageView來源我拖放了我的GridView
我第一次將一個項目拖到gridview中的其他項目上時,這些項目的imageview源將會丟失。當我放棄時,來源將被固定。之後,每件事情都會正常工作。任何想法如何我可以解決這個或奇怪行爲的原因。歡迎每一個幫助。
這裏是我的touchListener至極將處理拖放:
mGridView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
GridView parent = (GridView) v;
int x = (int) event.getX();
int y = (int) event.getY();
int position = parent.pointToPosition(x, y);
if (position > AdapterView.INVALID_POSITION) {
int count = parent.getChildCount();
for (int i = 0; i < count; i++) {
View curr = parent.getChildAt(i);
curr.setOnDragListener(new View.OnDragListener() {
@Override
public boolean onDrag(View v, DragEvent event) {
boolean result = true;
int action = event.getAction();
switch (action) {
case DragEvent.ACTION_DRAG_STARTED:
break;
case DragEvent.ACTION_DRAG_LOCATION:
break;
case DragEvent.ACTION_DRAG_ENTERED:
setBlueFilterOnImageView((ImageView) v, getActivity());
break;
case DragEvent.ACTION_DRAG_EXITED:
clearColorFilterOnImageView((ImageView) v);
break;
case DragEvent.ACTION_DROP:
if (event.getLocalState() == v) {
result = false;
} else {
View droped = (View) event.getLocalState();
View target = v;
app.myProfile().removeProfilePhotoAtIndex(((DragGridItemHolder) droped.getTag()).position);
app.myProfile().insertProfilePhoto(((DragGridItemHolder) droped.getTag()).id, ((DragGridItemHolder) target.getTag()).position);
mAdapter.notifyDataSetChanged();
}
break;
case DragEvent.ACTION_DRAG_ENDED:
clearColorFilterOnImageView((ImageView) v);
break;
default:
result = false;
break;
}
return result;
}
});
}
int relativePosition = position - parent.getFirstVisiblePosition();
View target = (View) parent.getChildAt(relativePosition);
DragGridItemHolder holder = (DragGridItemHolder) target.getTag();
String text = holder.id;
ClipData data = ClipData.newPlainText("DragData", text);
target.startDrag(data, new View.DragShadowBuilder(target), target, 0);
}
}
return false;
}
});
編輯
public static void setBlueFilterOnImageView(ImageView imageView, Context context){
PorterDuffColorFilter blueFilter = new PorterDuffColorFilter(
context.getResources().getColor(R.color.grid_state_focused),
PorterDuff.Mode.SRC_ATOP);
imageView.setColorFilter(blueFilter);
imageView.setBackgroundColor(context.getResources().getColor(
R.color.grid_state_pressed));
}
你是什麼意思,這兩個聲明:「物品的imageview來源丟失」和「當我放下它的來源將是固定「 –
意見是圖像。當我將圖像視圖拖到其他一些圖像視圖上時,這些圖像視圖將停止顯示圖像(我已將圖像設置爲圖像視圖的來源)。儘快我會放棄imageview,gridview適配器上的notifyDataSetChanged()將被調用,並且所有圖片都會再次顯示。之後,一切正常,圖片不會消失。對不起,我的英語不好。 – Luciano
你在做什麼'setBlueFilterOnImageView'? – Luksprog