gpt4 book ai didi

Android 拖放图像在 ICS (4.0.3) 上崩溃

转载 作者:行者123 更新时间:2023-11-29 22:09:46 24 4
gpt4 key购买 nike

我的应用程序的功能非常简单:

在GridView上显示sdcard上所有图片的缩略图以及这些缩略图角上的图标,以便用户可以触摸它来开始拖动图像的阴影。

此阴影可以放置在已设置拖动监听器的 View 上。当那个发生时,将使用图像文件路径 Uri 调用一个新的 Intent 作为额外的新的 Intent 。到目前为止,还不错。

当我开始在没有任何 View 的 View 上放置阴影时,就会出现问题拖动监听器,最终卡住屏幕并导致移动设备崩溃!

我在堆栈跟踪中得到的是这样的:

03-29 14:24:14.803: I/ViewRootImpl(2496): Reporting drop result: false
03-29 14:24:14.803: W/WindowManager(274): Drag is in progress but there is no drag window handle.
03-29 14:24:15.062: I/ViewRootImpl(2496): Reporting drop result: false
03-29 14:24:15.062: W/WindowManager(274): Drag is in progress but there is no drag window handle.
03-29 14:24:15.294: I/ViewRootImpl(2496): Reporting drop result: false
03-29 14:25:06.972: I/Process(274): Sending signal. PID: 274 SIG: 3
03-29 14:25:06.972: I/dalvikvm(274): threadid=3: reacting to signal 3
03-29 14:25:07.092: I/dalvikvm(274): Wrote stack traces to '/data/anr/traces.txt'
03-29 14:25:10.012: W/ActivityManager(274): Timeout of broadcast BroadcastRecord{2c09ce28 android.intent.action.TIME_TICK} - receiver=android.app.LoadedApk$ReceiverDispatcher$InnerReceiver@2bf0c4e8, started 10009ms ago
03-29 14:25:10.012: W/ActivityManager(274): Receiver during timeout: BroadcastFilter{2bf0cd08 ReceiverList{2bf0c660 274 system/1000 local:2bf0c4e8}}
03-29 14:25:20.022: W/ActivityManager(274): Timeout of broadcast BroadcastRecord{2c09ce28 android.intent.action.TIME_TICK} - receiver=android.app.LoadedApk$ReceiverDispatcher$InnerReceiver@2bef04e8, started 10008ms ago
03-29 14:25:20.022: W/ActivityManager(274): Receiver during timeout: BroadcastFilter{2bef0760 ReceiverList{2bef06e8 274 system/1000 local:2bef04e8}}
03-29 14:25:37.092: W/Watchdog(274): WATCHDOG PROBLEM IN SYSTEM SERVER: com.android.server.wm.WindowManagerService
03-29 14:25:37.102: I/Process(274): Sending signal. PID: 274 SIG: 3
03-29 14:25:37.102: I/dalvikvm(274): threadid=3: reacting to signal 3
03-29 14:25:37.182: I/dalvikvm(274): Wrote stack traces to '/data/anr/traces.txt'
03-29 14:25:37.192: I/Process(274): Sending signal. PID: 475 SIG: 3
03-29 14:25:37.192: I/dalvikvm(475): threadid=3: reacting to signal 3
03-29 14:25:37.202: I/dalvikvm(475): Wrote stack traces to '/data/anr/traces.txt'
03-29 14:25:39.204: I/Watchdog_N(274): dumpKernelStacks
03-29 14:25:39.492: I/CrashMonitor(1186): CrashMonitorService: invokeService: android.intent.action.DROPBOX_ENTRY_ADDED
03-29 14:25:39.492: W/Watchdog(274): *** WATCHDOG KILLING THE SYSTEM: com.android.server.wm.WindowManagerService

我的适配器类(我在其中执行 view.startDrag() 方法):

public class ImageCursorAdapter extends CursorAdapter {

private LayoutInflater mInflater;
private final static int mImageColumnID = 0;
private Options mOptions = new Options();;
private Cursor mCursor;

public ImageCursorAdapter(Context context, Cursor c) {
super(context, c);

mInflater = LayoutInflater.from(context);
mOptions.inSampleSize = 4;
}

@Override
public void bindView(View view, Context context, Cursor cursor) {
mCursor = cursor;
ViewHolder holder = (ViewHolder) view.getTag();
ImageThumbnailLoader imageLoader = new ImageThumbnailLoader(
holder.thumbImg, cursor.getLong(mImageColumnID),
context.getContentResolver(), false);
imageLoader.execute();
// holder.thumbImg.setImageBitmap(MediaStore.Images.Thumbnails.getThumbnail(
// context.getContentResolver(), cursor.getLong(mColumnID),
// MediaStore.Images.Thumbnails.MICRO_KIND, mOptions));
holder.dragImg.setTag(holder.thumbImg);
holder.dragImg.setId(cursor.getPosition());
holder.dragImg.setOnTouchListener(new OnTouchListener() {

@Override
public boolean onTouch(View v, MotionEvent event) {
int action = event.getAction();
if (action == MotionEvent.ACTION_DOWN) {
mCursor.moveToPosition(v.getId());
int dataColumn = mCursor.getColumnIndex(MediaStore.Images.Media.DATA);
ClipData dragData = ClipData.newPlainText("filename",
mCursor.getString(dataColumn));
DragShadowBuilder shadow = new DragShadowBuilder((View) v.getTag());
return v.startDrag(dragData, shadow, null, 0);
}
return false;
}
});
Log.i("Prototype", "bindView : " + cursor.getPosition());
}

@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
Log.i("Prototype", "newView : " + cursor.getPosition());
View view = mInflater.inflate(R.layout.grid_item, null);
ViewHolder holder = new ViewHolder(view);
view.setTag(holder);
return view;
}


private static class ViewHolder {
ImageView thumbImg, dragImg;

ViewHolder(View base) {
thumbImg = (ImageView) base.findViewById(R.id.thumbImage);
dragImg = (ImageView) base.findViewById(R.id.dragImage);
}
}

}

关于这里发生的事情有什么想法/线索吗?如果能帮上忙,我将不胜感激。

提前致谢。

最佳答案

如果您的“onDrag(View v, DragEvent event)”方法中有一个 switch case 语句,那么您应该在其中添加 case“DragEvent.ACTION_DRAG_LOCATION”。在那里你可以定义,如果你的图标/图像被放置在非拖动场上会发生什么。

这是一个例子:

public class MyDragListener implements OnDragListener {

@Override
public boolean onDrag(View v, DragEvent event) {
int action = event.getAction();
switch ( action ) {
case DragEvent.ACTION_DRAG_STARTED:
break;
case DragEvent.ACTION_DRAG_ENTERED:
break;
case DragEvent.ACTION_DRAG_EXITED:
break;
case DragEvent.ACTION_DROP:
View view = (View) event.getLocalState();
ViewGroup owner = (ViewGroup) view.getParent();
owner.removeView(view);
RelativeLayout container = (RelativeLayout) v;
container.addView(view);
view.setVisibility(View.VISIBLE);
break;
case DragEvent.ACTION_DRAG_ENDED:
break;
case DragEvent.ACTION_DRAG_LOCATION:
view.setVisibility(View.VISIBLE);
break;
}
}

}

关于Android 拖放图像在 ICS (4.0.3) 上崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9927598/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com