Rumah > Soal Jawab > teks badan
如何将viewpager的图片与状态栏沉侵,这该如何做呢???我这里的viewpager不是全屏的,而是占屏幕的1/4.
阿神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
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);
}
}
//.....
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
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