最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android實(shí)現(xiàn)漸變啟動(dòng)頁(yè)和帶有指示器的引導(dǎo)頁(yè)

 更新時(shí)間:2021年04月22日 09:40:30   作者:Fantasychong丶  
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)漸變啟動(dòng)頁(yè)和帶有指示器的引導(dǎo)頁(yè),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

引導(dǎo)頁(yè)是項(xiàng)目中很常見(jiàn)的東西了,在用戶(hù)下載app首次打開(kāi)后,會(huì)進(jìn)入引導(dǎo)界面,通常都是三四張圖片說(shuō)明,簡(jiǎn)單介紹下app的功能和使用方法之類(lèi),最后一張有著“進(jìn)入應(yīng)用”的按鈕,點(diǎn)擊即可進(jìn)入主頁(yè),之后打開(kāi)app則不會(huì)再次進(jìn)入啟動(dòng)頁(yè),話(huà)不多說(shuō),以下做個(gè)歸納。

效果圖:

實(shí)現(xiàn)步驟:

1.首先我們做個(gè)有漸變動(dòng)畫(huà)的啟動(dòng)頁(yè)面SplashActivity

在onCreate里設(shè)置核心方法setAlphaAnimation()

public void setAlphaAnimation(){

   //生成AlphaAnimation的對(duì)象

   AlphaAnimation animation= new AlphaAnimation(this);

   //設(shè)置動(dòng)畫(huà)的持續(xù)時(shí)間

   animation.setDuration(3000);

   //給要漸變的控件設(shè)置動(dòng)畫(huà),比如說(shuō)imageview,textview,linearLayout之類(lèi)的

   ll.setAnimation(animation);

   //設(shè)置動(dòng)畫(huà)監(jiān)聽(tīng),結(jié)束時(shí)跳轉(zhuǎn)到下一個(gè)頁(yè)面(首次打開(kāi)就是引導(dǎo)頁(yè)面,反之就是主頁(yè))

   animation.setAnimationListener(new Animation.AnimationListener(){

      public void onAnimationStart(Animation animation){ }

      public void onAnimationEnd(Animation animation){ 

         jump2Activity();      

      }

      public void onAnimationRepeat(Animation animation){ }

   });

}

分析一下這個(gè)跳轉(zhuǎn)方法jump2Activity(),我們這里使用SharedPeference來(lái)判斷應(yīng)用是否首次打開(kāi),設(shè)變量isFirst默認(rèn)值為0,進(jìn)入引導(dǎo)頁(yè)跳轉(zhuǎn)到主頁(yè)時(shí)再把這個(gè)值設(shè)為1,這樣,每次跳轉(zhuǎn)時(shí)判斷isFirst的值,如果仍是默認(rèn)值0則為首次打開(kāi)進(jìn)入引導(dǎo)頁(yè),反之進(jìn)入主頁(yè)。

public void jump2Activity(){

  SharedPreferences sharedPreference= getSharedPreferences("data", MODE_PRIVATE);

  String isFirst= sharedPreferences.getString("isFirst", "0");

  Intent intent= new Intent();  

  if("0".equals(isFirst)){

    intent.setClass(this, GuideActivity.class);

  }else{

    intent.setClass(this. MainActivity.class);

  }

  startActivity(intent);

  finish();

}

2.接下來(lái)我們做引導(dǎo)頁(yè)面

引導(dǎo)頁(yè)面是由三個(gè)控件組成,Viewpager,圓點(diǎn)指示器的線(xiàn)性布局linearlayout, 最后一頁(yè)的 “進(jìn)入應(yīng)用” 按鈕。

<?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">
 
 <android.support.v4.view.ViewPager
  android:id="@+id/guide_vp"
  android:layout_width="match_parent"
  android:layout_height="match_parent" />
 
 <LinearLayout
  android:id="@+id/guide_ll"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:layout_alignParentBottom="true"
  android:layout_centerHorizontal="true"
  android:layout_marginBottom="100dp"
  android:orientation="horizontal" />
 
 <Button
  android:id="@+id/guide_btn"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:layout_above="@id/guide_ll"
  android:layout_centerHorizontal="true"
  android:text="進(jìn)入應(yīng)用"
  android:layout_marginBottom="10dp"
  android:visibility="gone"/>
 
</RelativeLayout>

在GuideActivity中,首先初始化引導(dǎo)圖片

/**
 * 初始化圖片
 */
private void initImgs() {
 ViewPager.LayoutParams params= new ViewPager.LayoutParams();
 imageViews= new ArrayList<ImageView>();
 for (int i= 0; i< imgs.length; i++){
  ImageView imageView= new ImageView(this);
  imageView.setLayoutParams(params);
  imageView.setImageResource(imgs[i]);
  imageView.setScaleType(ImageView.ScaleType.FIT_XY);
  imageViews.add(imageView);
 }
}

初始化底部圓點(diǎn)指示器,這里值得一提的是我們給各圓點(diǎn)設(shè)置相應(yīng)的點(diǎn)擊事件,當(dāng)點(diǎn)擊某個(gè)位置的圓點(diǎn)時(shí),viewpager自動(dòng)切換到相應(yīng)位置的圖片,不過(guò)實(shí)際應(yīng)用中這里實(shí)用性不是很大,因?yàn)閳A點(diǎn)太小,可觸摸范圍有限,點(diǎn)擊事件不太好觸發(fā)。

/**
 * 初始化底部圓點(diǎn)指示器
 */
private void initDots() {
 LinearLayout layout= findViewById(R.id.guide_ll);
 LinearLayout.LayoutParams params= new LinearLayout.LayoutParams(20, 20);
 params.setMargins(10, 0, 10, 0);
 dotViews= new ImageView[imgs.length];
 for (int i= 0; i< imageViews.size(); i++){
  ImageView imageView= new ImageView(this);
  imageView.setLayoutParams(params);
  imageView.setImageResource(R.drawable.dotselector);
  if (i== 0){
   imageView.setSelected(true);
  }else{
   imageView.setSelected(false);
  }
  dotViews[i]= imageView;
  final int finalI = i;
  dotViews[i].setOnClickListener(new View.OnClickListener() {
   @Override
   public void onClick(View view) {
    vp.setCurrentItem(finalI);
   }
  });
  layout.addView(imageView);
 }
}

設(shè)置viewpager的滑動(dòng)事件

vp.addOnPageChangeListener(this);

生成三個(gè)方法,我們主要在onPageSelected()方法中做操作,當(dāng)某個(gè)位置的圓點(diǎn)被選中時(shí),顯示選中后的圖片,其余圓點(diǎn)顯示未選中的圖片,這里主要應(yīng)用selector控制器,至于相應(yīng)的選中未選中圓點(diǎn)圖片需要大家去找。當(dāng)滑動(dòng)到最后一個(gè)頁(yè)面時(shí),將 "進(jìn)入應(yīng)用" 的按鈕顯示,反之隱藏。

@Override
public void onPageScrolled(int i, float v, int i1) {}
 
@Override 
public void onPageScrollStateChanged(int i) {}
 
@Override
public void onPageSelected(int arg0) {
 for (int i= 0; i< dotViews.length; i++){
  if (arg0== i){
   dotViews[i].setSelected(true);
  }else {
   dotViews[i].setSelected(false);
  }
 
  if (arg0== dotViews.length- 1){
   btn.setVisibility(View.VISIBLE);
  }else {
   btn.setVisibility(View.GONE);
  }
 }
}

dotSelector.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
 <item android:drawable="@drawable/focus_on" android:state_selected="true"/>
 <item android:drawable="@drawable/focus_nomal" android:state_selected="false"/>
</selector>

在最后一個(gè)頁(yè)面點(diǎn)擊 "進(jìn)入應(yīng)用" 按鈕跳轉(zhuǎn)到主頁(yè)時(shí),將緩存中的isFirst數(shù)據(jù)改為1,以后打開(kāi)應(yīng)用則不會(huì)再進(jìn)入引導(dǎo)頁(yè)面了。

@Override
public void onClick(View view) {
 switch (view.getId()){
  case R.id.guide_btn:
   setisFirst();
   Intent intent= new Intent(GuideActivity.this, MainActivity.class);
   startActivity(intent);
   finish();
   break;
 }
}
/**
 * 改變首次打開(kāi)的狀態(tài)
 */
private void setisFirst() {
 SharedPreferences.Editor editor= getSharedPreferences("data", MODE_PRIVATE).edit();
 editor.putString("isFirst", "1");
 editor.commit();
}

至此全部完成!demo附上

源碼下載

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Android RecyclerView加載不同布局簡(jiǎn)單實(shí)現(xiàn)

    Android RecyclerView加載不同布局簡(jiǎn)單實(shí)現(xiàn)

    這篇文章主要為大家詳細(xì)介紹了Android RecyclerView加載不同布局簡(jiǎn)單實(shí)現(xiàn),感興趣的小伙伴們可以參考一下
    2016-08-08
  • android使用ItemDecoration給RecyclerView 添加水印

    android使用ItemDecoration給RecyclerView 添加水印

    本篇文章主要介紹了android使用ItemDecoration給RecyclerView 添加水印,介紹了自定義Drawable來(lái)完成水印圖片和使用ItemDecoration來(lái)布局水印,有興趣的可以了解一下。
    2017-02-02
  • Android5.0新特性詳解之全新的動(dòng)畫(huà)

    Android5.0新特性詳解之全新的動(dòng)畫(huà)

    這篇文章主要介紹了Android5.0新特性詳解之全新的動(dòng)畫(huà)的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-09-09
  • 教你一文搞懂Kotlin中的Jvm注解

    教你一文搞懂Kotlin中的Jvm注解

    這篇文章主要介紹了教你一文搞懂Kotlin中的Jvm注解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • Android中Gallery和ImageSwitcher的使用實(shí)例

    Android中Gallery和ImageSwitcher的使用實(shí)例

    今天小編就為大家分享一篇關(guān)于A(yíng)ndroid中Gallery和ImageSwitcher的使用實(shí)例,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-03-03
  • Android實(shí)現(xiàn)單項(xiàng)、多項(xiàng)選擇操作

    Android實(shí)現(xiàn)單項(xiàng)、多項(xiàng)選擇操作

    這篇文章主要介紹了Android實(shí)現(xiàn)單項(xiàng)、多項(xiàng)選擇操作的相關(guān)資料,單項(xiàng)選擇、多項(xiàng)選擇操作在項(xiàng)目開(kāi)發(fā)中經(jīng)常應(yīng)用,感興趣的小伙伴們可以參考一下
    2016-04-04
  • 如何調(diào)用百度地圖API實(shí)現(xiàn)手機(jī)自動(dòng)定位

    如何調(diào)用百度地圖API實(shí)現(xiàn)手機(jī)自動(dòng)定位

    api手機(jī)自動(dòng)定位,通過(guò)聲明地址解析器,獲取當(dāng)前坐標(biāo),如何調(diào)用百度地圖api實(shí)現(xiàn)手機(jī)自動(dòng)定位呢?接下來(lái),一起跟小編來(lái)學(xué)習(xí)吧。
    2015-09-09
  • 安卓GET與POST網(wǎng)絡(luò)請(qǐng)求的三種方式

    安卓GET與POST網(wǎng)絡(luò)請(qǐng)求的三種方式

    今天小編就為大家分享一篇關(guān)于安卓GET與POST網(wǎng)絡(luò)請(qǐng)求的三種方式,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2018-12-12
  • 怎么發(fā)布打包并發(fā)布自己的Android應(yīng)用(APP)

    怎么發(fā)布打包并發(fā)布自己的Android應(yīng)用(APP)

    前面我為大家講的都是關(guān)于A(yíng)ndroid開(kāi)發(fā)方面的知識(shí)點(diǎn)和技術(shù),不少朋友可能會(huì)感到疑惑--究竟我該怎么打包、發(fā)布自己開(kāi)發(fā)的APP,怎樣將我的APP放到網(wǎng)上工別人下載,怎樣保證我的APP安全及版權(quán)問(wèn)題呢
    2013-11-11
  • 詳解在Flutter中如何使用dio

    詳解在Flutter中如何使用dio

    應(yīng)用程序開(kāi)發(fā)的一個(gè)關(guān)鍵部分是優(yōu)雅地處理網(wǎng)絡(luò)請(qǐng)求。網(wǎng)絡(luò)返回的響應(yīng)可能包含意想不到的結(jié)果,為了獲得良好的用戶(hù)體驗(yàn),您需要提前處理邊緣情況。本文將詳細(xì)為大家介紹Flutter如何使用dio,需要的可以參考一下
    2022-04-04

最新評(píng)論

东乌珠穆沁旗| 图木舒克市| 桂东县| 昂仁县| 靖安县| 白水县| 吴桥县| 铜川市| 定安县| 三明市| 交城县| 东方市| 武安市| 南澳县| 东乌珠穆沁旗| 邵武市| 云霄县| 昌吉市| 镇宁| 静安区| 扶风县| 江源县| 兴安县| 北票市| 云安县| 库车县| 英吉沙县| 敦煌市| 南漳县| 剑阁县| 连城县| 合阳县| 威宁| 金塔县| 佛坪县| 伊金霍洛旗| 乐业县| 安顺市| 会宁县| 清水县| 蕲春县|