Android のドラッグ アンド ドロップ グリッドのビューに onClick ハイライトを追加する作業を行っています。プロジェクトはGitHubにあります(dev ブランチには、セレクターを使用しているコードが含まれています)。
私が抱えている問題は、onClick セレクターをビューの背景として設定したときのアダプターにあります。ビューをクリックすると、そのビューだけの背景を変更するのではなく、セレクターがすべてのビューの背景を変更します。
これは、ViewGroup (以下) の onTouch でクリックがどのように処理されているかの結果であると確信しています。すべてのビューが強調表示されないようにするために、true/false を別の方法で返す必要があるのか 、それとも onClick リスナーを別の方法でトリガーする必要があるのか わかりません。
アイデア/ヘルプをいただければ幸いです。
@Override
public boolean onTouch(View v, MotionEvent event) {
int action = event.getAction();
switch (action & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_DOWN:
touchDown(event);
break;
case MotionEvent.ACTION_MOVE:
touchMove(event);
break;
case MotionEvent.ACTION_UP:
touchUp(event);
break;
}
if (aViewIsDragged())
return true;
return false;
}
private void touchUp(MotionEvent event) {
if(dragged == -1) {
if(onClickListener != null) {
View clickedView = getChildAt(getTargetAtCoor((int) event.getX(), (int) event.getY()));
if(clickedView != null)
onClickListener.onClick(clickedView);
}
} else {
manageChildrenReordering();
hideDeleteView();
cancelEdgeTimer();
movingView = false;
dragged = -1;
lastTarget = -1;
container.enableScroll();
cancelAnimations();
}
}
編集: ViewGroup ドキュメントandroid:addStatesFromChildrenを見た後、私が探しているもののように聞こえますが、効果がないようです。
android:addStatesFromChildren
この ViewGroup の描画可能な状態に、その子の描画可能な状態も含めるかどうかを設定します。これは、たとえば、子の EditText またはボタンがフォーカスされているときにグループがフォーカスされているように見せるために使用されます。
「true」または「false」のいずれかのブール値である必要があります。
これは、この型の値を含むリソース ("@[package:]type:name" の形式) またはテーマ属性 ("?[package:][type:]name" の形式) への参照である場合もあります。 .
これは、グローバル属性リソース シンボル addStatesFromChildren に対応します。
アップデート
これを解決する方法を見つけました。プルリクエストはこちら