1. 程式人生 > >App半透明指引(第一次進去app的新功能或者版本更新之後使用)

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

方法一.利用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

相關推薦

App透明指引第一進去app功能或者版本更新之後使用

方法一.利用WindowManager(缺點:返回鍵onkeyDown()和dispatchKeyEvent()監聽不到): // private ImageView img; // private WindowManager windowManager; //

Android之ViewPager實現引導頁第一開啟App進入引導頁,第二直接進入APP主頁面...

有的App當你第一次開啟的是和常常會有引導頁來描述一些App資訊(功能,特點),當然也要做驗證,驗證第二次進入不進入引導頁,直接進入App,此部落格藉助ViewPager來實現引導頁, ViewPager類提供了多介面切換的新效果,是谷歌在3.0之後加入的新特性,所以需要引用

ubuntu 只有客人會話登錄第一深刻感受文件權限的威力

也看 宿主機 系統 docker 自己 主機 不能 。。 天突 為了測試docker的掛載權限,把宿主機的/etc/passwd文件掛載到了虛機當中,進入虛機想看下能不能直接對我宿主機上的文件進行操作,把/etc/passwd刪掉了最後十行。。。結果宿主機上的/etc/pa

No module named 'MySQLdb'第一django下建立資料庫遷移,報錯

執行環境:ubuntu14.04 python3.5.2 django1.8.17 第一次django下建立資料庫遷移 執行命令為: python manage.py makemigrations blog 報錯資訊: django.core.exc

軟工實踐學習第一

hibernate 技術 lips html+css 兼容問題 內置 項目 pan tom 最近在上軟工實踐課程,課程需要我們用JAVA以及一系列框架(hibernate,spring等),服務器,數據庫,網頁制作等技術,做出一套前後端相連的客戶信息服務系統。 首先我們

Java學習筆記第一

stdio.h println 標準 ant 方法參數 ann 控制 大小寫 protect 1.簡單的Java語言模板 package inclass1_1; import java.io.*;//導入包(相當於c語言的#include<stdio.h>)

企業訂餐系統第一周總結

實戰 拖延 產品設計 cno 前端學習 data- github上 odi 指點 第一次周總結   實習雖說從上周已開始,但由於定組員、分工、項目選擇等問題,上周的學習進度有點拖延。且因為分工暫時未定上周對需要了解的技術也都只是初步的了解,未進行系統的學習。上周日在劉老師和

爬小說第一編寫爬蟲

prop txt apt quest log res port amp 下載 1 import requests 2 import re 3 html = ‘http://www.jingcaiyuedu.com/book/317834.html‘ 4 respo

軟件工程第一作業第一思考這些問題

經歷 mage 語言 png cnblogs 選擇 info 工程師 -m 無論你從什麽時候開始,重要的是開始後就不要停止。無論你從什麽時候結束,重要的是結束之後就不要悔恨。 你有多自律,就有多自由。 --- ?? 時間在過著的時候不覺得有多快,當你回頭看的時候過了快三年

weekend及反位數第一c++作業

gpo 分享圖片 http inf com 第一次 png clas ima 總結:將endl打成了end1weekend及反位數(第一次c++作業)

ubuntu 只有客人會話登錄第一深刻感受文件權限的威力 

功能 docke 是你 發現 物理 使用 結果 ubuntu 客人會話 為了測試docker的掛載權限,把宿主機的/etc/passwd文件掛載到了虛機當中,進入虛機想看下能不能直接對我宿主機上的文件進行操作,把/etc/passwd刪掉了最後十行。。。結果宿主機上的/et

c指針作業第一

是什麽 array main 根據 使用 預算 高效率 一起 長度 1. 數據類型的本質是什麽? (從編譯器的角度考慮) 數據類型可理解為創建變量的模具:是固定內存大小的別名 數據類型的作用:編譯器預算對象(變量)分配的內存空間大小 註意:數據類型只是模具,編譯器並沒有分

iOS 之 判斷是否是第一開啟app

/** App判斷第一次啟動的方法 */ NSString *key = @"isFirst"; BOOL isFirst = [[NSUserDefaults standardUserDefaults] boolForKey:key]; if (!isFir

javascript 表格增刪改查 排序不會第一寫部落格,求交流哈

  學習JS快1個月了,博主本人上的是培訓的,快考試了,補習下學過的 發下今晚寫的吧。。。 有大神看看我的這種程度,排序事件怎麼弄~~ <!DOCTYPE html><html lang="zh"><head>    <

Android實現過渡動畫、引導頁 Android判斷是否第一啟動App

最近參加比賽聯絡模擬題其中有一道題是: 結合上學期期末實訓整理的資料,加上網上博主的博文參考。再次整理一遍,以供以後參考。 這篇是基於Android自身的控制元件View做出的效果。 文章最後附上利用RXJAVA技術做成的引導頁。 首先是過渡動畫,因為它不論App是否第一次啟動都會顯

掃雷第一不能炸死及展開

C語言小程式————掃雷 學習了一段時間的C語言,寫一個掃雷小遊戲練習一下! 大概思路是這樣的:1.列印地圖,2.埋雷,3,排雷,4.判斷遊戲結果。 首先列印地圖:在這裡用一個二維陣列來表示我們的地圖,在這裡我們建立兩個二維陣列,一個11 * 11用於埋雷和排雷,只有在遊戲結束後才對玩家

王思雨第一作業

一.分支結構 7-1 計算存款利息 (10 分) 本題目要求計算存款利息,計算公式為interest=money×(1+rate)​year​​−money,其中interest為存款到期時的利息(稅前),money是存款金額,year是存期,rate是年利率。 輸入格式:

尋找大富翁25 分絕對幫你AC型第一寫部落格真·原創!

尋找大富翁(25 分) 胡潤研究院的調查顯示,截至2017年底,中國個人資產超過1億元的高淨值人群達15萬人。假設給出N個人的個人資產值,請快速找出資產排前M位的大富翁。 輸入格式: 輸入首先給出兩個正整數N(≤10^​6​​ )和M(≤10),其中N為總人數,M為需要找出的大富翁

2018.10.5 Trie封裝第一寫Trie樹

** 2018.10.5 ** 今天比賽打炸,想了一個不太正確的做法,然後hash不會寫,試著去寫Trie數,還作死地試著寫成資料結構,結構寫了一個上午 程式碼如下:(這是沒有封裝的) #include <iostream> #include <

aandroid 關於如何識別第一進入app

SharedPreferences sp = getSharedPreferences("firstIn",MODE_PRIVATE); SharedPreferences.Editor editor