私は Android の学習曲線に近づいており、現在はユーザー インターフェイスの詳細に取り組んでいます。私が試みている基本的なことの 1 つは、指で画面上で何かを動かすことです。とても基本的なことのように思えます。
RelativeLayout (RL) から始めて、対照的な背景色を持つ 100x100 のビューを作成し (意図的に単純にしてグラフィックスのオーバーヘッドを低く)、そのビューを RL に追加しました。View.setX と View.setY を使用すると、View をうまく移動できます。
次に、ビューに onTouchListener を追加し、結果の .getRawX および .getRawY 値を使用してビューを移動しました。動作しますが、明確な遅延があります。ビューが私の指のすぐ下にとどまると思っていましたが、遅れをとっています。とても目立ちます。
編集: これが私の onTouch コードです:
public boolean onTouch(View v,MotionEvent event) {
boolean bExitValue = true;
int iAction;
iAction = event.getActionMasked();
if (MotionEvent.ACTION_MOVE == iAction) {
v.setX(event.getRawX());
v.setY(event.getRawY());
}
else if (MotionEvent.ACTION_DOWN != iAction) {
bExitValue = false;
}
return(bExitValue);
}
効率を維持するために、onTouch メソッドを可能な限り強化しました。プリミティブのみを使用し、オブジェクトは作成されていません。しかし、それは役に立ちませんでした。さらに試したこと:
ビューのサイズを 100x100 から 50x50 に縮小することで、再描画が必要なピクセル数を 75% 削減します。改善なし。
onTouchListener を登録する代わりに、View.onTouchEvent をオーバーライドしました。改善なし。
マニフェストに android:hardwareAccelerated="true" を追加しました。改善なし。
直感に反するようですが、オンラインで見つけたさまざまなコメントに基づいて、MotionEvent ハンドラーに Thread.sleep() を挿入してみました。改善はありませんが、睡眠値が増加するにつれて、予測可能な速度低下が確実に得られました!
「raw」バージョンの代わりに MotionEvent.getx と .getY を使用しました。絶対的および相対的に見えるインターリーブされた座標のペアを取得したため、ビューが不安定になったため、今のところそれを放棄しましたが、この現在の質問が解決されたら調査します.
新しい Google Nexus 7 でコードを実行しているので、ハードウェアのスループットが不足しているとは思いません。
指で画面上のオブジェクトを移動することは、非常に基本的なことです。私が見ているような遅い反応時間で商用コードを出荷する人は誰もいないので、何かが欠けているに違いありません。
ここをスキャンしましたが、Google で見つけられるものはすべて見つかりましたが、解決策はまだありません。ご指導いただきありがとうございます。