16

ドラッグしたオブジェクトをドロップする場所をより正確に制御できるアプリケーションを開発しています。しかし、静電容量式タッチスクリーンでは、ユーザーの指が常にドロップターゲットを覆い隠します。

Androidでは、メソッドを上書きすることで、ドラッグシャドウの「タッチポイント」を指定できますView.DragShadowBuilder.onProvideShadowMetrics()。しかし、変位した「ターゲットポイント」を提供する方法はないようです。ドラッグシャドウのタッチポイントから、より正確にドロップターゲットに操作できる矢印を投影したいと思います。

質問:これを達成するための最も簡単でエレガントな方法は何でしょうか?

タッチポイントの座標を登録し、それらを変換して実際のドロップターゲットに送信するドラッグ操作中に、画面上に非表示のレイヤーを配置できると思います。基本的に、ドラッグイベントを再実装します。しかし、もっと簡単な解決策があるかどうか知りたいです。または、他の誰かが以前にこのようなことをしたことがある場合。


編集:これが私が欲しいドラッグシャドウの種類の大まかなモックアップです:

ここに画像の説明を入力してください

4

1 に答える 1

4

質問: これを達成するための最も簡単でエレガントな方法は何ですか?

View.DragShadowBuilderすでに見たように、シャドウ ハンドルのポイントと、送信されたすべてのドラッグ イベントで考慮されるポイントを分離する方法がないため、このクラスを使用することはできません。Viewまた、クラスを拡張してもドラッグシステムを再実装する別の方法はわかりません(面倒です)。

タッチポイントの座標を登録し、それらを変換して実際のドロップターゲットに送信するドラッグ操作中に、画面上に目に見えないレイヤーを配置できると思います-本質的にドラッグイベントを再実装します。

これは1 つの方法であり、複雑なドラッグ アンド ドロップの要件がなければ、非常に簡単です。

しかし、もっと簡単な解決策があれば知りたいです。

おそらく、基本的な Android レイアウト (少なくとも使用するもの) を拡張し、そこにドラッグ ロジックを実装する方がよいでしょう。これにより、別のレイヤーを管理したり、追加の計算を行ったりする必要がなくなります。クラスを拡張して、ここRelativeLayoutにあるロジックを実装しました。このレイアウトを持つこのようなアクティビティでそのクラスを使用しました。サンプルは基本的なものであり、柔軟性を高め、潜在的な問題を解決するには、さらに多くの作業 (および思考) が必要です。

于 2013-02-06T09:23:06.070 に答える