通过透明Activity来展示新手指引蒙层

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/mChenys/article/details/83578387

上一篇文章介绍了通过Dialog的方式来处理蒙层详情,但是使用的时候还是有局限性,由于dialog是要依附于某个具体的Activity才能弹出显示的,当依附的Activity finish后Dialog也会跟着消失,对于一些特定的需求当依附的Activity消失后仍需要显示蒙层,只有用户点击了蒙层才能消失就不能使用Dialog这种方式了.

解决这个问题,我这里想到的是通过Activity来处理,将Activity设置为全屏的透明效果,再修改其打开和关闭的动画为淡入淡出即可.

下面直接贴代码,布局文件还是一个ImageView

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >

    <ImageView
        android:id="@+id/iv_img"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:src="@drawable/ic_add_wish_suc"/>

</android.support.constraint.ConstraintLayout>

GuideActivity 

package blog.csdn.net.mchenys;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.ImageView;

import blog.csdn.net.mchenys.R;

/**
 * 透明的Activity,用于展示蒙层弹窗新手指引
 * Created by mChenys on 2018/10/31.
 */

public class GuideActivity extends AppCompatActivity implements View.OnClickListener {

    private ImageView mGuideView;
    private int[] imageIds;//多张引导图数组
    private int currPosition;//当前显示第几个引导图


    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //去掉标题
        //requestWindowFeature(Window.FEATURE_NO_TITLE);
        Window window = getWindow();
       //全屏无状态栏
       // window.setFlags(WindowManager.LayoutParams. FLAG_FULLSCREEN , WindowManager.LayoutParams. FLAG_FULLSCREEN);

        //全屏 但是有状态栏
        WindowManager.LayoutParams attrs = window.getAttributes();
        attrs.flags &= ~WindowManager.LayoutParams.FLAG_FULLSCREEN;
        window.setAttributes(attrs);
        setContentView(R.layout.activity_guide);

        this.imageIds = getIntent().getIntArrayExtra("ids");
        mGuideView = findViewById(R.id.iv_img);
        mGuideView.setImageResource(imageIds[0]);//默认显示第一张蒙层
        mGuideView.setOnClickListener(this);

    }

    /**
     * 显示蒙层
     * @param activity
     * @param imageIds 接收一个图片数组,支持多张蒙层依次显示
     */
    public static void show(Activity activity, int[] imageIds) {
        Intent intent = new Intent(activity, GuideActivity.class);
        intent.putExtra("ids", imageIds);
        activity.startActivity(intent);
        //设置activity打开关闭的动画
        activity.overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
    }


    @Override
    public void onClick(View v) {
        if (++currPosition < imageIds.length) {
            //点击切换显示下一个引导图
            mGuideView.setImageResource(imageIds[currPosition]);
        } else {
            //没有下一张时隐藏activity
            finish();
            overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
        }
    }

}

设置GuideActivity的Style样式

 <style name="translucent" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="android:windowBackground">@color/full_transparent</item>
        <item name="android:windowIsTranslucent">true</item>
        <item name="android:windowNoTitle">true</item>
        <item name="android:windowContentOverlay">@null</item>
 </style>

最后在清单文件中给GuideActivity设置主题样式

<activity android:name=".GuideActivity"
           android:theme="@style/translucent"/>

Ok,使用方式仍然还是一行代码搞定

  GuideActivity.show(mContext,new int[]{R.drawable.ic_guide_01, R.drawable.ic_guide_02});

猜你喜欢

转载自blog.csdn.net/mChenys/article/details/83578387