Перетащите программно созданный ImageView - PullRequest
0 голосов
/ 27 марта 2020

Я разрабатываю функцию перетаскивания. Вкратце, когда пользователь долго касается экрана, мое приложение должно программно создать представление изображения и перетащить его.

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);

Итак, как я могу использовать мой программно созданный вид в качестве теневого?

...