您的位置:首页 > 移动开发

App半透明指引(第一次进去app的新功能或者版本更新之后使用)

2016-02-24 17:44 344 查看
方法一.利用WindowManager(缺点:返回键onkeyDown()和dispatchKeyEvent()监听不到):

// private ImageView img;
// private WindowManager windowManager;

// windowManager = getWindowManager();
//
// // 动态初始化图层
// img = new ImageView(this);
// img.setLayoutParams(new LayoutParams(
// android.view.ViewGroup.LayoutParams.MATCH_PARENT,
// android.view.ViewGroup.LayoutParams.MATCH_PARENT));
// img.setScaleType(ScaleType.FIT_XY);
// img.setImageResource(R.drawable.aa);
//
// // 设置LayoutParams参数
// LayoutParams params = new WindowManager.LayoutParams();
// // 设置显示的类型,TYPE_PHONE指的是来电话的时候会被覆盖,其他时候会在最前端,显示位置在stateBar下面,其他更多的值请查阅文档
// params.type = WindowManager.LayoutParams.TYPE_PHONE;
// // 设置显示格式
// params.format = PixelFormat.RGBA_8888;
// // 设置对齐方式
// params.gravity = Gravity.LEFT | Gravity.TOP;
// // 设置宽高
// params.width = MobileApplication.dm.widthPixels;
// params.height = MobileApplication.dm.heightPixels;
//
// // 添加到当前的窗口上
// windowManager.addView(img, params);
//
// // 点击图层之后,将图层移除
// img.setOnClickListener(new OnClickListener() {
//
// @Override
// public void onClick(View arg0) {
// windowManager.removeView(img);
// }
// });

方法二(缺点:返回键onkeyDown()和dispatchKeyEvent()可以监听到)--使用单个:

android:id="@+id/posting_id"
private LinearLayout posting_id;

posting_id=(LinearLayout) findViewById(R.id.posting_id);

private LinearLayout posting_id;
private FrameLayout frameLayout;
private ImageView guideImage;
//	private boolean isRemove=false;

ViewParent viewParent=posting_id.getParent();
if(viewParent instanceof FrameLayout){
frameLayout = (FrameLayout)viewParent;
guideImage = new ImageView(this);
FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(
ViewGroup.LayoutParams.FILL_PARENT,
ViewGroup.LayoutParams.FILL_PARENT);
guideImage.setLayoutParams(params);
guideImage.setScaleType(ScaleType.FIT_XY);
guideImage.setImageResource(R.drawable.aa);
frameLayout.addView(guideImage);//添加引导图片
guideImage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
frameLayout.removeView(guideImage);
}
});
}
}


方法三PopupWindow (缺点:整个activity全部加载完成之后,PopupWindow才可以覆盖上,页面要延迟一些时间,才可以使用PopupWindow):

// private PopupWindow mPopWin;
// private LinearLayout layouts;

// layouts = (LinearLayout) LayoutInflater.from(PostingActivity.this).inflate(R.layout.posting_fade, null);
// mPopWin = new PopupWindow(layouts, MobileApplication.dm.widthPixels, MobileApplication.dm.heightPixels, true);
// mPopWin.setBackgroundDrawable(new BitmapDrawable());
// mPopWin.showAsDropDown(posting_home_txt_select, 5, 1);
// mPopWin.update();
// mPopWin.setOutsideTouchable(true);------------------------------------------------------------------------------------
/**
* 获取当前版本
*/
public void getCurVersion(){
try {
myversion = getPackageManager().getPackageInfo(getPackageName(), 0).versionName;
my_version.setText("版本"+myversion);
} catch (NameNotFoundException e) {
e.printStackTrace();
}
}------------------------------------------------------------------------------------

dispatchKeyEven()t防止二次执行:
防止二次执行:
// @Override
// public boolean dispatchKeyEvent(KeyEvent event) {
// System.out.println("9--------2:"+"0");
// if (event.getKeyCode() == KeyEvent.KEYCODE_BACK && event.getAction() != KeyEvent.ACTION_UP) {
// System.out.println("9--------2:"+"1");
// if(isRemove==false){
// isRemove=true;
// System.out.println("9--------2:"+"2");
// frameLayout.removeView(guideImage);
// }else{
// System.out.println("9--------2:"+"3");
// finish();
//
// }
// return true;
// }
// return super.dispatchKeyEvent(event);
// }

-------------------------------

动画:
//                	Animation anim = AnimationUtils.loadAnimation(PostingActivity.this,R.anim.fade_out);
//     				Animation anim = AnimationUtils.loadAnimation(PostingActivity.this,R.anim.fade_in);
//     				((View) viewParent).startAnimation(anim);


-------------------------------

获取高度:
//	public static int getScreenHeight(Context context) {
//		return ((WindowManager) context
//				.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay()
//				.getHeight();
//	}
-------------------------------
返回判断:

@Override
public boolean dispatchKeyEvent(KeyEvent event) {
if (event.getKeyCode() == KeyEvent.KEYCODE_BACK && event.getAction() != KeyEvent.ACTION_UP) {
if(isRemove==false){
if(guideImage!=null){
frameLayout.removeView(guideImage);
isRemove=true;
}
}else{
if ((System.currentTimeMillis() - mExitTime) > 2000) { // 如果两次按键时间间隔大于2000毫秒,则不退出
Toast.makeText(this, "再按一次退出程序", Toast.LENGTH_SHORT).show();
mExitTime = System.currentTimeMillis(); // 更新mExitTime
} else { // 否则退出程序
EMChatManager.getInstance().logout(new EMCallBack() {
@Override
public void onSuccess() {
finish();
}

@Override
public void onProgress(int progress, String status) {

}

@Override
public void onError(int code, String message) {

}
});
}
}
return true;
}


-------------------------------
以上有个问题就是,如果到指定控件,这个控件要全透明,其他的地方是半透明,而这个位置不好确定,还要连续的指引出来:

使用序列Sqquence,可以参考博客如下,还有可运行的小案例:

具体博客:http://blog.csdn.net/ysh06201418/article/details/49615899
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息