一、原理
当达到某一条件时超过一段时间时,弹出popwindow,大小为全屏,当条件不满足或者用户点击时,让popwindow消失。
二、屏保界面实现
上图中的转圈动画是转圈的,使用的是这位大佬的,详情使用,可以看看https://www.jianshu.com/p/4732d8ae61fe
新建layout文件,如下
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:layout_width="match_parent"
android:background="@color/color_bg"
android:layout_height="match_parent">
<LinearLayout
android:id="@+id/popwindow_linear_id"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical">
<com.example.androidx.widget.HwLoadingView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:hlv_color="@color/colorAccent"
app:hlv_size="200dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</LinearLayout>
</LinearLayout>
三、逻辑实现
定义一个全局变量判断是否正在显示屏保
private boolean isShowScreenProtectPopWindow = false;
逻辑判断
if (不满足出现屏保的条件) {
start = System.currentTimeMillis();
if (isShowScreenProtectPopWindow) {
screenPrtectPopwindow.dismiss();
}
isShowScreenProtectPopWindow = false;
} else {
long end = System.currentTimeMillis();
//如果满足条件超过5s
if (end - start > 5000 && !isShowScreenProtectPopWindow) {
showScreenProtectPopWindow();
}
}
}
弹窗方法
public void showScreenProtectPopWindow() {
View view = getLayoutInflater().inflate(R.layout.screen_protect, null);
DisplayMetrics dm = getResources().getDisplayMetrics();
int w_screen = dm.widthPixels;
int h_screen = dm.heightPixels;
screenPrtectPopwindow = new PopupWindow(view, w_screen, h_screen, true);
screenPrtectPopwindow.setFocusable(false);
//获得屏保界面,设置点击监听
LinearLayout linearLayout = view.findViewById(R.id.popwindow_linear_id);
linearLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
screenPrtectPopwindow.dismiss();
isShowScreenProtectPopWindow = false;
start = System.currentTimeMillis();
}
});
screenPrtectPopwindow.showAtLocation(view, Gravity.BOTTOM, 0, 0);
isShowScreenProtectPopWindow = true;
}