После ontouch он не может пойти ondrag на Android

(я удалил весь код, потому что ниже код не работает.)

Дополнительная информация и краткое резюме - настоящая проблема

Это интересно. У меня есть другой проект простой деятельности. Там я могу перетащить. Теперь в этом проекте я блокирую комментарии повсюду. Есть только несколько строк, как и другой проект, но все равно нет перетаскивания.

 Drag is in progress, but there is no drag window handle.

Иногда это говорит. Я также искал его, но я не мог этого сделать.

Код теперь:

protected void onCreate(Bundle savedInstanceState) {
    Log.d(TAG, "matching ggame OnCreate");
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_matchgame);
    setupForGame();
    Log.d(TAG, "matching game OnCreate ends");
}//oncreate end

void setupForGame(){
    Log.d(TAG, "matching game setupforgame");

    imageAnswer = (ImageView) findViewById(R.id.imgAnswer);

    imageAnswer = (ImageView) findViewById(R.id.imgAnswer);
}

public boolean onTouch(View view, MotionEvent motionEvent) {
    Log.d(TAG, "ontouch never");
    if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) {
        ClipData data = ClipData.newPlainText("", "");
        View.DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(view);
        view.startDrag(data, shadowBuilder, view, 0);
        view.setVisibility(View.INVISIBLE);
        return true;
    }
    else {
        return false;
    }
}

@Override
public boolean onDrag(View receivingLayoutView, DragEvent dragEvent) {
    Log.d(TAG, "ondrag start");

И все равно не входите внутрь.

Я сделал его статическим, чтобы увидеть, если это проблема.

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:id="@+id/relative_layout"
    tools:context=".games.MatchingGame">

    <ImageView
        android:id="@+id/imgAnswer"
        android:layout_width="111dp"
        android:layout_height="111dp"
        android:src="@drawable/b3_1"
        android:layout_alignParentLeft="true"
        android:layout_centerInParent="true"
        />

</RelativeLayout>

Это то же самое, что и другой проект, но он не работает. Я просмотрел все возможности и отлаживал.

И, пожалуйста, не запрашивайте код метода перетаскивания; это не важно. Он не может войти в него.

Когда я держу и перетаскиваю изображение, это доходит до журнала в цикле, пока я не уйду:

I/SPRDHWComposer: util[1759] warning: osdLayer width 111, stride 112, not equal!

И когда я оставляю изображение:

V/WindowManager: rotationForOrientationLw(orient=0, last=1); user=0 USER_ROTATION_LOCKED sensorRot
V/WindowOrientationListener: getProposedRotation : mEnabled = false, mUsedautorotioansensor =true
 W/WindowManager: Drag is in progress but there is no drag window handle.

Я также сделал это, если касание является проблемой, но оно по-прежнему остается тем же:

imageAnswer.setOnTouchListener(new OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        //if (event.getAction() == MotionEvent.ACTION_DOWN) { Log.d(TAG, "ontouch down");

        //Log.d(TAG,"parent "+ String.valueOf(img1.getParent()));
        Log.d(TAG, "view "+String.valueOf(v));

        ClipData data = ClipData.newPlainText("", "");
        View.DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(v);
        v.startDrag(data, shadowBuilder, v, 0);
        v.setVisibility(View.INVISIBLE);
        return true;

Это мой старый проект, который работает с перетаскиванием. Я не вижу разницы:

https://gist.github.com/anonymous/540a70e05de6d765e20896b47deb7eb2

Когда я это делаю

imageAnswer.setOnDragListener(new View.OnDragListener() {
    public boolean onDrag(View v, DragEvent event) {  Log.d(TAG, "drag");

        return false;
    }
});

Это тоже не работает. Нет журнала.

Также это не дает журнала:

imageAnswer.setOnDragListener(new dropListener());

private class dropListener implements View.OnDragListener {

    @Override
    public boolean onDrag(View v, DragEvent event) {Log.d("Chic","ondrag");
        switch (event.getAction()) {

            case DragEvent.ACTION_DRAG_STARTED:
                break;

            case DragEvent.ACTION_DRAG_ENTERED:
                break;

            case DragEvent.ACTION_DRAG_EXITED:
                break;

            case DragEvent.ACTION_DROP:
                break;

            case DragEvent.ACTION_DRAG_ENDED:
                break;

            default:
                break;
        }
        return true;
    }
 }

Существует разница между двумя проектами:

Различия между проектами

Может ли это быть причиной?

Я также попытался поместить все setondrag setontouch внутри oncreate.

Ответ 1

Насколько я видел (например, здесь), onTouch и onDrag просто не работают вместе. Почему бы не поместить все из вас в onDrag? Судя по вашему коду, этого должно быть достаточно.

Ответ 2

Используйте TouchImageView вместо ImageView.

С ссылкой на этот сайт:

TouchImageView расширяет ImageView и поддерживает все функции ImageViews. Кроме того, TouchImageView добавляет щепотку зума, перетаскивание, запуск, двойную функциональность масштабирования и другое анимационное полирование. Цель TouchImageView - максимально точно отразить функциональность масштабируемых изображений в приложениях Gallery.

Проблема будет решена, она будет поддерживать как Drag, так и Touch.