如何设置CardView中支架的宽度

时间:2018-04-15 11:34:32

标签: android android-recyclerview

我正在尝试在onBindViewHolder方法中设置一个条形图(只是一个ImageView)。

如果我不尝试动画它,那么它与这条线完美配合:

holder.progressBar.getLayoutParams().width = 100;

但是只要我添加一个函数来设置这个bar / imageView的动画,它就不起作用了。 我只能在recyclerView的第一项上看到该栏,并且该栏没有动画。

这是我使用的代码。有什么问题?

感谢所有人。

    @Override
    public void onBindViewHolder(ViewHolder holder, int position)
    {
        //holder.progressBarWeatherFactor.getLayoutParams().width = 100;
        animateWidth(0, 100, holder.progressBar.getLayoutParams());
    }

    public void animateWidth(int start, int end, final ViewGroup.LayoutParams myBar)
    {
        ValueAnimator valueAnimator = ValueAnimator.ofInt(start, end);
        valueAnimator.setDuration(1800);

        valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener()
        {
            @Override
            public void onAnimationUpdate( ValueAnimator valueAnimator)
            {
                myBar.width = ((int) valueAnimator.getAnimatedValue());
            }
        });

        valueAnimator.start();
    }

1 个答案:

答案 0 :(得分:0)

所以,为了提供帮助,我找到了一个解决方案,也许不是最好的,但它有效,我希望它会有所帮助! (/ 10 * 3/64与我的图像大小有关,所以不要这么做)

@Override    
public void onBindViewHolder(ViewHolder holder, int position)
{
    animateWidth(0, 100, holder.progressBar);
}

public void animateWidth(int initialValue, int finalValue, ImageView image)
{
    image.setPivotX(0f);

    PropertyValuesHolder barWidth;
    barWidth = PropertyValuesHolder.ofFloat("scaleX", 0, ((float)(((image.getResources().getDisplayMetrics().density)/10)*3)/64)*finalValue);

    ObjectAnimator.ofPropertyValuesHolder(image, barWidth).setDuration(800).start();
}