簡體   English   中英

onTouchListener:將視圖轉換為ImageView

[英]onTouchListener: Convert View to ImageView

我的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” - Object,因此我無法找到觸及的ImageView。

你知道我應該怎么解決這個問題嗎?

好的,我很久以前就已經問過這個問題 - 但是由於它最近收到了很多點擊,甚至是一個upvote,我現在決定回答它。

如果要移動視圖 (無論是ImageView還是任何其他類型的視圖),您都可以使用我的問題帖子中的代碼。 設置marginsonTouch MotionEvent值將在工作RelativeLayouts


但是,我的問題還包括如何ImageViews的ArrayList中onTouch 查找View對象
答案也非常簡單:

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

如果vView對象或ImageView對象,則無關緊要。 無需從ViewImageView進行ArrayList查找,因為引用將保持不變 - 這就是在List中實際搜索的內容:引用。


但是, 如果 (無論出於何種原因),確實需要一個ImageView從一個View對象不能確定是否所有的Views實際上是ImageView對象,那么你可以做這樣的事情:

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

這樣你就不會得到cast-errors

假設您只使用ImageView的觸摸偵聽器,您可以執行以下操作:

ImageView imageView = (ImageView) v;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM