作者: 夏至,歡迎轉載,也請保留這段申明,謝謝。
www.jianshu.com/p/dfc188f13…
今天講一個比較簡單的東西,那就是每一個app在第一次啟動的時候,都會出現的引導介面;剛開始的時候我還想自定義下面的一些小圓點;然後網上查了一下,發現有更簡單的方式,簡直簡單得令人髮指。好吧,廢話不多說,先上效果圖:
圖片拿慕課網的,viewpager也新增了官網的動畫效果,最後一頁用一個 顯示一個Button,最後點選跳轉到主介面。整體上還是沒啥難點,下面是分析:
##1、延時啟動檢測
這點沒啥好說的,直接一個定時器即可,至於是否為第一次啟動,則用sharedpreference來檢測:
Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
SharedPreferences preferences = getSharedPreferences("guide",MODE_PRIVATE);
boolean isfirst = preferences.getBoolean("isfirst",false);
if (!isfirst) {
startActivity(new Intent(SplseActivity.this, GuideActivity.class));
SharedPreferences.Editor editor =
getSharedPreferences("guide",MODE_PRIVATE).edit();
editor.putBoolean("isfirst",true);
editor.commit();
finish();
}else{
startActivity(new Intent(SplseActivity.this,MainActivity.class));
finish();
}
}
},2000);複製程式碼
2、圓點的繪製
上面圓點的繪製,其實很簡單,我們的思路就是viewpager滑動到哪一個介面,就讓它繪製成紅色就可以了,所以,我們完全可以用shade屬性和selector屬性幫我們繪製完成。圓點如下:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<solid android:color="@color/colorAccent"/>
<size android:height="10dp"
android:width="10dp"/>
</shape>複製程式碼
效果如下:
然後,我們只要新建多一個,把顏色改成白色,然後用 selector 就可以改變不同的顏色了:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/point_select" android:state_selected="true"/>
<item android:drawable="@drawable/point_normal" android:state_selected="false"/>
</selector>複製程式碼
至於多少個圓點,我們用動態的方式,即圖片有多少張,這裡就有多少個點;我們就可以使用setlayoutparmas的方式,設定我們的檢視了。
首先看開機引導的主檢視:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#2233"
tools:context="com.rachel.guildproject.MainActivity">
<android.support.v4.view.ViewPager
android:id="@+id/guide_viewpager"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
<Button
android:id="@+id/guide_start"
android:layout_width="200dp"
android:layout_height="50dp"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:background="@drawable/btn_background"
android:text="開始體驗"
android:textColor="#ffffff"
android:textSize="20sp"
android:textStyle="bold"
android:layout_marginBottom="20dp"
android:visibility="gone"/>
<LinearLayout
android:id="@+id/point_ly"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="40dp"
android:orientation="horizontal"/>
</RelativeLayout>複製程式碼
viewpager 就不用講了,button 則是我們最後一頁的按鈕,而 LinearLayout 則是我們的圓點繪製的,可以看到這裡我把它設定成底部,這樣,我們就可以在程式碼中去填充這些圓點了:
private void initpoint() {
//獲取layout
mLayout = (LinearLayout) findViewById(R.id.point_ly);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
//設定每一個view即圓點的對左的偏移量
params.setMargins(15,0,0,0);
//根據圖片多少來確定個數
for (int i = 0; i < imgRes.length; i++) {
ImageView imageView = new ImageView(this);
imageView.setImageResource(R.drawable.dot_select);
imageView.setLayoutParams(params); //把上面的控制元件屬性設定到LinearLayout中
if (i == 0){ //預設第一張為紅色圓點
imageView.setSelected(true);
}else{
imageView.setSelected(false);
}
//把圓點這個子檢視匯入我們的LinearLayout裡面
mLayout.addView(imageView);
mImageViews.add(imageView);//跟著viewpager變換顏色
}
}複製程式碼
效果如下:
哪,是不是很簡單啊,然後我們只要把viewpager填充進去就可以了,viewpager就老生常談了,我這裡就不講了,我們只要在頁面滑動完成之後,改變圓點的顏色就可以了,如下所示:
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
//滑動時改變圓點的狀態
for (int i = 0; i < mImageViews.size(); i++) {
if (i == position){
mImageViews.get(i).setSelected(true);
}else{
mImageViews.get(i).setSelected(false);
}
}
//當為最後一個時,顯示button,並隱藏圓點
if (position == mImageViews.size() -1){
mLayout.setVisibility(View.GONE);
mButton.setVisibility(View.VISIBLE);
ObjectAnimator animator = ObjectAnimator.ofFloat(mButton,"alpha",0f,1f);
animator.setDuration(1000);
animator.start();
}else{
mLayout.setVisibility(View.VISIBLE);
mButton.setVisibility(View.GONE);
}
}複製程式碼
這樣就可以了,好像也沒啥好講的,權當記錄吧,另外,學會使用 shade 和 selector 等一些相關屬性,也可以讓你的UI變得非常好看。
最後附上 demo地址: git.oschina.net/zhengshaoru…