亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 網站 > WEB開發 > 正文

APP實用開發——引導界面

2024-04-27 15:11:21
字體:
來源:轉載
供稿:網友

這里寫圖片描述

在App開中首先跟用戶進行交互的事Splash頁面,也就是引導頁面,一般是更新了什么內容,或者有什么樣的活動,怎樣操作等,現在越來越多的應用引導頁面越來越炫彩,所以引導頁面在你app用戶好感度上也有重大的關系。 例如:

這里寫圖片描述

這里寫圖片描述

這里寫圖片描述

案例1

進入頁面之后,根據頁面版本判斷時候更新,彈出更新 對話框,True就進入下載安裝頁面功能,false就跳轉到主頁 布局

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@drawable/splash" > <!-- shadowColor : 陰影的顏色 shadowDx : x軸偏移量 shadowRadius : 偏移的角度 --> <TextView android:id="@+id/splash_tv_version" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="版本:1.0" android:textSize="18sp" android:textColor="#FFFFFF" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true" android:layout_marginBottom="10dp" android:shadowColor="#FF0000" android:shadowDx="1" android:shadowDy="1" android:shadowRadius="2" /></RelativeLayout>public class SplashActivity extends Activity { /**請求路徑**/ PRivate static final String CONNECTURL = "http://10.0.2.2:8080/updateinfo.html"; /**保存的路徑**/ private static final String SAVEURL = "mnt/sdcard/mobliesafe97_2.apk"; private TextView mVersion; private int mNewsVersion; private String mNewsUrl; private String mNewsMsg; private ProgressDialog progressDialog; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //requestWindowFeature(Window.FEATURE_NO_TITLE);//去除標題欄,必須放在setContentView之前執行,而且只在當前的activity生效 setContentView(R.layout.activity_splash); initView(); } /** * 初始化控件 */ private void initView() { mVersion = (TextView) findViewById(R.id.splash_tv_version); //獲取當前應用程序的版本號碼,設置給textview展示 mVersion.setText("版本:"+PackageTool.getVersionName(this)); //延遲兩秒鐘中請求服務器進行更新版本操作 //update(); //延遲多長時間給handler發送消息 //參數1:handler接受到消息執行的操作 //參數2:延遲的事件 /*new Handler().postDelayed(new Runnable() { @Override public void run() { update(); } }, 2000);*/ //延遲多長時間給handler發送消息 new Handler(){ public void handleMessage(android.os.Message msg) { update(); }; }.sendEmptyMessageDelayed(0, 2000);//what:消息的標示;delayMillis:延遲時間 } /** * 更新版本操作 */ private void update() { //1.鏈接服務器,獲取服務器數據,判斷是否有最新版本 //1.1.鏈接服務器,聯網操作,子線程,權限,HttpUrlConnection xutils httpclient volly okhttp //參數:鏈接超時時間 HttpUtils httpUtils = new HttpUtils(2000); //參數1:請求方式 //參數2:請求路徑 //參數3:請求的參數 //參數4:RequestCallBack請求回調 httpUtils.send(HttpMethod.GET, CONNECTURL, null, new RequestCallBack<String>() { //請求成功調用的方法 @Override public void onSuccess(ResponseInfo<String> responseInfo) { //1.2.獲取服務器返回的數據,問題:服務器返回那些數據:code:新版本的版本號 apkurl:新版本的下載地址 msg:新版本的描述信息,描述更新的內容的 //問題:需要知道服務器如何封裝數據 xml json String json = responseInfo.result;//獲取服務器返回的數據 System.out.println(json); //1.2.1.解析獲取到json數據 processJSON(json); } //請求失敗調用的方法 @Override public void onFailure(HttpException arg0, String arg1) { //請求失敗的時候跳轉到首頁 enterHome(); } }); } /** * 1.2.1.解析獲取到json數據 * @param json */ protected void processJSON(String json) { try { JSONObject jsonObject = new JSONObject(json); mNewsVersion = jsonObject.getInt("code"); mNewsUrl = jsonObject.getString("apkurl"); mNewsMsg = jsonObject.getString("msg"); System.out.println("code:"+mNewsVersion+" apkurl:"+mNewsUrl+" msg:"+mNewsMsg); //1.3.判斷是否有最新版本 //判斷服務器中新版本的版本號和當前應用程序的版本號是否一致,一致:沒有最新版本,不一致:有最新版本 if (mNewsVersion == PackageTool.getVersionCode(this)) { //一致:沒有最新版本 //跳轉到首頁 enterHome(); }else{ //不一致:有最新版本 //2.彈出更新版本的對話框 showUpdateDialog(); } } catch (JSONException e) { e.printStackTrace(); } } /** * 跳轉首頁的操作 */ protected void enterHome() { Intent intent = new Intent(this,HomeActivity.class); startActivity(intent); finish();//移除/結束當前的activity,在跳轉成功之后,移除SplashActivity,這樣當從HomActivity點擊返回鍵返回的時候,因為不會找到SplashActivity所以會直接退出應用程序 } /** * 2.創建提醒用戶更新版本的對話框 */ private void showUpdateDialog() { AlertDialog.Builder builder = new Builder(this); //builder.setCancelable(false);//設置對話框是否可以消失,true:可以;false:不可以,屏蔽返回鍵 //設置對話框的標題 builder.setTitle("最新版本:"+mNewsVersion+".0"); //設置圖標 builder.setIcon(R.drawable.ic_launcher); //設置對話框內容 builder.setMessage(mNewsMsg); //監聽對話框消失的時候 builder.setOnCancelListener(new OnCancelListener() { @Override public void onCancel(DialogInterface dialog) { //跳轉到首頁的操作 dialog.dismiss(); enterHome(); } }); //創建按鈕 builder.setPositiveButton("立即更新", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { //隱藏對話框,下載最新版本apk dialog.dismiss(); //3.下載最新版本apk downloadAPK(); } }); builder.setNegativeButton("以后再說", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { //隱藏對話框,跳轉到首頁 dialog.dismiss(); enterHome(); } }); //展示對話框 builder.show(); //builder.create().show();//相同的效果 } /** * 3.下載最新版的apk */ protected void downloadAPK() { //判斷SD卡是否掛載 if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { //3.2.在下載的時候,彈出進度條的對話框 showProgressDialog(); //3.1.從服務器下載,聯網操作 HttpUtils httpUtils = new HttpUtils(); //下載操作 //問題:1.設置下載路徑;2.SD卡權限;3.判斷SD卡是否掛載成功;4.生成一個2.0版本的apk存放到服務器 //參數1:下載的路徑 //參數2:保存的路徑 //參數3:下載回調 httpUtils.download(mNewsUrl, SAVEURL, new RequestCallBack() { @Override public void onSuccess(ResponseInfo arg0) { //下載成功,隱藏進度條對話框 progressDialog.dismiss(); //4.安裝最新版本apk installAPK(); } @Override public void onFailure(HttpException arg0, String arg1) { //下載失敗,隱藏進度條,通知跳轉到首頁 progressDialog.dismiss(); enterHome(); } //更新下載進度 //total : 總進度 //current : 當前的下載進度 //isUploading : 是否支持回調上傳 @Override public void onLoading(long total, long current, boolean isUploading) { super.onLoading(total, current, isUploading); //設置進度條顯示總進度和下載進度 progressDialog.setMax((int) total);//設置總進度 progressDialog.setProgress((int) current);//設置當前下載的進度 } }); }else{ Toast.makeText(getapplicationContext(), "沒有可用的SD卡", 0).show(); } } /** * 3.2.顯示下載進度的對話框 */ private void showProgressDialog() { progressDialog = new ProgressDialog(this); progressDialog.setCancelable(false);//設置對話框是否可以消失,true:可以;false:不可以,屏蔽返回鍵 progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);//設置進度條對話框中進度的樣式 progressDialog.show();//顯示dialog } /** * 4.安裝最新版本apk */ protected void installAPK() { //通過隱式意圖打開系統的安裝界面 /** * <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <data android:scheme="content" />// content:// <data android:scheme="file" /> <data android:mimeType="application/vnd.android.package-archive" /> </intent-filter> */ Intent intent = new Intent(); intent.setAction("android.intent.action.VIEW"); intent.addCategory("android.intent.category.DEFAULT"); //相互覆蓋 /*intent.setData(Uri.fromFile(new File(SAVEURL))); intent.setType("application/vnd.android.package-archive");*/ intent.setDataAndType(Uri.fromFile(new File(SAVEURL)), "application/vnd.android.package-archive"); //startActivity(intent); //當當前的activity退出的時候,回調之前activity的onactivityReulst方法 //requestCode : 請求碼 startActivityForResult(intent, 0); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); //跳轉首頁的操作 enterHome(); }}

案例2

進入應用引導頁面,首先全屏展示一段視頻之后,出現引導圖ViewPager滑動 activity_splash.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="${relativePackage}.${activityClass}" > <!-- 播放視頻資源的控件,特性:根據視頻的寬高決定控件的寬高 --> <com.ui.CustomVideoView android:id="@+id/splash_vv_videoview" android:layout_width="match_parent" android:layout_height="match_parent" /> <Button android:id="@+id/splash_btn_enter" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="進入" android:textColor="#000000" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true" android:layout_marginBottom="30dp" android:onClick="enter" /></RelativeLayout>

activity_guide.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="${relativePackage}.${activityClass}" > <android.support.v4.view.ViewPager android:id="@+id/guide_vp_viewpager" android:layout_width="match_parent" android:layout_height="match_parent" ></android.support.v4.view.ViewPager> <Button android:id="@+id/guide_btn_start" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="開始體驗" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true" android:layout_marginBottom="50dp" android:background="@drawable/selector_guide_btn_bg" android:paddingLeft="10dp" android:paddingRight="10dp" android:textColor="@color/selector_guide_btn_textcolor" android:textSize="14sp" android:visibility="gone" android:onClick="start" /> <RelativeLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true" android:layout_marginBottom="30dp" > <LinearLayout android:id="@+id/guide_ll_dot" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal" > </LinearLayout> <ImageView android:id="@+id/guide_iv_reddot" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/shape_guide_red_dot" /> </RelativeLayout>

SplashActivity 短視頻播放

public class SplashActivity extends Activity { private CustomVideoView mVideoView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_splash); mVideoView = (CustomVideoView) findViewById(R.id.splash_vv_videoview); // 播放視頻 initData(); } /** * 播放視頻 */ private void initData() { // 1.獲取播放資源 // android.resource:// : 獲取工程中的res->raw中的資源 // android.resource://工程的包名/R.raw.kr36 mVideoView.setVideoURI(Uri.parse("android.resource://" + this.getPackageName() + "/" + R.raw.kr36)); //3.監聽視頻是否播放完畢,如果播放完畢,重新開始播放 //監聽視頻是否播放完畢的操作 mVideoView.setOnCompletionListener(new OnCompletionListener() { //當視頻播放完畢調用的方法 @Override public void onCompletion(MediaPlayer mp) { //重新播放 mVideoView.start(); } }); // 2.播放視頻資源 mVideoView.start(); } /** * 進入主頁面按鈕的點擊事件 */ public void enter(View view){ //判斷用戶是否是第一個進入應用,如果是:跳轉引導界面,如果不是:跳轉首頁 //問題:如何判斷用戶是否是第一次進入應用 //獲取用戶是否是第一次進入的標示 //還沒有保存數據,保存數據需要到引導界面的開始體驗按鈕中去做,true:標示第一次進入,false:不是 boolean isfirstenter = SharedPreferencesTool.getBoolean(this, Constants.ISFIRSTENTER, true); if (isfirstenter) { //第一次進入跳轉到引導界面 startActivity(new Intent(this,GuideActivity.class)); }else{ //不是第一次進入跳轉到首頁 startActivity(new Intent(this,HomeActivity.class)); } finish(); }

GuideActivity 圖片引導頁面

public class GuideActivity extends Activity { private ViewPager mViewPager; //資源圖片 private int[] mImageIds = new int[]{R.drawable.guide_1,R.drawable.guide_2,R.drawable.guide_3}; private List<ImageView> imageViews; private Button mStart; private LinearLayout mLLDot; private ImageView mRedDot; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE);//代碼去除標題欄 setContentView(R.layout.activity_guide); //通過第三方框架實現了沉浸式狀態欄操作,必須在setContentView之后執行 StatusBarUtil.setColor(this, Color.YELLOW); initView(); } /** * 初始化控件 */ private void initView() { mViewPager = (ViewPager) findViewById(R.id.guide_vp_viewpager); mStart = (Button) findViewById(R.id.guide_btn_start); mLLDot = (LinearLayout) findViewById(R.id.guide_ll_dot); mRedDot = (ImageView) findViewById(R.id.guide_iv_reddot); imageViews = new ArrayList<ImageView>(); imageViews.clear(); //通過viewpager展示的三張圖片 //先將圖片,放到imageView中,然后再將ImageView放到viewpager中展示 //1.根據圖片的張數,創建相應個數的imageView,并存放,方便viewpager展示 for (int i = 0; i < mImageIds.length; i++) { //創建相應的imageView createImageView(i); //根據圖片的張數,創建點的個數 createDot(); } //2.通過viewpager展示imageView mViewPager.setAdapter(new Myadapter()); //4.實現viewpager的界面切換動畫 //mViewPager.setPageTransformer(true, new ZoomOutPageTransformer()); //設置viewpager切換動畫的, //參數1:如果是第一個到最后一個:true,如果是最后一個到第一個:false //參數2:自定義的動畫效果 //mViewPager.setPageTransformer(true, new DepthPageTransformer()); mViewPager.setPageTransformer(true, new RotatePageTransformer()); //3.實現viewpager的界面切換監聽,監聽當切換到第三個界面的時候,顯示按鈕,否則隱藏按鈕 //跟setOnPageChangeListener效果是一樣 mViewPager.addOnPageChangeListener(new OnPageChangeListener() { //當界面切換完成調用的方法 //position : 切換到的界面的索引 @Override public void onPageSelected(int position) { //判斷如果已經切換到第三個界面了,顯示按鈕,否則隱藏按鈕 if (position == imageViews.size()-1) { mStart.setVisibility(View.VISIBLE); }else{ mStart.setVisibility(View.GONE); } } //viewpager切換界面的時候調用的方法 //position : 條目的索引 //positionOffset : 界面移動的百分比 //positionOffsetPixels : 界面移動的像素 @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { //當viewpager切換界面的時候,實現移動紅色的點 //translationX : 控件平移的距離,從右往左滑動從0開始慢慢變大,如果切換完成,百分比瞬間歸0,重新從0開始,進行下一次的百分比計算 System.out.println(positionOffset+""); //紅色點的移動距離 = 移動的百分比*20 // 0 * 20 = 0 1*20=20 //mRedDot.setTranslationX(positionOffset * 20 + position * 20); mRedDot.setTranslationX((positionOffset+ position) * 20); } //當切換狀態改變的時候調用的方法 @Override public void onPageScrollStateChanged(int state) { // TODO Auto-generated method stub } }); } /** * 創建圖片對應的imageView * i:表示創建第幾個圖片對應的imageView */ private void createImageView(int i) { ImageView imageView = new ImageView(this); imageView.setBackgroundResource(mImageIds[i]); imageViews.add(imageView); } /** * 根據圖片的張數創建點 */ private void createDot() { View view = new View(this); view.setBackgroundResource(R.drawable.shape_guide_dot); LinearLayout.LayoutParams params = new LayoutParams(10, 10); params.rightMargin=10; view.setLayoutParams(params);//將屬性設置給view對象,使用屬性生效 //添加linearlayout中展示 mLLDot.addView(view); } /**ViewPager的adapter**/ private class Myadapter extends PagerAdapter{ //設置條目個數 @Override public int getCount() { return imageViews.size(); } //view:viewpager的頁面對象 //object:instantiateItem返回對象 //判斷是否可以加載顯示界面 @Override public boolean isViewFromObject(View view, Object object) { return view == object; } //添加顯示viewpager的界面 @Override public Object instantiateItem(ViewGroup container, int position) { //根據條目的索引,獲取條目對應的imageview ImageView imageView = imageViews.get(position); //將imageView添加到viewpager中顯示 container.addView(imageView); //添加什么View對象,返回什么view對象 return imageView; } //刪除條目 //object : instantiateItem的返回值 @Override public void destroyItem(ViewGroup container, int position, Object object) { //super.destroyItem(container, position, object);拋異常的 container.removeView((View) object); } } /** * 開始體驗按鈕的點擊事件 */ public void start(View view){ //保存是否是第一次進入的標示 SharedPreferencesTool.saveBoolean(this, Constants.ISFIRSTENTER, false); //跳轉的首頁 startActivity(new Intent(this,HomeActivity.class)); //移除引導界面,避免在首頁點擊返回鍵,再回退到引導界面 finish(); }}

案例3

這里寫圖片描述

1. 要使用ViewPager,必須要創建 PagerAdapter。 這里創建一個 ViewPagerAdapter來繼承PagerAdapter

public class ViewPagerAdapter extends PagerAdapter{ private List<View> views; // 我們引導頁的list private Context context; // 上下文 public ViewPagerAdapter(List<View> views, Context context) { this.views = views; this.context = context; } // 移除一個view @Override public void destroyItem(ViewGroup container, int position, Object object) { //super.destroyItem(container, position, object); container.removeView(views.get(position)); } // 加載一個view @Override public Object instantiateItem(ViewGroup container, int position) { container.addView(views.get(position)); return views.get(position); } @Override public int getCount() { // 必寫的方法 返回當前views的數量 return this.views.size(); } @Override public boolean isViewFromObject(View view, Object object) { //必寫的方法 判斷當前的view是否是我們需要的對象 return (view == object); }}

2. 創建我們引導頁的視圖

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <!--filpInterval 設置View之間切換的時間間隔 (在androidStudio上面跑不起來 可以不需要) persistentDrawingCache 持久化繪畫緩存 --> <android.support.v4.view.ViewPager android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#00000000" android:persistentDrawingCache="animation" android:id="@+id/viewpage" > </android.support.v4.view.ViewPager></RelativeLayout>

3. 創建引導頁的圖片視圖 one.xml和two.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/imageView" android:background="@drawable/guide1"/></LinearLayout><?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/imageView2" android:background="@drawable/guide2"/></LinearLayout>

4. 在我們的activity中使用

public class Guide extends Activity{ private ViewPager vp; private ViewPagerAdapter vpAdapter; private List<View> views; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.guide);//加載guide.xml 視圖 this.initView(); System.out.println("onCreate"); } // 初始化view public void initView() { /* * Inflater英文意思是膨脹,在Android中應該是擴展的意思吧。 LayoutInflater的作用類似于 findViewById(), 不同點是LayoutInflater是用來找layout文件夾下的xml布局文件,并且實例化! 而 findViewById()是找具體某一個xml下的具體 widget控件(如:Button,TextView等)。 * * */ LayoutInflater inflater = LayoutInflater.from(this); views = new ArrayList<View>(); views.add(inflater.inflate(R.layout.one, null)); // 加載視圖1 views.add(inflater.inflate(R.layout.two, null)); // 加載視圖2 vpAdapter = new ViewPagerAdapter(views, this); // 創建我們的 adapter vp = (ViewPager) findViewById(R.id.viewpage); vp.setAdapter(vpAdapter); // viewpage綁定 adapter }}

5. 運行就有引導頁的兩張圖片,可以來回切換。 6. 添加導航點 ① 在原來的guide.xml中添加

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <!--filpInterval 設置View之間切換的時間間隔 (在androidStudio上面跑不起來 可以不需要) persistentDrawingCache 持久化繪畫緩存 --> <android.support.v4.view.ViewPager android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#00000000" android:persistentDrawingCache="animation" android:id="@+id/viewpage" android:layout_alignParentTop="true" android:layout_alignParentStart="true"> </android.support.v4.view.ViewPager> <!-- 新添加的 放導航點用的 --> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:gravity="center_horizontal" android:layout_marginBottom="19dp" android:layout_alignParentBottom="true" android:layout_alignParentStart="true"> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/iv1" android:src="@drawable/login_selectd"/> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/iv2" android:src="@drawable/login_point"/> </LinearLayout></RelativeLayout>

② 在原來的代碼的基礎上添加新的代碼

public class Guide extends Activity implements ViewPager.OnPageChangeListener{ // 實現監聽接口 private ViewPager vp; private ViewPagerAdapter vpAdapter; private List<View> views; // 導航點 private ImageView[] dots; private int[] ids = {R.id.iv1, R.id.iv2}; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.guide);//加載guide.xml 視圖 this.initView(); this.initDots(); System.out.println("onCreate"); } // 初始化view public void initView() { /* * Inflater英文意思是膨脹,在Android中應該是擴展的意思吧。 LayoutInflater的作用類似于 findViewById(), 不同點是LayoutInflater是用來找layout文件夾下的xml布局文件,并且實例化! 而 findViewById()是找具體某一個xml下的具體 widget控件(如:Button,TextView等)。 * * */ LayoutInflater inflater = LayoutInflater.from(this); views = new ArrayList<View>(); views.add(inflater.inflate(R.layout.one, null)); // 加載視圖1 views.add(inflater.inflate(R.layout.two, null)); // 加載視圖2 vpAdapter = new ViewPagerAdapter(views, this); // 創建我們的 adapter vp = (ViewPager) findViewById(R.id.viewpage); vp.setAdapter(vpAdapter); // viewpage綁定 adapter vp.setOnPageChangeListener(this); // ViewPager 監聽自己 } private void initDots() { // 初始化 我們的導航點 this.dots = new ImageView[this.views.size()]; for (int i=0; i<this.views.size(); i++) { dots[i] = (ImageView) this.findViewById(this.ids[i]); } } // 監聽 頁面滑動的方法 @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { for (int i=0; i<this.ids.length; i++) { if (position == i) { this.dots[i].setImageResource(R.drawable.login_selectd); // 變成選中的 } else { this.dots[i].setImageResource(R.drawable.login_point); //變成不選中的 } } } //選中 @Override public void onPageSelected(int position) { } // 滑動狀態改變 @Override public void onPageScrollStateChanged(int state) { }}

這里寫圖片描述 7. 添加進入按鈕

① 在two.xml中添加一個按鈕

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/imageView2" android:background="@drawable/guide2" android:layout_alignParentTop="true" android:layout_alignParentEnd="true" /> <!-- 添加進去按鈕 --> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:orientation="horizontal" android:gravity="center" > <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="進入" android:id="@+id/btn_start" /> </LinearLayout></RelativeLayout>

② 監聽按鈕 進去MainActivity

// 進入按鈕 this.bt = (Button) views.get(1).findViewById(R.id.btn_start); this.bt.setOnClickListener(new View.OnClickListener() { // 監聽 @Override public void onClick(View v) { Intent i = new Intent(Guide.this, MainActivity.class); // 進去MainActivity startActivity(i); finish(); //銷毀當前的Activity } });
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久久久久成人精品| 国产日韩欧美日韩大片| 久久久久久尹人网香蕉| 欧美激情精品久久久久久免费印度| 夜夜狂射影院欧美极品| 成人久久一区二区| 丝袜美腿精品国产二区| 91极品女神在线| 国产精品国产亚洲伊人久久| 色综合天天狠天天透天天伊人| 成人性生交大片免费看小说| 91午夜理伦私人影院| 亚洲国产日韩欧美综合久久| 欧美性色19p| 欧美日韩福利视频| 91精品国产色综合久久不卡98| 欧美性猛交xxxx免费看漫画| 日韩精品在线观看网站| 日韩电影中文字幕在线| 亚洲成人在线视频播放| 精品欧美国产一区二区三区| 少妇久久久久久| 欧美亚洲另类在线| 亚洲精品久久7777777| 日本韩国在线不卡| 欧美男插女视频| 日韩欧美在线视频日韩欧美在线视频| 亚洲天堂av高清| 成人午夜一级二级三级| 97免费中文视频在线观看| 国产精品国模在线| 68精品久久久久久欧美| 久久青草精品视频免费观看| 亚洲国产天堂网精品网站| 中文字幕精品在线| 91精品在线看| 欧美巨猛xxxx猛交黑人97人| 亚洲区在线播放| 亚洲欧美制服丝袜| 夜夜嗨av色一区二区不卡| 疯狂做受xxxx欧美肥白少妇| 91日本视频在线| 精品国产欧美一区二区五十路| 亚洲精品久久久久久久久| 亚洲自拍av在线| 国产专区精品视频| 欧美性猛交xxxx免费看久久久| 国产日韩欧美综合| 国产精品成av人在线视午夜片| 亚洲精品一区二区网址| 亚洲精品视频二区| 高清欧美电影在线| 亚洲精品成人久久| 精品日韩视频在线观看| 国产精品久久久999| 欧美一级大片在线观看| 日韩av在线资源| 国产精品福利在线观看| 日韩高清免费观看| 亚洲人精选亚洲人成在线| 国产成人综合久久| 欧美老女人在线视频| 精品久久久久久久久久久久| 久久久久日韩精品久久久男男| 欧美日韩国产一区二区| 精品久久久久久久久国产字幕| 欧美一级大片在线免费观看| 日韩www在线| 在线亚洲欧美视频| 久久久亚洲网站| 亚洲无线码在线一区观看| 欧美亚洲国产精品| 国内精品免费午夜毛片| 精品欧美aⅴ在线网站| 在线不卡国产精品| 欧美福利视频网站| 欧美国产日韩视频| 欧美极品美女电影一区| 精品久久久久久国产91| 日韩精品在线视频观看| 中文字幕成人在线| 欧美精品在线视频观看| 国产精品普通话| 欧美激情日韩图片| 国产精品久久97| 国产精品福利在线| 欧美性理论片在线观看片免费| 国产精品免费视频久久久| 成人妇女淫片aaaa视频| 97超级碰在线看视频免费在线看| 韩剧1988在线观看免费完整版| 欧美专区在线观看| 日韩精品视频在线免费观看| 国产一区二中文字幕在线看| 中文字幕一区日韩电影| 美日韩精品免费视频| 日本午夜精品理论片a级appf发布| 91精品国产91久久久久久吃药| 欧美激情视频一区二区三区不卡| 欧美日韩一区二区在线| 久久人人97超碰精品888| 亚洲精品综合精品自拍| 亚洲永久免费观看| 日韩av在线不卡| 欧美日韩爱爱视频| 国产精品久久97| 国产自摸综合网| 欧美激情中文字幕乱码免费| 欧美综合第一页| 欧美在线国产精品| 狠狠色噜噜狠狠狠狠97| 97av在线视频免费播放| 日本aⅴ大伊香蕉精品视频| 亚洲欧美激情四射在线日| 一本色道久久88亚洲综合88| 亚洲精品美女久久久| 欧美区在线播放| 久久影院中文字幕| 亚洲精品99久久久久| 国产精品免费视频xxxx| 亚洲毛茸茸少妇高潮呻吟| 亚洲激情在线视频| 亚洲最大的av网站| 国产噜噜噜噜久久久久久久久| 欧美成人三级视频网站| 九九九久久久久久| 992tv成人免费影院| 亚洲三级 欧美三级| 欧美不卡视频一区发布| 97涩涩爰在线观看亚洲| 91精品国产99久久久久久| 中文字幕综合在线| 久久久精品免费| 成人羞羞国产免费| 成人久久久久爱| 91沈先生作品| 国产精品99一区| 欧美日韩免费观看中文| 国产亚洲精品久久久久久| 亚洲性av网站| 欧美视频不卡中文| 欧美激情性做爰免费视频| 国产成人一区二区三区| 成人午夜一级二级三级| 欧美成人精品在线播放| 国产亚洲视频在线| 国产视频在线一区二区| 91国内揄拍国内精品对白| 日韩av在线免费观看| 国产精品电影网站| 亚洲精品二三区| 亚洲欧美另类国产| 国产欧美精品在线播放| 91tv亚洲精品香蕉国产一区7ujn| 成人啪啪免费看| 亚洲人成网7777777国产| 26uuu另类亚洲欧美日本一| 日本一区二三区好的精华液| 日韩精品中文字幕久久臀| 国产综合在线视频| 美女黄色丝袜一区| 欧美大片网站在线观看| 国产精品人成电影| 大量国产精品视频|