2017-01-29 15 views
0

コントロールの描画オーバーレイがある私のアプリを更新しています。ある時点では、ドラッグアンドドロップ機能が機能しなくなりました(私はそれが最初の実装であったとしても疑問ですが、それでもまだサムスンで動作しています)。 mediaOverlayビューが長く押すとウィンドウマネージャに追加されたビューのドラッグアンドドロップが機能しない

mediaOverlay = new MediaOverlayView(this, getLayoutResource()); 
mediaOverlay.setOnClickListeners(this); 

overlayDropView = new OverlayDropView(this); 
overlayDropView.setVisibility(View.INVISIBLE); 

windowManager.addView(overlayDropView, new WindowManager.LayoutParams(
     WindowManager.LayoutParams.MATCH_PARENT, 
     WindowManager.LayoutParams.MATCH_PARENT, 
     WindowManager.LayoutParams.TYPE_PHONE, 
     WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, 
     PixelFormat.TRANSLUCENT 
)); 
windowManager.addView(mediaOverlay, layoutParams); 

、それはドラッグを開始し、overlayDropViewを示しています:

私は、オーバーレイサービス開始(両方のビューはレイアウトviewgroupsを拡張する)ときに私はウィンドウマネージャに追加する二つのビューを持っています
overlayDropView.setVisibility(View.VISIBLE); 

if(Build.VERSION.SDK_INT < 24) { 
    //noinspection deprecation 
    mediaOverlay.startDrag(null, new View.DragShadowBuilder(mediaOverlay), null, 0); 
} 
else { 
    mediaOverlay.startDragAndDrop(null, new View.DragShadowBuilder(mediaOverlay), null, 0); 
} 

私はそれのコンストラクタでoverlayDropViewのドラッグリスナーを設定します。

setOnDragListener(new OnDragListener() { 
    @Override 
    public boolean onDrag(View v, DragEvent event) { 
     final int action = event.getAction(); 

     Log.d("Overlay", Integer.toString(action)); 

     if (event.getAction() == DragEvent.ACTION_DROP) { 
      Log.d("Overlay", "is dropped"); 
     } 
     return true; 
    } 
}); 

何もoverlayViewがoverlayDropにドロップされたときに、それから来る終わるん表示します。私は明白な何かを欠いていますか

ありがとうございました。

答えて

0

私は問題を理解しました。キーはより慎重に読み、Drag and Drop docs(強調鉱山)で、このラインに気付いた。

ドラッグ操作中に、システムディスパッチは、ビューのドラッグイベントリスナーにイベントをドラッグして、現在のレイアウトでオブジェクト。

ウィンドウマネージャに追加された2つのビューは、これで意味をなさない(正常に動作していないはずです)以前はバグだったり、意図した動作が変更されたと思います。ビューを設定する方法を再評価することで修正しました。

現在のSamsungデバイスではまだ動作していたのはなぜですか? ¯\ _(ツ)_ /¯

関連する問題