WebView
にはassetsフォルダ内にローカルHTMLページが表示されています。 WebView
はActivity
の大きなレイアウトの一部です。私はEditText
ウィジェットのテキストをWebView
の入力要素にドラッグできるようにしようとしています。ドラッグリスナーが受け取った画面座標をdocument.elementFromPoint
が使用する画面座標に変換する以外はすべて正常に機能します。彼らは一致しません。それは入力ボックスにテキストを落とし続けるでしょう。入力ボックスはユーザーの指の下にあります。どんな助けもありがとう。警告:私のjavascriptの知識はかなり哀れです。ビューのタッチ位置をWebViewのHTML画面位置に変換する
基本フロー:
- のWebViewのonDragイベントはACTION_DROPイベントをキャッチ。
- イベントのX、Y位置はJavaScript関数に渡される
- Javascript機能要素点に基づいて、私の活動に
値を更新発見:
private class OnWebViewDragListener implements OnDragListener {
public boolean onDrag(View v, DragEvent event) {
switch (event.getAction()) {
case DragEvent.ACTION_DROP:
String dropText = event.getClipData().getItemAt(0).getText().toString();
mJavaScript._dropText(mWebView, dropText, event.getX(), event.getY());
return true;
default:
break;
}
return false;
}
}
Javascriptのラッパー。
public void _dropText(WebView wv, String text, float x, float y) {
wv.loadUrl("javascript:dropText('" + text + "', " + x + ", " + y + ")");
}
javascript関数:
<script type="text/javascript">
function dropText(text, x, y) {
var elem = document.elementFromPoint(x, y);
if (elem.tagName == "INPUT") {
elem.value = text;
}
}
</script>
こんにちはジェイ、この素晴らしいソリューションのおかげで、私は座標を翻訳する最良の方法を見つけようと頭を叩きながら数時間を過ごす:) Btw、あなたはあなたのオブジェクトをドラッグしている間にいくつか問題があったのですか?たとえば、私はこの "ドラッグが進行中だが、ドラッグウィンドウのハンドルはありません"を取得し続け、そのために私のタッチ上の移動イベントがトリガを停止するためです。ここに私のコードがあります。https://gist.github.com/anonymous/8161cae250a9f0c9002a – ShP
これはあいまいに聞こえますが、完全に思い出すことはできません。 3年が経過し、このコードにアクセスできなくなりました。 –
私のためにもうまく働いた。ありがとう! – Shilpi