xmuSistone / CardSlidePanel

enable users to slide card to the left or right smoothly and continuously
2.39k stars 516 forks source link

怎样根据滑动距离,实现卡片上某个View的alpha从无到有? #96

Closed morefreeliang closed 4 years ago

morefreeliang commented 4 years ago

首先感谢作者的开源项目,

我现在有这样一个需求,右滑代表喜欢,左滑代表不喜欢。 当我向右滑动时,希望根据滑动的距离,卡片上代表喜欢的ImageView的alpha动画从无到有, 当我向左滑动时,卡片上代表不喜欢的ImageView的alpha从无到有。

我看在CardSlidePanel类中,DragHelperCallback 类中有onViewPositionChanged(View changedView, int left, int top,int dx, int dy)

我可以通过left判断滑动距离,来实现动画。 但是目前有一个问题,就是当我滑过一张后,下面一张卡片上代表喜欢或者不喜欢的View的alpha不是0,会显示点,但不完全显示。

我的代码如下:

 swipeCard.setCardSwitchListener(object : CardSlidePanel.CardSwitchListener {

            //拖拽时
            override fun onDrag(view: View, dx: Int) {
                val ivLike: ImageView = view.findViewById(R.id.iv_tag_like)
                val ivDisLike: ImageView = view.findViewById(R.id.iv_tag_dislike)

                var alpha = (dx / (ScreenUtils.getAppScreenWidth() / 255).toFloat()).toInt()
                alpha = abs(alpha)

                if (dx > 0) {
                    ivLike.visibility = View.VISIBLE
                    ivDisLike.visibility = View.GONE
                    ivLike.imageAlpha = alpha
                } else {
                    ivLike.visibility = View.GONE
                    ivDisLike.visibility = View.VISIBLE
                    ivDisLike.imageAlpha = alpha
                }
            }
}

希望有知道的人给与指教下,谢谢!

xmuSistone commented 4 years ago

关于滑动距离:建议用view的水平中心,和屏幕的中心点来计算; alpha渐变:建议设定一个阈值,滑动距离越来越大,alpha=0;距离最小时alpha=1;

morefreeliang commented 4 years ago

关于滑动距离:建议用view的水平中心,和屏幕的中心点来计算; alpha渐变:建议设定一个阈值,滑动距离越来越大,alpha=0;距离最小时alpha=1;

感谢作者回复,我的问题解决了, 我是在Adapter里面bindView时,ivDisLike.imageAlpha = 0 给我的两个view设置透明度为0