0

レイアウト:

<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検査すると、、、、そしてstreamIndicatorすべてmTopが正しく見えることです。 そして私の回転角は常に合法で賢明な値です。mLeftmWidthmHeightsize

私はこれが愚かなことだと知っています、私は何を逃しましたか?

ありがとう!

[編集]

これが写真です。赤い矢印は、誤ったImageViewを指すために私が追加したものです。

ここに画像の説明を入力してください

4

1 に答える 1

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);
于 2013-03-17T12:16:36.163 に答える