我想使用一系列RotateDrawable对象为复合摆设置动画(因此,第二个RotateDrawable的枢轴点必须“附加”到第一个RotateDrawable上的点)。这意味着我需要计算旋转之后可绘制对象中的点在哪里。似乎没有获取或设置RotateDrawable轴的方法。当事情膨胀时,不能直接从XML检索它们,我想不出一种方法。

最佳答案

可以通过类似于以下方式的方式在膨胀期间从XML获取数据透视:

//r is a Resources object containing the layout
//id is an integer from R.drawable
XmlPullParser parser = r.getXml(id);
AttributeSet attrs = Xml.asAttributeSet(parser);
float pivotX = attrs.getAttributeFloatValue("http://schemas.android.com/apk/res/android", "pivotX", 0.5f);
float pivotY = attrs.getAttributeFloatValue("http://schemas.android.com/apk/res/android", "pivotY", 0.5f);

//d is a RotateDrawable
d.inflate(r, parser, attrs);


属性应该在零和一之间(如果存在),并且0.5f是Android设置的默认值(如果不存在)。

http://idunnolol.com/android/drawables.html#rotate

重要的提示

我已经意识到,获取android:fromDegreesandroid:toDegrees也是很重要的,就像您一样,您正在使用onLevelChanged(int)来获取旋转量,您需要知道实际获得了多少旋转。这些属性使用相同的方法。默认值为0.0f和360.0f(以度为单位)。级别在0到10,000之间,0对应fromDegrees,10,000对应toDegrees

10-06 00:19