有很多文章如何将三角形作为一个形状。但没有人解释如何计算pivotY和pivotX。 http://devdeeds.com/create-triangle-shape-using-xml-android/(例如为什么android:pivotX =" -40%" android:pivotY =" 87%&# 34; ???我的逻辑预期0%和0%=左上角)
在以下代码中,当我更改 pivotX 时,矩形形状沿Y 轴移动,当我沿
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item>
<rotate
android:fromDegrees="45"
android:pivotX="0%"
android:pivotY="50%"
>
<shape
android:shape="rectangle">
<solid android:color="#000000" />
</shape>
</rotate>
</item>
</layer-list>
我完全糊涂了。
我的最终目标是在下图中制作对角线三角形(渐变很容易制作http://angrytools.com/gradient/)。如果注意底部三角形溢出屏幕宽度,因此我无法将其作为位图插入,并确保它在所有屏幕分辨率下都能正常显示。
答案 0 :(得分:0)
我遇到了同样的问题。由于此属性中不允许使用 dp
之类的单位,因此您不知道需要什么单位。
来自 RotateDrawable
类:
if (a.hasValue(R.styleable.RotateDrawable_pivotX)) {
final TypedValue tv = a.peekValue(R.styleable.RotateDrawable_pivotX);
state.mPivotXRel = tv.type == TypedValue.TYPE_FRACTION;
state.mPivotX = state.mPivotXRel ? tv.getFraction(1.0f, 1.0f) : tv.getFloat();
}
RotateDrawable
的 onDraw():
final float px = st.mPivotXRel ? (w * st.mPivotX) : st.mPivotX;
canvas.rotate(st.mCurrentDegrees, px + bounds.left, py + bounds.top);
RotateDrawable
的源代码显示:要么需要相对百分比值,如您所说,要么需要 float
。
在类的 onDraw()
中,您可以看到该值直接用于 canvas.rotate()
的调用,而没有以某种方式进行处理,例如 TypedValue.complexToDimension()
。
因此您可以假设在 XML 属性中必须使用以像素为单位的值,这对矢量可绘制对象没有任何意义,因为它们可以任意缩放。 >
就我而言,它是一个 VectorDrawable
,大小为 24dp
x 24dp
。轴心点应位于 (12dp
|19dp
)。所以我只是使用 12 of 24 = 50% 和 19 of 24 = 79.16% 作为 RotateDrawable
的轴心点的值。要计算此值,您可以使用 https://percentagecalculator.net/ 例如。那么枢轴点是正确的,而无需多次尝试。