Android App第一次开始进入的界面,沉浸式状态栏

本文介绍了一个结合自定义View和PageView的应用案例,详细解释了如何实现自定义指示器,并通过监听滑动事件来更新指示器的状态。此外,还提供了实现沉浸式状态栏的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

https://github.com/wanglianghai/UsefulViewPageAPPin
http://www.jianshu.com/p/7833d8450405
这是实习的最后一次demo了,日子是充实的,学习了很多。
主要就是自定义view和page view的联合使用
1.先自定义好下面的指示器(指示器位置抽成一个对象方便画图)
2.要自定义view和view page联合使用
1.在自定义view中

implements ViewPager.OnPageChangeListener
//OnPageChangeListener
    @Override
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

    }
    @Override
    public void onPageSelected(int position) {
        mSelectPosition = position;//记录选中的位置
        invalidate();//重新画视图
    }
    @Override
    public void onPageScrollStateChanged(int state) {
    }

2.添加进view page中就行了

public void setUpWithViewPage(ViewPager viewPage) {
        mViewPage = viewPage;
        mViewPage.addOnPageChangeListener(this);
    }

3.圈的点击事件
1.onTouchEvent中记录点的位置

@Override
    public boolean onTouchEvent(MotionEvent event) {
        switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                mClickX = (int) event.getX();
                mClickY = (int) event.getY();
                isClick();
                break;
        }
        return super.onTouchEvent(event);
    }

2.判断在那个圈中

public void isClick() {
        for (int i = 0; i < mCount; i++) {
            Indicator indicator = mIndicators.get(i);
            if (Math.abs(indicator.cx - mClickX) < mRadius
                    && Math.abs(indicator.cy - mClickY) < mRadius) {
                mViewPage.setCurrentItem(i);//设置点击
                break;
            }
        }
    }

沉浸式状态栏
http://www.jianshu.com/p/752f4551e134
方式一:

<style name="AppTheme" parent="Theme.Design.Light.NoActionBar">
        <item name="android:windowTranslucentStatus">false</item>
        <item name="android:windowDrawsSystemBarBackgrounds">true</item>
        <item name="android:statusBarColor">@android:color/holo_red_light</item>
    </style>

方式二:

getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
        //注意要清除 FLAG_TRANSLUCENT_STATUS flag
        getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
        getWindow().setStatusBarColor(getResources().getColor(android.R.color.holo_red_light));
  • For this to take effect,
  • 要让这个方法起作用
    • the window must be drawing the system bar backgrounds with
    • 这个window必须被画用系统的bar背景(android.view.WindowManager.LayoutParams#FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS})
    • {@link android.view.WindowManager.LayoutParams#FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS} and
    • 并且{@link android.view.WindowManager.LayoutParams#FLAG_TRANSLUCENT_STATUS}不被设置
    • {@link android.view.WindowManager.LayoutParams#FLAG_TRANSLUCENT_STATUS} must not be set.
      *
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值