1

Activity-Class に ImageView の ArrayList があり、それらはすべて同じ動作をするはずです。それらに触れて指を右または左に動かすとすぐに、この ImageView の x 座標も移動するはずです。

public boolean onTouch(View v, MotionEvent e) {
    float origin_x = 0;
    float origin_x2 = 0;
    RelativeLayout.LayoutParams lp = (RelativeLayout.LayoutParams) v.getLayoutParams();
    switch (e.getActionMasked()) {
        case MotionEvent.ACTION_DOWN: {
            origin_x = e.getX();
            origin_x2 = lp.leftMargin;
            break;
        }
        case MotionEvent.ACTION_MOVE: {
            float diff = e.getX()-origin_x;
            System.out.println(diff);

            lp.setMargins((int) (origin_x2+diff), lp.topMargin, 0, 0);
            v.setLayoutParams(lp);
            break;
        }
    }
    return true;
}

しかし、ontouch-Method では "View" オブジェクトしか使用できないため、どの ImageView がタッチされたかを知ることはできません。

この問題をどのように解決すればよいか知っていますか?

4

2 に答える 2

2

わかりました、この質問はずっと前に私から尋ねられましたが、最近多くのクリックと賛成票を受け取ったので、今答えることにしました.

View を移動したい場合(ImageView であるか他の種類の View であるかに関係なく)、私の質問投稿のコードを使用できます。を値に設定するmarginsと、で機能します。onTouch MotionEventRelativeLayouts


ただし、私の質問には、 の ArrayList で-Eventからオブジェクトを見つける方法Viewも含まれていました。 それに対する答えも非常に簡単です。onTouchImageViews

ArrayList<ImageView> arrList = new ArrayList<ImageView>();
/** ... **/
int keyOfView = arrList.indexOf(v);

オブジェクトかオブジェクトかvは関係ありません。ArrayList ルックアップのために from からtoにキャストする必要はありません。なぜなら、参照は同じままであり、それが List で実際に検索されているものだからです: 参照。ViewImageViewViewImageView


ただし、 (何らかの理由で) オブジェクトの from が必要ImageViewViewすべてが実際にオブジェクトであるかどうかわからない場合は、次のようにすることができます。ViewsImageView

if (v instanceof ImageView) {
     ImageView i = (ImageView) v;
}

この方法では取得できませんcast-errors

于 2016-01-07T22:49:24.643 に答える