我想为android中的View创建倾斜动画。
所以,我有矩形视图(这是正常/开始状态),最后它应该是这样的:
我可以使用android.view.animation
使用TYPE_MATRIX
Matrix
包来做这样的事情。因此,我可以创建preSkew
并使用Matrix
方法,将此ObjectAnimator
应用于我的自定义动画,然后在视图上启动此动画。所以这没关系。
但是
问题是我想用android.view.animation
执行此操作。
因为不建议使用ObjectAnimator
包。
但我无法通过ImageView
类获得此问题的解决方案。
如果我有setImageMatrix
,我可以将方法ObjectAnimator
用于MatrixEvaluator
(并创建自定义View
来评估每个因素的相应矩阵),
但是我希望用TextView
类来解决这个问题,而不是它的某些子类。
主要原因是,例如,setMatrix
没有像TextView
那样的公共方法,我也希望得到SkewTextView
的解决方案。因此,获得基本View类的解决方案是主要的愿望。
还有另一种解决方案:创建自定义,例如onDraw
,其中canvas.skew
方法使用android.view.animation
方法。
但是这甚至比使用View
包更糟糕的解决方案,因为你需要为你想要倾斜的任何View
子类创建包装器。
所以,我不知道,我如何能ObjectAnimator
View
setSkew
,因为setMatrix
类没有公共方法,如ObjectAnimator
或{{ 1}})。
您如何解决这个问题?
你知道如何解决这个问题吗?
{{1}}是否有解决此问题的方法?
非常感谢任何帮助(甚至是想法)
感谢
答案 0 :(得分:2)
没有子类化,这可能有点棘手。我的主要想法是使用TimeAnimator,它将与Camera(可以使用Matrix转换)一起为您提供时间回调。或者,您可以使用TimeAnimator从您想要倾斜的视图制作位图,使原始视图不可见,并在每个TimeAnimator步骤上应用矩阵绘制位图。但我不确定这是否是最佳方法,因为您必须在每个帧上创建一个新的位图
编辑:不,相机方法不是这样做的方式,如下面的评论中所述
答案 1 :(得分:0)
我在项目中使用 Android Property Animation API创建了偏斜动画( GitHub Link )。
我做了什么:
SKEW_X
属性。
public class SkewView extends ImageView {
private static final String TAG = "SkewView";
public static final Property SKEW_X
= new FloatProperty("skewX") {
@Override
public void setValue(SkewView object, float value) {
object.setSkewX(value);
}
@Override
public Float get(SkewView object) {
return object.getSkewX();
}
};
private float mSkewX;
// ...
public float getSkewX() {
return mSkewX;
}
public void setSkewX(float skewX) {
mSkewX = skewX;
invalidate();
}
@Override
protected void onDraw(Canvas canvas) {
if (mSkewX != 0) {
canvas.skew((float) (mSkewX * Math.PI / 180.0f), 0);
}
super.onDraw(canvas);
}
}
ObjectAnimator
为此媒体资源制作动画。
ObjectAnimator skewAnimator = ObjectAnimator.ofFloat(mTarget, SkewView.SKEW_X, 30);