Я разрабатываю функцию перетаскивания. Вкратце, когда пользователь долго касается экрана, мое приложение должно программно создать представление изображения и перетащить его.
public void andOrdinaryMethod(View dragContainerView) {
Context context = dragContainerView.getContext();
Bitmap src = makeBitmap(); // Assume it works. I can see the in memory bitmap using debug tools
ImageView imageView = new ImageView(context);
imageView.setLayoutParams(new RelativeLayout.LayoutParams(
RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT));
imageView.setImageBitmap(bitmap);
mMapView.startDragAndDrop(null, new View.DragShadowBuilder(imageView), null, 0); // exception thrown here
}
Stacktrace:
java.lang.IllegalStateException: Drag shadow dimensions must be positive
at android.view.View.startDragAndDrop(View.java:24023)
at <source>(<source>:683)
at com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener$2.run(SourceFile:164)
at android.os.Handler.handleCallback(Handler.java:873)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6669)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
Это должно быть связано с ошибкой инициализации ImageView, поскольку , Я думаю, потому что работает следующий код обхода:
<!-- Child dummy view in fragment xml -->
<ImageView
android:id="@+id/dummy_view"
android:layout_width="80dp"
android:layout_height="80dp"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true" />
// Workarround
public void andOrdinaryMethod(View dragContainerView) {
Context context = dragContainerView.getContext();
Bitmap src = makeBitmap(); // Assume it works. I can see the in memory bitmap using debug tools
ImageView imageView = dragContainerView.getRootView().findViewById(R.id.dummy_view);;
imageView.setImageBitmap(bitmap);
mMapView.startDragAndDrop(null, new View.DragShadowBuilder(imageView), null, 0);
Итак, как я могу использовать мой программно созданный вид в качестве теневого?