首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用ViewPropertyAnimator淡入图像

用ViewPropertyAnimator淡入图像
EN

Stack Overflow用户
提问于 2016-09-01 22:54:22
回答 2查看 512关注 0票数 1

我试图使用ImageView来淡入一个具有可变持续时间的ViewPropertyAnimator,但是我无法让它正常工作。

这是我用来淡出的代码,它工作得很好:

代码语言:javascript
复制
final ImageView imageView = (ImageView)mView.findViewById(R.id.image_view);
Picasso.with(mView.getContext()).load(mItem.thumbnailURL).into(imageView, new Callback() {
      @Override
      public void onSuccess() {
           imageView.animate().alpha(0).setDuration(duration).start();
      }
      ...
});

但是,如果我试图反转方向以使图像消失,图像就永远不会出现:

代码语言:javascript
复制
final ImageView imageView = (ImageView)mView.findViewById(R.id.image_view);
imageView.setAlpha(0);

Picasso.with(mView.getContext()).load(mItem.thumbnailURL).into(imageView, new Callback() {
      @Override
      public void onSuccess() {
           imageView.animate().alpha(1).setDuration(duration).start();
      }
      ...
});

为什么alpha值永远不会增加?动画在与setAlpha不同的alpha通道上运行吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-09-02 00:50:59

将不推荐的"setAlpha (SetAlpha)“更改为”setAlpha(浮点α)“,它将工作。

代码语言:javascript
复制
imageView.setAlpha(0f);
票数 1
EN

Stack Overflow用户

发布于 2018-09-26 07:20:31

使用View.setAlpha(),下面的代码可能会帮助您解决它。

ViewPropertyAnimator中跟踪源代码

代码语言:javascript
复制
public ViewPropertyAnimator alpha(float value) {
    *animateProperty(ALPHA, value);*
    ...
}

然后,

代码语言:javascript
复制
private void animateProperty(int constantName, float toValue) {
    float fromValue = *getValue(constantName)*;
    ...
}

就这样,

代码语言:javascript
复制
private float getValue(int propertyConstant) {
    final RenderNode node = mView.mRenderNode;
    switch (propertyConstant) {
        ...
        case ALPHA:
            return *mView.mTransformationInfo.mAlpha;*
    }
    return 0;
}

这和View.setAlpha()有关

代码语言:javascript
复制
public void setAlpha(@FloatRange(float alpha) {
    ensureTransformationInfo();
    if (mTransformationInfo.mAlpha != alpha) {
        *setAlphaInternal(alpha);*
        ...
    }
}

ViewPropertyAnimator.getValue()所指的属性相同:

代码语言:javascript
复制
private void setAlphaInternal(float alpha) {
    float oldAlpha = mTransformationInfo.mAlpha;
    *mTransformationInfo.mAlpha = alpha;*
    ...
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39282018

复制
相关文章

相似问题

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