ToolBarは、ScrollViewのスクロールに伴って透明度を変更します.

2599 ワード

リスニングコールバックを使用して、scrollY/(screen_height/3 f)に従ってalphaを設定します.ScrollViewでプロパティを設定する:android:clipToPadding=「false」//このコントロールの描画範囲がpadding内にあるかどうか(false:描画時に範囲がpaddingを考慮し、内側にインデントする)android:clipChildren=「false」//サブコントロールがpaddingの領域を超えているかどうか(ScrollViewが上にスライドするとchildはその領域からスライドできます)
1.xml構造


....




2.カスタムMyScrollViewでScrollViewスライドの距離を取得し、スライドに伴うalpha値を距離/画面の高さの割合で算出し、リスニングコールバックを設定します.MyScrollViewのキーコードは次のとおりです.
 @Override
    protected void onScrollChanged(int l, int t, int oldl, int oldt) {
        super.onScrollChanged(l, t, oldl, oldt);
        //1.  ScrollView Y       
        int scrollY = getScrollY();
        //2.      
        int heightPixels = getContext().getResources().getDisplayMetrics().heightPixels;
        //3.      , scrollY <      1/3 ,    
        float v = heightPixels / 3f;
        //4.        
        float v1 = scrollY / v;//(0-1)
        //5.     1-0
        float alpha = 1 - v1;

        //7.              
        if(listener!=null){
            if(scrollY <= v){
                listener.onTranlucent(alpha);
            }

        }

    }

    //6.    
    private TranslucentListener listener;
    public void setListener(TranslucentListener listener) {
        this.listener = listener;
    }

    public interface TranslucentListener{
        /**
         *         
         * @param alpha 0~1    
         */
        public void onTranlucent(float alpha);
    }

3.インタフェースでtoolbarに透明度を設定する
public class ScrollToolBarActivity extends AppCompatActivity implements MyScrollView.TranslucentListener {

    private Toolbar toolbar;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_scroll_tool_bar);
        // myScrollView    
        MyScrollView myScrollView = findViewById(R.id.scv);
        myScrollView.setListener(this);

        toolbar = findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);


    }

    @Override
    public void onTranlucent(float alpha) {
        //  toolbar          ScrollView     
        toolbar.setAlpha(alpha);
    }
}


4.xmlファイルでMyScrollViewにプロパティを設定する:android:clipToPadding="false"//このコントロールの描画範囲がpadding内にあるかどうか(false:描画時に範囲がpadding、すなわち奥へインデントすることを考慮する)android:clipChildren="false"//サブコントロールがpaddingの領域を超えることができるかどうか(ScrollViewが上へスライドするとchildはその領域からスライドすることができる)ScrollViewのスライドを避けると、Toolbarの部分に白い領域が表示されます.