2017-08-10 8 views
0

ドラッグされているビューとは異なるカスタムのドラッグシャドウを作成したいとします(実際にはドラッグしているビューの修正版です)。Android-ドラッグスタートの表示を変更せずにドラッグシャドウを変更する

View.DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(myView); 

問題は、私がmyViewに加えた変更でも閲覧がドラッグされている影響(およびビューをクローン化することができないためである):

私はそうのようView.DragShadowBuilderコンストラクタにビューを渡すことができます。 How do I clone a View?

また、提供されたonDraw(Canvas canvas)メソッドで、View.DragShadowBuilderを拡張し、カスタムビューをビットマップで描画できます。しかし、私は最初に影を発生させることに問題があります(私はこれが有効なアプローチであると仮定しています)。

逆に、画面に添付されたビューからカスタムドラッグシャドウを作成することはできますか?どのポインタや解決策が最も役立ちます。自身の質問に答える How to create a custom drag shadow? How to show custom DragShadow instead of ListViewFragment row?

答えて

0

私の検索では、これまでの任意の有用な結果が得られていません。 View.DragShadowBuilder(View view)に渡された引数は可視である必要があります(適切なレイアウトコンテナに添付されている必要があります)。任意のViewGroup/Viewに添付されていないXMLまたは動的に作成されたビューからの膨張したビューは、ドラッグシャドウを生成しません。ここ

キーはView.DragShadowBuilderクラスを拡張し、あなたの要件は、それが画面に添付drag-startビューは異なる表示されるようにドラッグシャドウを変更する場合onDrawShadow(Canvas canvas)方法

@Override 
onDrawShadow(Canvas canvas) { 
    final View view = mView.get(); 

    /* give drag shadow a blue background, this also changes the drag-start view 
    attached to the screen */ 
    view.setBackgroundColor(Color.BLUE); 

    view.draw(canvas); 

    /* bring the drag-start view back to its original state (does not affect drag-shadow) */ 
    view.setBackgroundColor(Color.TRANSPARENT); 
} 

を上書き、変更することですview.draw(canvas)に電話をかけてから、view.draw(canvas)メソッドの後に元の状態に戻してください。

これはジョブを完了しますが、ハックとして見えます。ここでキーを要約すると、draw(canvas)メソッドの前にビューを操作し、同じメソッドの後に元の状態にリセットすることです。これが役に立つと願っています。

関連する問題