標籤:
歡迎頁面使用的是viewpager,需要適配器。
注意點:
1、判斷是否是第一次進入這個app。
2、歡迎頁面小圓點的邏輯。
實現原理:
首先在activity_welcome放入viewpager和固定四個小圓點的圖片在下方。
viewpager用於存放多張歡迎頁面的圖。
welcome_selectoer用於當在哪一頁對應的小圓點為灰色狀態。即設定成不可點時狀態為灰色。
viewpager的內容為靜態載入進去。
直接貼代碼,代碼都有注釋:
WelcomeActivity.java
package com.app.note.activity;import android.app.Activity;import android.content.Context;import android.content.Intent;import android.content.SharedPreferences;import android.os.Bundle;import android.support.v4.view.ViewPager;import android.util.Log;import android.view.Display;import android.view.View;import com.app.note.R;import com.app.note.adapter.WelcomeAdapter;import android.support.v4.view.ViewPager.OnPageChangeListener;import android.view.Window;import android.view.WindowManager;import android.view.animation.Animation;import android.view.animation.ScaleAnimation;import android.widget.Button;import android.widget.ImageView;import android.widget.LinearLayout;import java.util.ArrayList;import java.util.List;import java.util.logging.Handler;public class WelcomeActivity extends Activity implements OnPageChangeListener,View.OnClickListener { private ViewPager viewPager; private List<View> viewList; private View view1, view2, view3, view4; private ImageView points[];//存放小圓圈數組 private int currentIndex=0;//當前頁面,預設首頁 private Button startButton; private Boolean isFirstIn = false; private SharedPreferences pref; private ImageView doge; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //將圖片設定為全屏 getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); //隱藏標題列 this.requestWindowFeature(Window.FEATURE_NO_TITLE); //判斷是否第一次使用app //第一個參數是檔案名稱,第二參數是操作模式 /* Context.MODE_PRIVATE:為預設操作模式,代表該檔案是私人資料,只能被應用本身訪問,在該模式下,寫入的內容會覆蓋原檔案的內容,如果想把新寫入的內容追加到原檔案中。可以使用Context.MODE_APPEND Context.MODE_APPEND:模式會檢查檔案是否存在,存在就往檔案追加內容,否則就建立新檔案。 Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE用來控制其他應用是否有許可權讀寫該檔案。 MODE_WORLD_READABLE:表示當前檔案可以被其他應用讀取; MODE_WORLD_WRITEABLE:表示當前檔案可以被其他應用寫入。*/ pref = getApplicationContext().getSharedPreferences("FirstOrNo", 0 ); isFirstIn = pref.getBoolean("isFirstIn",true); if(isFirstIn) { setContentView(R.layout.activity_welcome); initViewPager();//初始化ViewPager對象 initPoint();//初始化導航小圓點 changefirst(); }else { Intent intent = new Intent(WelcomeActivity.this, LoginActivity.class); startActivity(intent); finish(); }} private void changefirst(){ pref = getApplicationContext().getSharedPreferences("FirstOrNo",0); SharedPreferences.Editor editor = pref.edit(); editor.putBoolean("isFirstIn", false); editor.commit(); } private void initPoint() { LinearLayout linearLayout=(LinearLayout) findViewById(R.id.ll); points=new ImageView[4]; for(int i=0;i<points.length;i++){ points[i]=(ImageView) linearLayout.getChildAt(i);//遍曆LinearLayout下的所有ImageView子節點 points[i].setEnabled(true);//設定目前狀態為允許(可點,灰色) //設定點擊監聽 points[i].setOnClickListener(this); //額外設定一個標識符,以便點擊小圓點時跳轉對應頁面 points[i].setTag(i);//標識符與圓點順序一致 } currentIndex=0; points[currentIndex].setEnabled(false);//設定首頁為當前頁(小點著色,藍色) startButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(WelcomeActivity.this,LoginActivity.class); startActivity(intent); finish(); } }); } private void initViewPager() { viewPager=(ViewPager) findViewById(R.id.viewpager);//取得ViewPager執行個體 viewList=new ArrayList<View>();//執行個體化list集合 startButton=(Button)findViewById(R.id.startbutton); //用xml靜態添加view view1=View.inflate(WelcomeActivity.this, R.layout.view1, null); view2=View.inflate(WelcomeActivity.this, R.layout.view2, null); view3=View.inflate(WelcomeActivity.this, R.layout.view3, null); view4=View.inflate(WelcomeActivity.this, R.layout.view4, null); viewList.add(view1); viewList.add(view2); viewList.add(view3); viewList.add(view4); //設定適配器 WelcomeAdapter adapter=new WelcomeAdapter(viewList); //綁定適配器 viewPager.setAdapter(adapter); //設定頁卡切換監聽 viewPager.setOnPageChangeListener(this); } @Override public void onPageScrollStateChanged(int arg0) { } @Override public void onPageScrolled(int arg0, float arg1, int arg2) { } @Override public void onPageSelected(int position ) {//當前頁卡被選擇時,position為當前頁數 //當滑動到最後一頁時隱藏點 if(position==3){ for (int i=0;i<=position;i++) { points[i].setVisibility(View.GONE); } startButton.setEnabled(true); startButton.setVisibility(View.VISIBLE); } //當從最後一頁往回滑的時候把點顯示出來 if(currentIndex==3){ for (int i=0;i<=currentIndex;i++) { points[i].setVisibility(View.VISIBLE); } startButton.setEnabled(false); startButton.setVisibility(View.GONE); } points[position].setEnabled(false);//不可點 points[currentIndex].setEnabled(true);//恢複之前頁面狀態 currentIndex=position; } @Override public void onClick(View v) { viewPager.setCurrentItem((int) v.getTag()); }}
適配器WelcomeAdapter.java
package com.app.note.adapter;import android.support.v4.view.PagerAdapter;import android.view.View;import android.view.ViewGroup;import java.util.List;/** * Created by hxdn on 2015/12/29. */public class WelcomeAdapter extends PagerAdapter { private List<View> list; public WelcomeAdapter(List<View> list) {// 利用構造器接收list集合參數 this.list = list; } @Override public int getCount() {// 返回頁卡數量 if (list.size() != 0) { return list.size(); } return 0; } @Override public boolean isViewFromObject(View arg0, Object arg1) {//判斷是否為view對象 return arg0==arg1;//官方demo給出的建議寫法 } @Override public Object instantiateItem(ViewGroup container, int position) {//執行個體化一個頁卡,view對象存放在ViewGroup裡 container.addView(list.get(position)); return list.get(position); } @Override public void destroyItem(ViewGroup container, int position, Object object) {//銷毀一個頁卡 container.removeView(list.get(position)); }}
布局代碼:activity_welcome.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="com.app.note.activity.WelcomeActivity"> <android.support.v4.view.ViewPager android:id="@+id/viewpager" android:layout_width="fill_parent" android:layout_height="fill_parent" /> <LinearLayout android:id="@+id/ll" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true" android:layout_marginBottom="20dp" android:orientation="horizontal" > <ImageView android:id="@+id/iv1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:clickable="true" android:padding="25dp" android:src="@drawable/welcome_selector" /> <ImageView android:id="@+id/iv2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:clickable="true" android:padding="25dp" android:src="@drawable/welcome_selector" /> <ImageView android:id="@+id/iv3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:clickable="true" android:padding="25dp" android:src="@drawable/welcome_selector" /> <ImageView android:id="@+id/iv4" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:clickable="true" android:padding="25dp" android:src="@drawable/welcome_selector" /> </LinearLayout> <Button android:id="@+id/startbutton" android:layout_width="160dp" android:layout_height="50dp" android:text="點擊進入" android:textSize="20dp" android:textColor="@drawable/button_text" style="@style/btn_login" android:background="@drawable/bg_login_btn_qq" android:visibility="gone" android:clickable="false" android:layout_above="@+id/ll" android:layout_centerHorizontal="true" /></RelativeLayout>
四個頁面由雩都差不多隻貼其中一份xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <ImageView android:id="@+id/iv1" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity="center_vertical" android:clickable="true" android:src="@drawable/welcome1" android:scaleType="fitXY"/></LinearLayout>
最重要的選取器的xml:
<?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_enabled="true" android:drawable="@drawable/v_point_pre" ></item> <item android:state_enabled="false" android:drawable="@drawable/v_point_gray" ></item></selector>
Android寒假實訓雲筆記總結——歡迎頁面