android 关于自定义解锁动画和实现全屏的解决方案

先说说缘由吧,最近项目要研究在亮屏的时候用展示一个开屏动画,我一想这个不难吧,截获亮屏的广播事件 Intent.ACTION_SCREEN_ON然后处理对应的事件就好了,但我发现好像没有正确的api可以修改锁屏壁纸,然后我就参考下面这个哥们自定义锁屏解决了一部分需求(有一个缺陷不能处理有锁屏密码的情况)。
http://blog.csdn.net/xiaoyu940601/article/details/53945198


下面贴出简单的代码:

1.这个是广播接收器,注意Intent.ACTION_SCREEN_ON和Intent.ACTION_SCREEN_OFF这个两个action必须动态注册。

 @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        if (Intent.ACTION_USER_PRESENT.equals(action)) {

        } else if (Intent.ACTION_SCREEN_ON.equals(action)) {

            Intent lockscreen = new Intent(context,LockScreenActivity.class);
//            lockscreen.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            lockscreen.addFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT | Intent.FLAG_ACTIVITY_SINGLE_TOP);
            context.startActivity(lockscreen);
        }else if(Intent.ACTION_SCREEN_OFF.equals(action)){
            Intent lockscreen = new Intent(context,LockScreenActivity.class);
            lockscreen.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            context.startActivity(lockscreen);
        }
    }

2.LockScreenActivity锁屏界面

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        this.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD | WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
        setContentView(R.layout.activity_lock_screen);

//        getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE
//                | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN  //状态栏可见,状态栏覆盖布局
//                | View.SYSTEM_UI_FLAG_FULLSCREEN        //状态栏不可见
//                | View.SYSTEM_UI_FLAG_LAYOUT_STABLE
//                | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
//                | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
//                | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION); // hide nav bar

        gif_screen = (ImageView) findViewById(R.id.gif_screen);
        contentLayout = findViewById(R.id.contentLayout);
        gif_screen.setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);
@Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        Glide.with(this).load(R.drawable.screen).asGif().into(gif_screen);
        handler = new StaticHandler(this);
        handler.sendEmptyMessageDelayed(1, 2000);
    }

上面包含设置去掉状态栏和navigationBar来全屏,但是发现怎么设置都不行,原来是要你想要全屏的view单独去设置才行,既:

gif_screen.setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);

这是这次解决问题的关键(gif_screen 是布局中一个展示gif动画的一个view),布局如下:

  <FrameLayout
            android:id="@+id/contentLayout"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:fitsSystemWindows="true">

        <ImageView android:id="@+id/gif_screen"
                   android:layout_width="match_parent"
                   android:layout_height="match_parent"
                   android:scaleType="fitXY"/>
    FrameLayout>

以上纯小弟愚见,还望大神指教。

你可能感兴趣的:(android 关于自定义解锁动画和实现全屏的解决方案)