好久沒有寫博客了,今天做一個如題的需求的時候碰到了一個惡心的問題,記錄一下,嘻嘻。
先貼上效果圖:



如上圖,需要實現城市切換和搜索框透明懸浮在banner圖上面,我這里的布局是 一個listview加載n張廣告圖,listview添加一個headview包括了banner 以及一些選擇按鈕
然后需要實現listview下滑的時候隨着banner圖的可見高度漸漸逼近0使城市&搜索view透明度漸漸消失,變為非透明。
不多說,貼代碼:
/**
* Created by 口口王 on 2017/10/25.
*/
public class TestListview extends ListView {
public TestListview(Context context) {
super(context);
}
public TestListview(Context context, AttributeSet attrs) {
super(context, attrs);
}
public TestListview(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
protected void onScrollChanged(int l, int t, int oldl, int oldt) {
super.onScrollChanged(l, t, oldl, oldt);
View c = getChildAt(0);
if (c != null){
int scrolly = -c.getTop() + getFirstVisiblePosition() * c.getHeight();
scrollListener.getScrollY(AnyHelper.px2dip(getContext(),scrolly));
}
}
private ScrollListener scrollListener;
public void setScrollListener(ScrollListener scrollListener){
this.scrollListener = scrollListener;
}
public interface ScrollListener{
void getScrollY(int heightpx);
}
}
以上是自定義的listview,在onScrollChanged方法中把第一個child的滑動高度通過接口回調給外部使用。
此處的px2dip()方法也分享一下吧,將px單位轉換為dp單位。
/**
* 根據手機的分辨率從 px(像素) 的單位 轉成為 dp
*/
public static int px2dip(Context context, float pxValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (pxValue / scale + 0.5f);
}
下面是回調出去的操作:
mBinding.lvJob.setScrollListener(new TestListview.ScrollListener() {
@Override
public void getScrollY(int heightpx) {
//heightpx 達到 banner的高度 透明度置為 255 (透明度為0~255)
int bannerheight = AnyHelper.px2dip(baseFragment.getContext(),convenientBanner.getHeight());
int b = (int) (255*heightpx/(bannerheight-AnyHelper.px2dip(baseFragment.getContext(),mBinding.rlTitle.getHeight())));
if (b <= 255){
mBinding.rlTitle.getBackground().setAlpha(b);
}
}
});
問題來了,我這里的rltitle使用的背景色是全局app的主題色,比方說是紅色,此時這句代碼mBinding.rlTitle.getBackground().setAlpha(b); 影響了我這個紅色在全局的視圖。
我的別的視圖的title也都是使用的該顏色(紅色), 但是此時透明度為0了, 我其他界面的title也就為0了 。
本來以為clean一下就好了,結果發現錯在這里,所以用了同樣的色值,變了一下name 如red="#xxxxxx" red2="#xxxxxx"
結果仍然一樣 ,應該是跟蹤色值的,所以我不得不小改一下色值,比如red2 = "#xxxyxx" 但是顏色肉眼區分不出來的那種,得到解決。
