recherche

Maison  >  Questions et réponses  >  le corps du texte

android - 如何将viewpager的图片与状态栏沉侵

如何将viewpager的图片与状态栏沉侵,这该如何做呢???我这里的viewpager不是全屏的,而是占屏幕的1/4.

巴扎黑巴扎黑2888 Il y a quelques jours550

répondre à tous(1)je répondrai

  • 阿神

    阿神2017-04-17 17:41:21

    Il m'est arrivé de créer une application semi-finie auparavant, et la page d'accueil n'était que l'effet principal de la question. J'ai d'abord posté le lien :
    Cliquez ici, il y a des commentaires à l'intérieur

    .
    StatusBarUtil.setTransparent(MainActivity.this);
    //然后动态的改变Activity的背景就可以实现了

    Je suis ici pour mettre à jour :
    Regardons d'abord la mise en page (donnez-moi un exemple ici) :

    <FrameLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@drawable/bg_saber_q"
        tools:context="didikee.com.demoapk.activity.StatuBarActivity">
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">
            <FrameLayout
                android:id="@+id/bg_main"
                android:layout_width="match_parent"
                android:layout_height="400dp"
                android:background="@drawable/meinv">
            //我要把这个 meinv 变为沉浸状态栏,注意层级
            </FrameLayout>
            <TextView
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:textSize="50sp"
                android:textColor="@color/orange"
                android:gravity="center"
                android:text="哈哈哈"/>
        </LinearLayout>
    </FrameLayout>

    Modifiez ensuite la méthode dans StatusBarUtil (notez le niveau) :

    private static void setRootView(Activity activity) {
            ViewGroup rootView = (ViewGroup) ((ViewGroup) activity.findViewById(android.R.id.content)).getChildAt(0);
    
            ViewGroup childAt = (ViewGroup) rootView.getChildAt(0);
            ViewGroup childAt1 = (ViewGroup) childAt.getChildAt(0);
            //childAt1 这个就是有美女背景图的那个FrameLayout,也是ViewGroup嘛
            childAt1.setFitsSystemWindows(true);
            childAt1.setClipToPadding(true);
        }

    Photo de démonstration :

    Vous pouvez affiner l'effet spécifique de votre projet

    -----Mise à jour à nouveau :
    Le carrousel a OnPageChangeListener(); paramètres dynamiques et c'est tout

    / Réponse mise à jour le 20/10/2016 */

    PS : Peut-être que l'auteur de la question est parti, mais j'écris toujours une mise à jour. J'ai rencontré un besoin similaire aujourd'hui

    1. Activity Pour hériter AppCompatActivity.
      2.

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            requestWindowFeature(Window.FEATURE_NO_TITLE);
            setContentView(R.layout.xxxx);
            setBarStyle();
            init();
        }
        public void setBarStyle() {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
                // 设置状态栏透明
                getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
            }
        }
        //.....
    1. À ce stade, vous pouvez utiliser votre barre d'état. Vous pouvez remplir la barre d'état avec un View puis modifier la transparence de l'arrière-plan de cette vue si nécessaire

    2. <🎜. >
    J'avais l'habitude

    de le faire, j'ai donc surveillé la distance de défilement et posté mon traitement : ScrollView

    mSScrollView.setOnScrollListener(new SScrollView.OnScrollChangedListener() {
                @Override
                public void onScrollChanged(int x, int y, int oldX, int oldY) {
                    //状态栏透明度回调
                    final int height = mFLViewpagerHeight - mTitleHeight;
                    if (y <= 0) {   //设置标题的背景颜色
                        mVGTitle.setBackgroundColor(Color.argb((int) 0, 255,255,255));
                        mTvTitleMiddle.setTextColor(Color.argb((int) 0, 46,46,46));
                        //这是填充在状态栏的View
                        mStatusBar.setBackgroundColor(Color.argb((int) 0, 204,204,204));
    
                        mIvTitleLeft.setImageResource(R.drawable.ic_arrow_left_white);
                        mIvTitleShare.setImageResource(R.drawable.ic_share_pure);
                    } else if (y > 0 && y <= height) { //滑动距离小于banner图的高度时,设置背景和字体颜色颜色透明度渐变
                        float scale = (float) y / height;
                        float alpha = (255 * scale);
                        mTvTitleMiddle.setTextColor(Color.argb((int) alpha, 46,46,46));
                        mVGTitle.setBackgroundColor(Color.argb((int) alpha, 255,255,255));
                        mStatusBar.setBackgroundColor(Color.argb((int) alpha, 204,204,204));
    
                        mIvTitleLeft.setImageResource(R.drawable.ic_arrow_left_white);
                        mIvTitleShare.setImageResource(R.drawable.ic_share_pure);
                    } else {    //滑动到banner下面设置普通颜色
                        mVGTitle.setBackgroundColor(Color.argb((int) 255, 255,255,255));
                        mTvTitleMiddle.setTextColor(Color.argb((int) 255, 46,46,46));
                        mStatusBar.setBackgroundColor(Color.argb((int) 255, 204,204,204));
                        mIvTitleLeft.setImageResource(R.drawable.ic_left_arrow_dark);
                        mIvTitleShare.setImageResource(R.drawable.ic_share_dark);
    
                    }

    Je ne sais pas si cela peut lire des vidéos. J'ai enregistré une démo en utilisant Studio. Voyons si cela peut produire votre effet. Le transfert de captures d'écran est trop lent


    http://oahzrw11n.bkt.clouddn.....

    répondre
    0
  • Annulerrépondre