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