用Fragment做蒙版来进行一个初始教学提示的效果

时间:2022-11-15 22:02:54

在android 软件第一次使用的时候,一般会在当前的界面上做一个灰色的蒙版,上面有显示的一些提醒性质的教学文字或者图案。

我想的是当前界面上蒙上一个 Fragment 把提示信息也放在Fragment上。

用Fragment做蒙版来进行一个初始教学提示的效果

这是效果图。后面附上demo源码。


具体就是在activity成功启动之后。画出activity的view之后。这个不能在生命周期进行判断。我尝试的是用Handler去不断postDelay查看view是否被画出。即view的width > 0.

然后用代码动态的把这个蒙版Fragment加入到当前的Activity之中。

@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

rootView = findViewById(R.id.root);
final Handler mHandler = new Handler();

//不断延时 看view是否被加载出来。
mHandler.postDelayed(new Runnable()
{
@Override
public void run()
{
if(rootView.getWidth() > 0){
//把蒙版加载到当前的页面上
detailsAssertFragment = new MyJobDetailsAssertFragment();
getFragmentManager().beginTransaction()
.add(R.id.root, detailsAssertFragment)
.commit();
}else {
mHandler.postDelayed(this, 100);
}
}
},300);
}


注意的是R.id.root不是 detailAssertFragment的Id。这个函数的意思是把蒙版detailAssertFragment 加入到id是R.id.root的ViewGroup中。

我发现如果id为R.id.root的view 如果不是FrameLayout就无法添加蒙版成功。

看看蒙版Fragment的代码


	public class MyJobDetailsAssertFragment extends Fragment{

public void MyJobDetailsAssertFragment(){

}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
{
View view = inflater.inflate(R.layout.my_jobs_details_assert, null);
//根据需求设定蒙版遮盖的位置。(这没有遮盖Actionbar,根据要求自行调整)
LayoutParams params= new LayoutParams(rootView.getWidth(),rootView.getHeight());
view.setLayoutParams(params);
view.setOnClickListener(new OnClickListener()
{

@Override
public void onClick(View v)
{
//蒙版点击一下之后消失的处理
getFragmentManager().beginTransaction()
.remove(detailsAssertFragment)
.commit();

showAssert = false;
}
});
showAssert = true;
return view;
}
}

实现的蒙版就已经是半透明的。不用再去设置他的透明度。蒙版的样式就在DetailAssertFragment加载的XML自己设置摆放图案。


Demo源码:http://download.csdn.net/detail/u012565107/7271675