Jak*_*ton 48 android android-layout
如何在不使用动画(android.view.animation.*)的情况下以编程方式转换任意视图?
API 11介绍setTranslationX和setTranslationY,setX和setY,和getMatrix-所有这些都可以用来实现什么我要找的.但是,我似乎无法找到先前API级别的等效项.
android.view.animation.TranslateAnimation它getMatrix在实现中的用途(早在API 4),但它始终是一个私有API.
有没有办法在不诉诸反思的情况下实现这一目标?
Dev*_*red 14
被收藏是因为我希望在这个问题上被证明是错误的,但是在我做一些Drag-n-Drop调查时我遇到了类似的问题.
我敢肯定,你坚持offsetTopAndBottom()和offsetLeftAndRight()用于移动View周围没有早期的API的动画.这里的一大缺点是这些方法实际上修改了顶部/底部/左/右值,因此如果你想回到起点,你必须做一些非常重的跟踪.
另一种选择是简单地使用TranslateAnimation非常短的持续时间并设置为fillAfter......
其他选项需要子类化,仍然不漂亮,像翻译Canvas的View借鉴.这里的问题是你还必须创建一个不剪切它的子节点的父节点,以便视图可以在其自己的边界之外绘制.
Gri*_*hka 11
是的,您可以使用TranslateAnimation.将fillAfter设置为true后,即使动画结束,您的视图也会保持翻译状态.这是一个例子:
TranslateAnimation anim=new TranslateAnimation(0, 0, 20, 20);
anim.setFillAfter(true);
anim.setDuration(0);
yourView.startAnimation(anim);
Run Code Online (Sandbox Code Playgroud)
Grishka的回答帮了我很多忙,效果很好.为了使用带有nineoldandroids的Honeycomb API为转换设置动画,我为转换值设置了FloatEvaluator,然后在Honeycomb +或TranslateAnimation方法上使用setTranslationX.这是我的代码:
public class TranslationXEvaluator extends FloatEvaluator {
private View view;
public TranslationXEvaluator(View view) {
this.view = view;
}
@Override
public Float evaluate(float fraction, Number startValue, Number endValue) {
float translationX = super.evaluate(fraction, startValue, endValue);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
view.setTranslationX(translationX);
} else {
TranslateAnimation anim = new TranslateAnimation(translationX, translationX, 0, 0);
anim.setFillAfter(true);
anim.setDuration(0);
view.startAnimation(anim);
}
return translationX;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
22692 次 |
| 最近记录: |