2013-03-17 140 views
0

佈局:ImageView的移動縮放時/旋轉

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:background="@android:color/transparent" 
       android:id="@+id/globeViewStreamInfoPanel" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content"> 

    <ImageView android:id="@+id/streamIndicator" 
       android:src="@drawable/nv_tidestreamindicator" 
       android:scaleType="matrix" 
       android:layout_alignParentTop="true" 
       android:layout_alignParentLeft="true" 
       android:layout_margin="10dp" 
       android:maxHeight="40dp" 
       android:maxWidth="40dp" 
       android:layout_width="40dp" 
       android:layout_height="40dp"/> 

代碼(streamIndicatorImageView):

streamIndicatorMatrix.reset(); 
streamIndicatorMatrix.setScale(size,size); 

// rotate indicator in the direction of the flow 
streamIndicatorMatrix.setRotate((float)(stream.currentStream.direction)); 

streamIndicator.setImageMatrix(streamIndicatorMatrix); 

當我旋轉或縮放,或兩者,在佈局中的ImageView移動。

奇怪的是,當我setImagematrix後上線突破,檢查streamIndicatormTopmLeftmWidthmHeight一切看起來是正確的。 size和我的旋轉角度總是合法的,合理的價值。

我只知道這是愚蠢的,我錯過了什麼?

謝謝!

[編輯]

這裏是一個事先知情同意,紅色箭頭是由我添加指向錯誤的ImageView的:

enter image description here

回答

1

Matrix.setRotate默認使用(0, 0)支點。這是您的圖像在佈局中移動的原因。有一個Matrix.setRotate方法的重載版本,可以讓你明確支點。

final float density = getResources().getDisplayMetrics().density; 
final int center = Math.round(20 * density); 

streamIndicatorMatrix.setScale(size,size, center, center); 
streamIndicatorMatrix.setRotate((float)(stream.currentStream.direction), center, center); 
+0

Doh !.你知道更令人討厭的是,如果有人問我這個問題,我會給他們這個答案!我想我最近已經投入太多時間了:)謝謝! – Simon 2013-03-17 12:22:19

+0

你能幫助我嗎? @Vladimir Mironov,.... http://stackoverflow.com/questions/32023108/android-how-to-scaley-to-based-on-other-objects-position – gumuruh 2015-08-17 00:15:38