Android開發(fā)項目第二炮

【威哥說】大家早上好!奧運進行時齿椅,咱們國家金牌是一個接一個琉挖,騰訊QQ小窗是一個接一個,身為國人涣脚,我感到無比自豪示辈、驕傲,國家越來越強大遣蚀,人民越來越幸福矾麻,咳咳纱耻。。险耀。停弄喘。。甩牺。咱們的項目依然要繼續(xù)蘑志,有沒有?也提醒大家在看奧運的同時不要忘了學習贬派,學習才是根本急但,知識改變命運,技術成就夢想搞乏。波桩。。

上節(jié)給大家講解了Android項目工具的使用和框架的搭建请敦,本節(jié)咱們來完成每個項目都會有的引導頁的實現(xiàn)镐躲,動態(tài)加載圓點標記效果。

具體實現(xiàn)的功能如下:

1.可以左右滑動圖片冬三。

2.圖片的索引圓點顯示匀油,看出當前圖片所在的位置和圖片的數量缘缚。

3.可任意左右滑動勾笆。

4.圖片的索引圓點帶有動畫效果。

5.最后一頁顯示按鈕桥滨,點擊進入應用窝爪。

本次學習主要是利用ViewPager實現(xiàn)用戶引導界面

在這里,我們需要用到google提到的一個支持包—Android-support-v4.jar齐媒,這個包包含了一些非常有用的類蒲每,其中ViewPager類來實現(xiàn)頁面之間的切換操作。

下面是我的實現(xiàn)喻括,用一個xml布局邀杏,一個ViewPagerActivity和一個pageradapter即可。

首先是xml布局,這里我用相對布局唬血,全屏放一個viewpager望蜡,用一個viewGroup(LinearLayout)在底部來放置圓點View,在viewpager的上面拷恨。最后再放一個Button脖律,位置在LinearLayout的上面,設置為visibility="gone"腕侄,當滑動到最后一頁就顯示小泉,布局搞定芦疏。

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

tools:context=".guide.ViewPagerActivity">

android:id="@+id/first_viewpager"

android:layout_width="match_parent"

android:layout_height="match_parent">

android:id="@+id/viewpager_tag_viewgroup"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:layout_alignParentBottom="true"

android:gravity="center_horizontal"

android:orientation="horizontal"

android:layout_marginBottom="40dp">

android:id="@+id/view_pager_button"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="立即體驗"

android:layout_above="@id/viewpager_tag_viewgroup"

android:layout_centerHorizontal="true"

android:visibility="gone" />

再準備好一個Adapter,這個沒有什么可說的,直接繼承PagerAdapter重寫以下4個方法

package com.moliying.androidlifehelper.guide;

import android.support.v4.view.PagerAdapter;

import android.support.v4.view.ViewPager;

import android.view.View;

import android.view.ViewGroup;

import java.util.List;

public class GuidePagerAdapter extends PagerAdapter {

private List viewList;

public GuidePagerAdapter(List viewList) {

this.viewList = viewList;

}

/**

* 返回頁面的個數

*

* @return

*/

@Override

public int getCount() {

if (viewList != null) {

return viewList.size();

}

return 0;

}

/**

* 判斷是否由對象生成界面

*

* @param view

* @param object

* @return

*/

@Override

public boolean isViewFromObject(View view, Object object) {

return view == object;

}

/**

* 初始化position位置的界面

*

* @param container

* @param position

* @return

*/

@Override

public Object instantiateItem(ViewGroup container, int position) {

((ViewPager) container).addView(viewList.get(position), 0);

return viewList.get(position);

}

/**

* 移除頁面

*

* @param container

* @param position

* @param object

*/

@Override

public void destroyItem(ViewGroup container, int position, Object object) {

((ViewPager) container).removeView(viewList.get(position));

}

}

一切就緒微姊,最后實現(xiàn)我們的ViewPagerActivity,為了大家看著方便酸茴,這里直接貼代碼了,注釋已經非常詳細兢交,大家仔細看弊决,后面為大家解讀代碼。

package com.moliying.androidlifehelper.guide;

import android.content.Intent;

import android.os.Bundle;

import android.support.v4.view.ViewPager;

import android.support.v7.app.AppCompatActivity;

import android.view.View;

import android.view.ViewGroup;

import android.widget.Button;

import android.widget.ImageView;

import android.widget.LinearLayout;

import com.moliying.androidlifehelper.R;

import com.moliying.androidlifehelper.activity.LoginActivity;

import java.util.ArrayList;

import java.util.List;

public class ViewPagerActivity extends AppCompatActivity implements ViewPager.OnPageChangeListener {

private ViewPager mViewPager;

//圖片資源的數組

private int[] mImageIdArray;

//圖片的集合

private List mViewList;

//放置圓點

private ViewGroup mViewGroup;

//實例化圓點View

private ImageView mImageView;

private ImageView[] mImageViewArray;

//最后一頁的按鈕

private Button mButton;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_view_pager);

mButton = (Button) findViewById(R.id.view_pager_button);

mButton.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

startActivity(new Intent(ViewPagerActivity.this, LoginActivity.class));

finish();

}

});

//加載ViewPager

initViewpager();

//加載底部圓點

initViewPagerTag();

}

/**

* 加載底部圓點

*/

private void initViewPagerTag() {

//這里實例化LinearLayout

mViewGroup = (ViewGroup) findViewById(R.id.viewpager_tag_viewgroup);

//根據ViewPager的item數量實例化數組

mImageViewArray = new ImageView[mViewList.size()];

//循環(huán)新建底部圓點imageview魁淳,將生成的imageview保存到數組中

for (int i = 0; i < mViewList.size(); i++) {

mImageView = new ImageView(this);

mImageView.setLayoutParams(new ViewGroup.LayoutParams(20, 20));

mImageView.setPadding(30, 0, 30, 0);

mImageViewArray[i] = mImageView;

//第一個頁面需要設為選中狀態(tài)飘诗,這里要使用兩張不同的圖片(選中與未選中)

if (i == 0) {

mImageView.setBackgroundResource(R.mipmap.viewpager_tag_on);

} else {

mImageView.setBackgroundResource(R.mipmap.viewpager_tag_off);

}

//將數組中的imageview加入到viewgroup

mViewGroup.addView(mImageViewArray[i]);

}

}

/**

* 加載ViewPager

*/

private void initViewpager() {

mViewPager = (ViewPager) findViewById(R.id.first_viewpager);

//實例化圖片資源

mImageIdArray = new int[]{R.drawable.guide01, R.drawable.guide02, R.drawable.guide03, R.drawable.guide04, R.drawable.guide05};

mViewList = new ArrayList();

//獲取一個layout參數,設置為match_parent

LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT

, LinearLayout.LayoutParams.MATCH_PARENT);

//循環(huán)創(chuàng)建view并進入集合

for (int i = 0; i < mImageIdArray.length; i++) {

//new imageview并設置全屏和圖片資源

ImageView imageView = new ImageView(this);

imageView.setLayoutParams(params);

imageView.setBackgroundResource(mImageIdArray[i]);

//將imageview加入到View集合中

mViewList.add(imageView);

}

//View集合數據初始化好界逛,setAdapter就可以了

mViewPager.setAdapter(new GuidePagerAdapter(mViewList));

//添加ViewPager的滑動監(jiān)聽昆稿,注意是.add...以前是setOnPageChangeListener方法,已過時

mViewPager.addOnPageChangeListener(this);

}

@Override

public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

}

//滑動后的監(jiān)聽

@Override

public void onPageSelected(int position) {

//循環(huán)設置當前頁的標記圖

for (int i = 0; i < mImageViewArray.length; i++) {

mImageViewArray[position].setBackgroundResource(R.mipmap.viewpager_tag_on);

if (position != i) {

mImageViewArray[i].setBackgroundResource(R.mipmap.viewpager_tag_off);

}

}

//判斷是否最后一頁息拜,是則顯示button

if (position == mImageViewArray.length - 1) {

mButton.setVisibility(View.VISIBLE);

} else {

mButton.setVisibility(View.GONE);

}

}

@Override

public void onPageScrollStateChanged(int state) {

}

}

代碼的實現(xiàn)流程分3步

1.首先加載ViewPager溉潭,新建imageview添加到List中,然后設置adapter并顯示少欺。

2.然后加載LinearLayout(ViewGroup)喳瓣,放置圓點圖片,同樣新建imageview設置背景后放入到圓點圖集合中赞别,這里要使用兩張圖片畏陕,選中和未選中。

3.最后設置ViewPager的滑動監(jiān)聽事件仿滔,在滑動完成的監(jiān)聽OnPageSelected方法中惠毁,做兩件事贝咙,一個判斷當前頁是哪一頁柔袁,設置對應的圓點為選中,第二個是如果是最后一頁祠挫,要顯示Button按鈕飒焦。

? ? ? Ok蜈膨,咱們本節(jié)課程就先到這里,下節(jié)要為大家講解的是Android xutils3.0框架最新版本的使用牺荠,xutils3變化較多翁巍,而且開源中的simple有很多細節(jié)沒有提到,我經過在項目中的使用遇到了一些坑志电,分享給你們曙咽,希望大家關注并轉發(fā),感謝挑辆!

本文出自微信公眾號mjw-java例朱,更多內容關注微信公眾號或訪問www.moliying.com

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末孝情,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子洒嗤,更是在濱河造成了極大的恐慌箫荡,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,997評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件渔隶,死亡現(xiàn)場離奇詭異羔挡,居然都是意外死亡,警方通過查閱死者的電腦和手機间唉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,603評論 3 392
  • 文/潘曉璐 我一進店門绞灼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人呈野,你說我怎么就攤上這事低矮。” “怎么了被冒?”我有些...
    開封第一講書人閱讀 163,359評論 0 353
  • 文/不壞的土叔 我叫張陵军掂,是天一觀的道長。 經常有香客問我昨悼,道長蝗锥,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,309評論 1 292
  • 正文 為了忘掉前任率触,我火速辦了婚禮终议,結果婚禮上,老公的妹妹穿的比我還像新娘闲延。我一直安慰自己痊剖,他們只是感情好,可當我...
    茶點故事閱讀 67,346評論 6 390
  • 文/花漫 我一把揭開白布垒玲。 她就那樣靜靜地躺著,像睡著了一般找颓。 火紅的嫁衣襯著肌膚如雪合愈。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,258評論 1 300
  • 那天击狮,我揣著相機與錄音佛析,去河邊找鬼。 笑死彪蓬,一個胖子當著我的面吹牛寸莫,可吹牛的內容都是我干的。 我是一名探鬼主播档冬,決...
    沈念sama閱讀 40,122評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼膘茎,長吁一口氣:“原來是場噩夢啊……” “哼桃纯!你這毒婦竟也來了?” 一聲冷哼從身側響起披坏,我...
    開封第一講書人閱讀 38,970評論 0 275
  • 序言:老撾萬榮一對情侶失蹤态坦,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后棒拂,有當地人在樹林里發(fā)現(xiàn)了一具尸體伞梯,經...
    沈念sama閱讀 45,403評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,596評論 3 334
  • 正文 我和宋清朗相戀三年帚屉,在試婚紗的時候發(fā)現(xiàn)自己被綠了谜诫。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,769評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡攻旦,死狀恐怖猜绣,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情敬特,我是刑警寧澤掰邢,帶...
    沈念sama閱讀 35,464評論 5 344
  • 正文 年R本政府宣布,位于F島的核電站伟阔,受9級特大地震影響辣之,放射性物質發(fā)生泄漏。R本人自食惡果不足惜皱炉,卻給世界環(huán)境...
    茶點故事閱讀 41,075評論 3 327
  • 文/蒙蒙 一怀估、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧合搅,春花似錦多搀、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,705評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至赌髓,卻和暖如春从藤,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背锁蠕。 一陣腳步聲響...
    開封第一講書人閱讀 32,848評論 1 269
  • 我被黑心中介騙來泰國打工夷野, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人荣倾。 一個月前我還...
    沈念sama閱讀 47,831評論 2 370
  • 正文 我出身青樓悯搔,卻偏偏與公主長得像,于是被迫代替她去往敵國和親舌仍。 傳聞我的和親對象是個殘疾皇子妒貌,可洞房花燭夜當晚...
    茶點故事閱讀 44,678評論 2 354

推薦閱讀更多精彩內容