布局:
<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"/>
代码(streamIndicator
是ImageView
):
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
,mLeft
,mWidth
和mHeight
时一切看起来都正确size
和我的旋转角度总是合法的,明智的价值。
我只知道这是愚蠢的,我错过了什么?
谢谢!
[编辑]
这是一张照片,我添加了红色箭头指向错误的ImageView:
答案 0 :(得分: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);