2013-04-25 55 views
1

在運行時移動,我添加了一個新的ImageView和連接監聽器,像這樣:熱點onTouchListener的不沿TranslationAnimation

image = new ImageView(someAppContext()); 
relativeLayout.addView(image, someLayoutParam); 
// add onTouch listener to the image view: 
image.setOnTouchListener(new ImageView.OnTouchListener() { 
    public boolean onTouch(View v, MotionEvent event) { 
     makeToast("touched!"); 
     return false; // tried return true, makes no difference 
    } 
}); 

在那之後,我用TranslateAnimation與setFillAfter(true),所以ImageView的將留在新的位置。然而,如果我觸摸ImageView的舊位置,觸發onTouch(),但不是視覺上圖像的新位置。我如何使觸摸敏感熱點與ImageView本身一起移動?我也試過invalidate(),似乎沒有幫助。

+1

而不是烤麪包我只是記錄Log.d(標籤,「觸摸」),圖像和文本分別得到觸摸事件和點擊事件。 – 2013-04-26 00:39:39

+0

你是對的,它們都被觸發。我專注於錯誤的問題:它與動畫有關。 – user1032613 2013-04-26 15:07:58

回答

1

動畫實際上並未移動視圖。翻譯動畫僅在其座標上添加偏移量。

我認爲最好的解決方法是清除所有的動畫,並更新佈局參數,以便將實際的ImageView移動到動畫的目的地。

您需要存儲您的翻譯的目的,說dest_x, dest_y和動畫完成後,執行:

someLayoutParam.leftMargin = dest_x; 
    someLayoutParam.topMargin = dest_y; 
    yourImageView.clearAnimation(); // resets its position 
    yourRelativeLayout.updateViewLayout(yourImageView, someLayoutParam); 

這樣,圖像視圖的位置沒有變化,但實際視圖被移動,所以可觸摸區域也被移動。