欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android 中使用 ViewPager實(shí)現(xiàn)屏幕頁(yè)面切換和頁(yè)面輪播效果

 更新時(shí)間:2016年12月02日 14:49:03   作者:潘侯爺  
ViewPager是谷歌官方給我們提供的一個(gè)兼容低版本安卓設(shè)備的軟件包,里面包囊了只有在安卓3.0以上可以使用的api。下面我們就展示下ViewPager可以實(shí)現(xiàn)的兩種簡(jiǎn)單效果,感興趣的朋友一起看看吧

之前關(guān)于如何實(shí)現(xiàn)屏幕頁(yè)面切換,寫過一篇博文《Android中使用ViewFlipper實(shí)現(xiàn)屏幕切換》,相比ViewFlipper,ViewPager更適用復(fù)雜的視圖切換,而且Viewpager有自己的adapter,這也讓其適應(yīng)復(fù)雜對(duì)象,實(shí)現(xiàn)數(shù)據(jù)的動(dòng)態(tài)加載。

ViewPager是谷歌官方給我們提供的一個(gè)兼容低版本安卓設(shè)備的軟件包,里面包囊了只有在安卓3.0以上可以使用的api。而viewpager就是其中之一,利用它,我們可以做很多事情,從最簡(jiǎn)單的導(dǎo)航,到頁(yè)面菜單等等。

下面我們就展示下ViewPager可以實(shí)現(xiàn)的兩種簡(jiǎn)單效果:

第一種:屏幕的頁(yè)面的切換(與ViewFlipper的實(shí)現(xiàn)效果類似)

實(shí)現(xiàn)效果如下(4張視圖(layout)):

第一步:在layout布局文件里加入主布局文件viewpager_layout.xml

<?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">
<android.support.v4.view.ViewPager
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
android:gravity="center"
android:id="@+id/vp">
<android.support.v4.view.PagerTabStrip
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/tap">
</android.support.v4.view.PagerTabStrip>
</android.support.v4.view.ViewPager>
</LinearLayout>

注意事項(xiàng):

<1、這里ViewPager和PagerTabStrip都要把包名寫全了,不然會(huì)ClassNotFound

<2、API中說:在布局xml把PagerTabStrip當(dāng)做ViewPager的一個(gè)子標(biāo)簽來用,不能拿出來,不然還是會(huì)報(bào)錯(cuò)

<3、在PagerTabStrip標(biāo)簽中可以用屬性android:layout_gravity=TOP|BOTTOM來指定title的位置

<4、如果要顯示出PagerTabStrip某一頁(yè)的title,需要在ViewPager的adapter中實(shí)現(xiàn)getPageTitle(int)

第二步:在layout中建立要展示切換的視圖文件(示例中共四個(gè)layout1/2/3/4.xml,這里寫一個(gè)典型):

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@mipmap/a1"
android:scaleType="centerCrop"
android:id="@+id/iv1" />
</LinearLayout>

第三步:Java中Activity的實(shí)現(xiàn)代碼ViewPagerDemo.java(這里未設(shè)置pagerTabStrip的屬性):

在Activity里實(shí)例化ViewPager組件,并設(shè)置它的Adapter(就是PagerAdapter,方法與ListView一樣的)

實(shí)現(xiàn)一個(gè)PagerAdapter,覆蓋以下方法:

instantiateItem(ViewGroup, int)//用來實(shí)例化頁(yè)卡

destroyItem(ViewGroup, int, Object)//刪除頁(yè)卡

getCount() //返回頁(yè)卡的數(shù)量

isViewFromObject(View, Object)//判斷兩個(gè)對(duì)象是否相等

getPageTitle(int position)//設(shè)置標(biāo)簽顯示的標(biāo)題

設(shè)置指示標(biāo)簽的屬性

pagerTabStrip.setTabIndicatorColor();//指示器的顏色

pagerTabStrip.setBackgroundColor();//背影色

pagerTabStrip.setTextColor(Color.WHITE);//字體顏色

import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.view.ViewGroup;
import java.util.ArrayList;
/**
* Created by panchengjia on 2016/12/1.
*/
public class ViewPagerDemo extends AppCompatActivity {
private ViewPager vp;
//聲明存儲(chǔ)ViewPager下子視圖的集合
ArrayList<View> views = new ArrayList<>();
//顯示效果中每個(gè)視圖的標(biāo)題
String[] titles={"一號(hào)美女","二號(hào)美女","三號(hào)美女","四號(hào)美女"};
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.viewpager_layout);
vp= (ViewPager) findViewById(R.id.vp);
initView();//調(diào)用初始化視圖方法
vp.setAdapter(new MyAdapter());//設(shè)置適配器
}
//初始化視圖的方法(通過布局填充器獲取用于滑動(dòng)的視圖并存入對(duì)應(yīng)的的集合)
private void initView() {
View v1 = getLayoutInflater().inflate(R.layout.layout1,null);
View v2 = getLayoutInflater().inflate(R.layout.layout2,null);
View v3 = getLayoutInflater().inflate(R.layout.layout3,null);
View v4 = getLayoutInflater().inflate(R.layout.layout4,null);
views.add(v1);
views.add(v2);
views.add(v3);
views.add(v4);
}
class MyAdapter extends PagerAdapter{
@Override
public int getCount() {
return views.size();
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view==object;
}
//重寫銷毀滑動(dòng)視圖布局(將子視圖移出視圖存儲(chǔ)集合(ViewGroup))
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView(views.get(position));
}
//重寫初始化滑動(dòng)視圖布局(從視圖集合中取出對(duì)應(yīng)視圖,添加到ViewGroup)
@Override
public Object instantiateItem(ViewGroup container, int position) {
View v =views.get(position);
container.addView(v);
return v;
}
@Override
public CharSequence getPageTitle(int position) {
return titles[position];
}
}
}

第二種:頁(yè)面輪播效果視圖(程序首次啟動(dòng)的引導(dǎo)頁(yè)實(shí)現(xiàn))

實(shí)現(xiàn)效果如下(3張視圖滑動(dòng)引導(dǎo)):

開始代碼前注釋:

1、本次未實(shí)現(xiàn)循環(huán)輪播效果;2、導(dǎo)航原點(diǎn)資源圖片注解:default_holo為未選中狀態(tài),touched_holo為選中后實(shí)心狀態(tài)。(也可自己用Shape繪制)

第一步:在layout布局文件里加入主布局文件viewpager_layout.xml

主布局為FrameLayout,在ViewPager(這里因?yàn)榇嬖趯?dǎo)航原點(diǎn),不設(shè)置PagerTabStrip)上嵌套包含3個(gè)導(dǎo)航原點(diǎn)(由滑動(dòng)視圖數(shù)量決定)的linearLayout布局(本次設(shè)置該布局位于底部):

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
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"
tools:context="com.example.administrator.myapplication11.MainActivity">
<android.support.v4.view.ViewPager
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/vp">
</android.support.v4.view.ViewPager>
<LinearLayout
android:id="@+id/point_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:orientation="horizontal">
<ImageView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:src="@mipmap/default_holo"/>
<ImageView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:src="@mipmap/default_holo" />
<ImageView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:src="@mipmap/default_holo"
android:id="@+id/imageView" />
</LinearLayout>
</FrameLayout>

第二步:Layout中用于滑動(dòng)切換的視圖(示例中共三個(gè)layout1/2/3.xml,這里寫一個(gè)典型)與第一種相同

<?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="match_parent"
android:layout_height="match_parent"
android:scaleType="centerCrop"
android:src="@mipmap/genie"/>
</LinearLayout>

第三步:Java中Activity的實(shí)現(xiàn)代碼MainActivity.java

通過實(shí)現(xiàn)OnPageChangeListener接口實(shí)現(xiàn)在視圖切換時(shí)導(dǎo)航原點(diǎn)狀態(tài)的變化),其中關(guān)于OnPageChangeListener中方法的詳細(xì)解釋,請(qǐng)參考博文

ViewPager的setOnPageChangeListener方法詳解》這里不做贅述:

import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import java.util.ArrayList;
/**
* Created by panchengjia on 2016/11/30.
*/
public class MainActivity extends AppCompatActivity implements ViewPager.OnPageChangeListener{
private ViewPager vp;
private LinearLayout point_layout;
ArrayList<View> views =new ArrayList<>();
//實(shí)例化存儲(chǔ)imageView(導(dǎo)航原點(diǎn))的集合
ArrayList<ImageView> imageViews = new ArrayList<>();
int currImage;//記錄當(dāng)前頁(yè)(導(dǎo)航原點(diǎn))
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
vp= (ViewPager) findViewById(R.id.vp);
initView();//調(diào)用初始化視圖方法
initPoint();//調(diào)用初始化導(dǎo)航原點(diǎn)的方法
vp.addOnPageChangeListener(this);
vp.setAdapter(new MyAdapter());
}
/*將point_layout中包含的imageView(導(dǎo)航原點(diǎn))添加到imageViewS集合中
*并設(shè)置layout1(第一視圖)的導(dǎo)航原點(diǎn)(對(duì)應(yīng)集合0下標(biāo))的圖片
* 為touched_holo(觸摸狀態(tài)的圖片)
*/
private void initPoint() {
point_layout= (LinearLayout) findViewById(R.id.point_layout);
int counnt = point_layout.getChildCount();//獲取point數(shù)量
for (int i=0;i<counnt;i++){
imageViews.add((ImageView) point_layout.getChildAt(i));
}
imageViews.get(0).setImageResource(R.mipmap.touched_holo);
}
private void initView() {
View v1=getLayoutInflater().inflate(R.layout.layout1,null);
View v2=getLayoutInflater().inflate(R.layout.layout2,null);
View v3=getLayoutInflater().inflate(R.layout.layout3,null);
views.add(v1);
views.add(v2);
views.add(v3);
}
//OnPageChangeListener的方法,這里不做具體實(shí)現(xiàn)
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
//設(shè)置滑動(dòng)到對(duì)應(yīng)位置的視圖后,導(dǎo)航原點(diǎn)的不同狀態(tài)(圖片)
@Override
public void onPageSelected(int position) {
ImageView preView = imageViews.get(currImage);
preView.setImageResource(R.mipmap.default_holo);
ImageView currView = imageViews.get(position);
currView.setImageResource(R.mipmap.touched_holo);
currImage = position;
}
//OnPageChangeListener的方法,這里不做具體實(shí)現(xiàn)
@Override
public void onPageScrollStateChanged(int state) {
}
class MyAdapter extends PagerAdapter {
@Override
public int getCount() {
return views.size();
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view==object;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView(views.get(position));
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
View v = views.get(position);
container.addView(v);
return v;
}
}
}

至此,本次的ViewPager實(shí)現(xiàn)示例所需代碼已完成,當(dāng)然這只是ViewPager最簡(jiǎn)單的功能,后續(xù)還會(huì)更新一些ViewPager的高級(jí)用法,歡迎小伙伴們繼續(xù)支持。

以上所述是小編給大家介紹的Android 中使用 ViewPager實(shí)現(xiàn)屏幕頁(yè)面切換和頁(yè)面輪播效果,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

  • android開發(fā)中使用java觀察者模式

    android開發(fā)中使用java觀察者模式

    遇到android程序中后入棧的一個(gè)Activity需要更新之前一個(gè)或者兩個(gè)以上Activity中的數(shù)據(jù)時(shí)使用,或者需要在adapter中修改Activity或者fragment的數(shù)據(jù)和ui等
    2014-02-02
  • Android 自定義控件實(shí)現(xiàn)顯示文字的功能

    Android 自定義控件實(shí)現(xiàn)顯示文字的功能

    這篇文章主要介紹了Android 自定義控件實(shí)現(xiàn)顯示文字的功能的相關(guān)資料,需要的朋友可以參考下
    2016-11-11
  • Android編程實(shí)現(xiàn)使用webView打開本地html文件的方法

    Android編程實(shí)現(xiàn)使用webView打開本地html文件的方法

    這篇文章主要介紹了Android編程實(shí)現(xiàn)使用webView打開本地html文件的方法,結(jié)合實(shí)例形式分析了Android中webview布局及打開HTML文件的功能實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2017-02-02
  • Android中使用OkHttp包處理HTTP的get和post請(qǐng)求的方法

    Android中使用OkHttp包處理HTTP的get和post請(qǐng)求的方法

    OkHttp包為安卓開發(fā)中的HTTP協(xié)議網(wǎng)絡(luò)編程帶來了很大的便利,這里我們就來看一下最基本的、Android中使用OkHttp包處理HTTP的get和post請(qǐng)求的方法:
    2016-07-07
  • Android樹形控件繪制方法

    Android樹形控件繪制方法

    這篇文章主要為大家詳細(xì)介紹了Android樹形控件繪制方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • Android TabWidget底部顯示效果

    Android TabWidget底部顯示效果

    這篇文章主要為大家詳細(xì)介紹了Android TabWidget底部顯示效果的三種方式,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • Flutter開發(fā)之動(dòng)態(tài)權(quán)限的使用

    Flutter開發(fā)之動(dòng)態(tài)權(quán)限的使用

    眾所周知,Android在6.0版本后將權(quán)限修改成了動(dòng)態(tài)權(quán)限,而iOS則一直使用的是動(dòng)態(tài)權(quán)限,所以在Flutter應(yīng)用開發(fā)中如果涉及到一些危險(xiǎn)權(quán)限,就需要進(jìn)行動(dòng)態(tài)申請(qǐng),本文就詳細(xì)的介紹一下,感興趣的可以了解一下
    2021-09-09
  • Android貝塞爾曲線實(shí)現(xiàn)消息拖拽消失

    Android貝塞爾曲線實(shí)現(xiàn)消息拖拽消失

    這篇文章主要為大家詳細(xì)介紹了Android貝塞爾曲線實(shí)現(xiàn)消息拖拽消失,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • Android?App實(shí)現(xiàn)閃屏頁(yè)廣告圖的全屏顯示實(shí)例

    Android?App實(shí)現(xiàn)閃屏頁(yè)廣告圖的全屏顯示實(shí)例

    這篇文章主要為大家介紹了Android?App實(shí)現(xiàn)閃屏頁(yè)廣告圖的全屏顯示實(shí)例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • flutter實(shí)現(xiàn)輪播圖效果

    flutter實(shí)現(xiàn)輪播圖效果

    這篇文章主要為大家詳細(xì)介紹了flutter實(shí)現(xiàn)輪播圖效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-07-07

最新評(píng)論