cari

Rumah  >  Soal Jawab  >  teks badan

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

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

巴扎黑巴扎黑2888 hari yang lalu553

membalas semua(1)saya akan balas

  • 阿神

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

    Saya kebetulan membuat aplikasi separuh siap sebelum ini, dan halaman utama hanyalah kesan utama soalan saya menyiarkan pautan dahulu:
    Klik di sini, terdapat ulasan di dalam

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

    Saya di sini untuk mengemas kini:
    Mari kita lihat reka letak dahulu (beri saya contoh di sini):

    <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>

    Kemudian ubah suai kaedah dalam StatusBarUtil (perhatikan tahap):

    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);
        }

    Gambar demo:

    Anda boleh memperhalusi kesan khusus projek anda

    -----Kemas kini sekali lagi:
    Karusel mempunyai OnPageChangeListener(); tetapan dinamik dan itu sahaja

    / 2016-10-20 jawapan dikemas kini */

    PS: Mungkin pengarang soalan telah pergi, tetapi saya masih menulis kemas kini yang saya hadapi hari ini

    1. Activity Untuk mewarisi 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. Pada masa ini, anda boleh menggunakan bar status anda Anda boleh mengisi bar status dengan View dan kemudian menukar ketelusan latar belakang Paparan ini mengikut keperluan

    2. <🎜. >
    Saya menggunakan

    untuk melakukannya, jadi saya memantau jarak tatal dan menyiarkan pemprosesan saya: 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);
    
                    }

    Saya tidak tahu sama ada ini boleh memainkan video saya merakam tunjuk cara menggunakan studio. Mari lihat sama ada ia boleh mencapai kesan anda

    balas
    0
  • Batalbalas