“业务需求是激发程序员潜能的第一外界动力”。据说过几天要做在每次版本更新后,第一次使用时引导用户添加了那些新功能。这个实现方法很多,上班无聊封装一个工具类。
具体ShadeGuideWindowUtils.java如下:
/**
* Created by rongtao on 2016/5/11.
* 在第一次使用时显示阴影引导的工具类
*/
public class ShadeGuideWindowUtils {
private final static float DEFAULT_ALPHA=0.5f;//默认的阴影透明度
/**
*
* @param activity 显示阴影的界面Activity,如果是 fragment用getActivity()
* @param root Activity布局的根布局,建议用FrameLayout
* @param layoutid 阴影引导的布局文件的Id
* @param alpha 显示阴影时界面的透明度
*/
public static void showShadeGuide(final Activity activity, final ViewGroup root,int layoutid,float alpha){
if (activity==null||root==null){
//自定义异常
throw new RuntimeException("Activity Or RootLayoutParams is null!");
}
//加在阴影布局
final View view = activity.getLayoutInflater().inflate(layoutid, null);
//获取window的布局参数
final WindowManager.LayoutParams lp = activity.getWindow().getAttributes();
final Window window = activity.getWindow();
if(alpha>=0&&alpha<=1.0f){
lp.alpha =alpha;
}else{
lp.alpha=DEFAULT_ALPHA;
}
//设置窗口透明度
window.setAttributes(lp);
//添加阴影效果
root.addView(view);
//取消阴影效果
view.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
root.removeView(view);
lp.alpha =1.0f;
window.setAttributes(lp);
return false;
}
});
}
}
具体用法:
private void init() {
FrameLayout root = (FrameLayout) findViewById(R.id.fl_root);
ShadeGuideWindowUtils.showShadeGuide(this,root,R.layout.popup_window,0.4f);
}
布局文件自己搞,布局文件的根布局建议用FrameLayout,阴影界面的根布局就一个ImageView。大概提供一个思路,感觉用着不爽的可以自己修改扩充。