Maison > Questions et réponses > le corps du texte
如何将viewpager的图片与状态栏沉侵,这该如何做呢???我这里的viewpager不是全屏的,而是占屏幕的1/4.
阿神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
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);
}
}
//.....
À 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
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.....