Android - 如何制作一个真正的假锁屏

时间:2017-03-22 20:57:12

标签: android lockscreen

我开发了一个Android应用程序,我需要创建一个“假锁屏”。我解释一下。

应用程序应该显示黑屏,就像屏幕被锁定一样(简单),然后我想在用户点击锁定/解锁手机按钮时显示假锁屏。

我的问题是,当我使用当前壁纸设置应用程序背景时(使用壁纸管理器),背景不会被“裁剪”。背景图像适合屏幕,而不是像手机的“主屏幕”一样,适合桌面数量。

我尝试使用getBuiltInDrawable(FLAG_LOCK),但它仅在API 24中可用,当我尝试时,结果不是我期望的结果= /

是否有人对此问题有所了解?

提前谢谢你。 巴普蒂斯特。

1 个答案:

答案 0 :(得分:0)

好的,所以你需要

1)使用没有操作栏的FullScreen主题创建活动,因此它看起来不像应用程序。为此,您将在styles.xml中创建一个样式并将其应用于manifest.xml

Full Screen Theme for AppCompat

2)对于背景图片,请使用ImageViewImageViews开箱即用的scaleType属性允许您选择不同的模式:FIT,Center Crop等...

https://developer.android.com/reference/android/widget/ImageView.ScaleType.html

3)创建其余逻辑以进入Pin。并显示您不同的模拟图像。有一个很好的组件非常适合你的“项目”,它被称为ViewFlipper,基本上可以让你把所有图像放在里面并选择要显示的图像。您的根布局看起来或多或少会像这样:

<ViewFlipper 
   android:id="@+id/flipper"
   android:layout_width="match_parent"
   android:layout_height="match_parent">

   <!-- page 0: the lock screen mock -->
   <FrameLayout
      android:layout_width="match_parent"
      android:layout_height="match_parent"/>

      <ImageView
          android:src="@drawable/mock_lock_screen"
          android:scaleType="centerCrop"
          android:layout_width="match_parent"
          android:layout_height="match_parent"/>

       <EditText
          android:id="@+id/pinCode"
          android:layout_width="80dp"
          android:layout_height="wrap_content"
          android:layout_gravity="center"
          android:hint="PIN CODE" />
   </FrameLayout>

   <!-- page 1: chrome screen mock-->
   <ImageView
      android:src="@drawable/mock_chrome"
      android:scaleType="centerCrop"
      android:layout_width="match_parent"
      android:layout_height="match_parent"/>

   <!-- page 2: wikipedia screen mock-->
   <ImageView
      android:src="@drawable/mock_wiki"
      android:scaleType="centerCrop"
      android:layout_width="match_parent"
      android:layout_height="match_parent"/>

    .
    .
</ViewFlipper>

然后在活动中,您可以显示锁定屏幕和任何模拟页面:

ViewFlipper mFlipper;

@Override
public void onCreate(Bundle savedInstanceState) {
   .
   .
   mFlipper = (ViewFlipper)findViewById(R.id.flipper);
  .
  .
  .
}

并更改显示的屏幕

  mFlipper.setDisplayedChild(0); // will show lock screen
  mFlipper.setDisplayedChild(1); // will show chrome mock
  mFlipper.setDisplayedChild(2); // will show wikipedia mock
希望你明白这个想法!快乐的编码。