首頁banner圖上方懸浮一個view並隨着banner圖可見范圍改變透明度解決


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

先貼上效果圖:

 

 

 

如上圖,需要實現城市切換和搜索框透明懸浮在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" 但是顏色肉眼區分不出來的那種,得到解決。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM