gpt4 book ai didi

android - pivotY 和 pivotX 在 android 中是如何计算的

转载 作者:行者123 更新时间:2023-12-05 07:46:17 27 4
gpt4 key购买 nike

有很多文章如何将三角形制作成一个形状。但是没有人解释 pivotY 和 pivotX 是如何计算的。 http://devdeeds.com/create-triangle-shape-using-xml-android/ (例如为什么 android:pivotX="-40%"android:pivotY="87%"??? 我的逻辑期望 0% 和 0% = left-top角)

在下面的代码中,当我更改 pivotX 时,矩形会沿 Y 轴移动,而当我更改 pivotY - 沿 X 轴 时。

<?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/ )。如果您注意底部三角形溢出屏幕宽度,因此我无法将其作为位图插入并确保它在所有屏幕分辨率下都能正常显示。

enter image description here

最佳答案

我遇到了同样的问题。由于此属性中不允许使用 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 属性中也必须使用一个以像素为单位的值,这对矢量可绘制对象没有任何意义,因为它们可以任意缩放。 p>

在我的例子中,它是一个 VectorDrawable,大小为 24dp x 24dp。枢轴点应位于 (12dp|19dp)。所以我只使用 12 of 24 = 50%19 of 24 = 79.16% 作为 RotateDrawable 的轴心点值。要计算这个,您可以使用 https://percentagecalculator.net/例如。然后轴心点是正确的,而无需多次尝试。

关于android - pivotY 和 pivotX 在 android <rotate> 中是如何计算的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40894362/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com