首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >程序化翻译视图预蜂窝

程序化翻译视图预蜂窝
EN

Stack Overflow用户
提问于 2012-01-05 05:04:44
回答 7查看 23.1K关注 0票数 48

如何在不使用动画(android.view.animation.*)的情况下以编程方式转换任意视图?

API11介绍了setTranslationXsetTranslationYsetXsetY,以及getMatrix-all,它们可以用来实现我正在寻找的东西。然而,在以前的API级别上,我似乎找不到等效的API。

android.view.animation.TranslateAnimation在其实现中使用getMatrix (早在API4中),但在这段时间内它始终是私有的。

有没有办法在不求助于反思的情况下做到这一点?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2012-01-05 05:22:38

因为我希望在这一点上被证明是错误的,所以我很受欢迎,但不久前我在做一些拖放调查时遇到了类似的问题。

我敢肯定,在早期的API中,由于在没有动画的情况下移动View,你会被offsetTopAndBottom()offsetLeftAndRight()卡住。这里最大的缺点是这些方法实际上修改了top/bottom/left/right的值,所以如果你想回到开始的地方,你必须做一些相当繁重的跟踪。

另一种选择是简单地使用一个持续时间非常短的TranslateAnimation,并设置为fillAfter...

其他选项需要子类化,而且仍然不是很好,比如翻译View所使用的Canvas。这里的问题是,您还必须创建一个不裁剪它的子级的父级,以便视图可以在自己的边界之外绘制。

票数 14
EN

Stack Overflow用户

发布于 2012-01-05 05:21:17

可以,您可以使用TranslateAnimation。将fillAfter设置为true时,即使在动画结束后,视图仍将保持平移。下面是一个示例:

代码语言:javascript
复制
TranslateAnimation anim=new TranslateAnimation(0, 0, 20, 20);
anim.setFillAfter(true);
anim.setDuration(0);
yourView.startAnimation(anim);
票数 11
EN

Stack Overflow用户

发布于 2012-07-31 12:39:28

Grishka的回答对我帮助很大,效果很好。为了在nineoldandroids中使用Honeycomb API来实现翻译动画,我为翻译值设置了一个FloatEvaluator,然后在Honeycomb+上使用setTranslationX或者使用TranslateAnimation方法。下面是我的代码:

代码语言:javascript
复制
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;
}

}
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8734001

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档