Android 当用户向下滚动时,如何将滚动上的alpha值从0.2增加到1?
我想在Android 当用户向下滚动时,如何将滚动上的alpha值从0.2增加到1?,android,scrollview,Android,Scrollview,我想在滚动视图上方显示一幅图像,用户向下滚动的次数越多,图像越清晰可见。理想情况下,我希望它的初始alpha值为0.2,当滚动视图完全滚动到底部时,alpha值增加到1 我知道我可以使用监听器: view.findViewById(R.id.my_scroll_view).setOnScrollChangeListener(new android.view.View.OnScrollChangeListener() { @Override publ
滚动视图
上方显示一幅图像,用户向下滚动的次数越多,图像越清晰可见。理想情况下,我希望它的初始alpha值为0.2,当滚动视图完全滚动到底部时,alpha值增加到1
我知道我可以使用监听器:
view.findViewById(R.id.my_scroll_view).setOnScrollChangeListener(new android.view.View.OnScrollChangeListener() {
@Override
public void onScrollChange(android.view.View v, int scrollX, int scrollY, int oldScrollX, int oldScrollY) {
myImageButton.setAlpha(/* how to get this value? */);
}
});
但是我不知道如何准确地获取ScrollView
的高度,并将其与我在侦听器中得到的scrollX
值进行比较。更重要的是,当我尝试在滚动视图的底部滚动时,以下是我获取的参数:
现在检索视图(v
)高度:
我不明白这些结果是如何关联的
感谢您的帮助。为了获得alpha的正确值,我们需要将当前滚动值除以最大滚动值
有人会认为ScrollView.getMaxScrollAmount()
会起作用,但它似乎没有输出我们需要的值。我们真正需要的是ScrollView子视图的视图高度,减去它的顶部和底部填充
所以当前滚动值除以它就是我们的计算alpha。然后我们只需将计算的alpha设置为0.2f
,如果它小于这个值
以下代码适用于我:
view.findViewById(R.id.my_scroll_view).setOnScrollChangeListener(new View.OnScrollChangeListener() {
@Override
public void onScrollChange(View v, int scrollX, int scrollY, int oldScrollX, int oldScrollY) {
View child = scrollView.getChildAt(0);
int maxScroll = Math.max(0, child.getHeight() - (scrollView.getHeight() - scrollView.getPaddingBottom() - scrollView.getPaddingTop()));
float calculatedAlpha = (float)scrollY / (float)maxScroll;
if (calculatedAlpha < 0.2f) {
calculatedAlpha = 0.2f;
}
myImageButton.setAlpha(calculatedAlpha);
}
});
view.findViewById(R.id.my_scroll_view).setOnScrollChangeListener(新视图.OnScrollChangeListener(){
@凌驾
public void onScrollChange(视图v、int-scrollX、int-scrollY、int-oldScrollX、int-oldScrollY){
View child=scrollView.getChildAt(0);
int maxScroll=Math.max(0,child.getHeight()-(scrollView.getHeight()-scrollView.getPaddingBottom()-scrollView.getPaddingTop());
浮点计算alpha=(浮点)滚动/(浮点)最大滚动;
如果(计算的alpha<0.2f){
计算alpha=0.2f;
}
myImageButton.setAlpha(calculatedAlpha);
}
});