Метод View.OnDragListener () не вызывает - PullRequest
0 голосов
/ 22 ноября 2018

У меня есть этот пользовательский AppCompatImageView класс.Когда макет надувается, я вижу, что конструктор вызывается и слушатель устанавливается из журналов

DragView2 ()

набор слушателей

Но яне вижу журналов, указывающих, что метод listner View.OnDragListener вызывается при взаимодействии с пользовательским представлением.

Почему View.OnDragListener не вызывается?

Здесь пользовательский AppCompatImageView класс

public class DragView2 extends AppCompatImageView
implements View.OnDragListener{

    private static final String TAG = DragView2.class.getSimpleName();

    public DragView2(Context context) {
        super(context, null);
        Log.d(TAG,"DragView2()");
        this.setOnDragListener(this);
        Log.d(TAG,"listener set");

    }

    public DragView2(Context context, AttributeSet attrs) {
        super(context, attrs, 0);
        Log.d(TAG,"DragView2()");
        this.setOnDragListener(this);
        Log.d(TAG,"listener set");
    }

    @Override
    public boolean onDrag(View v, DragEvent event) {
        Log.d(TAG,"onDrag()");
        Log.d(TAG,"event.getAction() = "+event.getAction());
        return false;
    }
}

1 Ответ

0 голосов
/ 22 ноября 2018

Мне нужно активировать перетаскивание даже из onTouch, поэтому мне нужно установить двух слушателей

this.setOnTouchListener(this);
this.setOnDragListener(this);

Вот класс

public class DragView2 extends AppCompatImageView
implements View.OnDragListener, View.OnTouchListener{

    private static final String TAG = DragView2.class.getSimpleName();

    public DragView2(Context context) {
        super(context, null);
        Log.d(TAG,"DragView2()");
        this.setOnTouchListener(this);
        this.setOnDragListener(this);
        Log.d(TAG,"listener set");

    }

    public DragView2(Context context, AttributeSet attrs) {
        super(context, attrs, 0);
        Log.d(TAG,"DragView2()");
        this.setOnTouchListener(this);
        this.setOnDragListener(this);
        Log.d(TAG,"listener set");
    }

    @Override
    public boolean onTouch(View view, MotionEvent motionEvent) {
        Log.d(TAG,"onTouch()");
        Log.d(TAG," motionEvent.getAction() = "+motionEvent.getAction());

        if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) {
            ClipData data = ClipData.newPlainText("", "");
            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 v, DragEvent event) {
        Log.d(TAG,"onDrag()")
        return true;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...