Android開發(fā)之使用ViewPager實(shí)現(xiàn)圖片左右滑動(dòng)切換效果
Android中圖片的左右切換隨處可見,今天我也試著查閱資料試著做了一下,挺簡單的一個(gè)小Demo,卻也發(fā)現(xiàn)了一些問題,話不多說,上代碼~:
使用了3個(gè)xml文件作為ViewPager的滑動(dòng)page,布局都是相同的,如下只展示其中之一:
<?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"
android:orientation="vertical"
>
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="centerCrop"
android:src="@mipmap/view1"/>
</LinearLayout>
只是用了一個(gè)ImageView作為顯示圖片的容器
主頁面布局:
<?xml version="1.0" encoding="UTF-8"?> <RelativeLayout android:orientation="vertical" android:layout_height="match_parent" android:layout_width="match_parent" xmlns:android="http://schemas.android.com/apk/res/android"> <!-- 切換卡 --> <android.support.v4.view.ViewPager android:layout_height="wrap_content" android:layout_width="match_parent" android:id="@+id/viewPager"></android.support.v4.view.ViewPager> <!-- 點(diǎn)點(diǎn) --> <LinearLayout android:orientation="horizontal" android:layout_height="wrap_content" android:layout_width="fill_parent" android:id="@+id/viewGroup" android:layout_alignParentBottom="true" android:gravity="center_horizontal" android:layout_marginBottom="40dp"></LinearLayout> </RelativeLayout>
接下來就是主函數(shù)的的代碼了:
package com.yztc.lx.homework;
import android.app.Activity;
import android.os.Bundle;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.LayoutInflater;
import android.view.ViewGroup.LayoutParams;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import java.util.ArrayList;
import java.util.List;
/**
* Created by Lx on 2016/8/6.
*/
public class Layout1Activity extends Activity {
private ViewPager viewPager;
private PagerAdapter adapter;
private List<View> viewPages = new ArrayList<>();
//包裹點(diǎn)點(diǎn)的LinearLayout
private ViewGroup group;
private ImageView imageView;
//定義一個(gè)ImageVIew數(shù)組,來存放生成的小園點(diǎn)
private ImageView[] imageViews;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout1);
initView();
initPageAdapter();
initPointer();
initEvent();
}
//為控件綁定事件,綁定適配器
private void initEvent() {
viewPager.setAdapter(adapter);
viewPager.addOnPageChangeListener(new GuidePageChangeListener());
}
//初始化ViewPager
private void initPageAdapter() {
/**
* 對(duì)于這幾個(gè)想要?jiǎng)討B(tài)載入的page頁面,使用LayoutInflater.inflate()來找到其布局文件,并實(shí)例化為View對(duì)象
*/
LayoutInflater inflater = LayoutInflater.from(this);
View page1 = inflater.inflate(R.layout.page1, null);
View page2 = inflater.inflate(R.layout.page2, null);
View page3 = inflater.inflate(R.layout.page3, null);
//添加到集合中
viewPages.add(page1);
viewPages.add(page2);
viewPages.add(page3);
adapter = new PagerAdapter() {
//獲取當(dāng)前界面?zhèn)€數(shù)
@Override
public int getCount() {
return viewPages.size();
}
//判斷是否由對(duì)象生成頁面
@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView(viewPages.get(position));
}
//返回一個(gè)對(duì)象,這個(gè)對(duì)象表明了PagerAdapter適配器選擇哪個(gè)對(duì)象放在當(dāng)前的ViewPager中
@Override
public Object instantiateItem(ViewGroup container, int position) {
View view = viewPages.get(position);
container.addView(view);
return view;
}
};
}
//綁定控件
private void initView() {
viewPager = (ViewPager) findViewById(R.id.viewPager);
group = (ViewGroup) findViewById(R.id.viewGroup);
}
//初始化下面的小圓點(diǎn)的方法
private void initPointer() {
//有多少個(gè)界面就new多長的數(shù)組
imageViews = new ImageView[viewPages.size()];
for (int i = 0; i < imageViews.length; i++) {
imageView = new ImageView(this);
//設(shè)置控件的寬高
imageView.setLayoutParams(new LayoutParams(25, 25));
//設(shè)置控件的padding屬性
imageView.setPadding(20, 0, 20, 0);
imageViews[i] = imageView;
//初始化第一個(gè)page頁面的圖片的原點(diǎn)為選中狀態(tài)
if (i == 0) {
//表示當(dāng)前圖片
imageViews[i].setBackgroundResource(R.mipmap.page_indicator_focused);
/**
* 在java代碼中動(dòng)態(tài)生成ImageView的時(shí)候
* 要設(shè)置其BackgroundResource屬性才有效
* 設(shè)置ImageResource屬性無效
*/
} else {
imageViews[i].setBackgroundResource(R.mipmap.page_indicator_unfocused);
}
group.addView(imageViews[i]);
}
}
//ViewPager的onPageChangeListener監(jiān)聽事件,當(dāng)ViewPager的page頁發(fā)生變化的時(shí)候調(diào)用
public class GuidePageChangeListener implements ViewPager.OnPageChangeListener {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
//頁面滑動(dòng)完成后執(zhí)行
@Override
public void onPageSelected(int position) {
//判斷當(dāng)前是在那個(gè)page,就把對(duì)應(yīng)下標(biāo)的ImageView原點(diǎn)設(shè)置為選中狀態(tài)的圖片
for (int i = 0; i < imageViews.length; i++) {
imageViews[position].setBackgroundResource(R.mipmap.page_indicator_focused);
if (position != i) {
imageViews[i].setBackgroundResource(R.mipmap.page_indicator_unfocused);
}
}
}
//監(jiān)聽頁面的狀態(tài),0--靜止 1--滑動(dòng) 2--滑動(dòng)完成
@Override
public void onPageScrollStateChanged(int state) {
}
}
}
這樣,一個(gè)簡單地滑動(dòng)圖片的Demo就完成了,需要注意的地方有:在java代碼中生成ImageView的時(shí)候,如果想為其設(shè)置顯示的圖片,要使用setBackgroundResource()方法而不是setImageResource()方法
以上所述是小編給大家介紹的Android開發(fā)之使用ViewPager實(shí)現(xiàn)圖片左右滑動(dòng)切換效果,希望對(duì)大家有所幫助,如果大家有任何疑問歡迎給我留言,小編會(huì)及時(shí)回復(fù)大家的,再此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
- Android如何使用ViewPager2實(shí)現(xiàn)頁面滑動(dòng)切換效果
- Android HorizontalScrollView滑動(dòng)與ViewPager切換案例詳解
- Android使用TabLayou+fragment+viewpager實(shí)現(xiàn)滑動(dòng)切換頁面效果
- Android ViewPager撤消左右滑動(dòng)切換功能實(shí)現(xiàn)代碼
- Android中的ViewPager視圖滑動(dòng)切換類的入門實(shí)例教程
- Android App中使用ViewPager+Fragment實(shí)現(xiàn)滑動(dòng)切換效果
- Android應(yīng)用中利用ViewPager實(shí)現(xiàn)多頁面滑動(dòng)切換效果示例
- Android編程實(shí)現(xiàn)ViewPager多頁面滑動(dòng)切換及動(dòng)畫效果的方法
- Android實(shí)現(xiàn)界面左右滑動(dòng)切換功能
- Android開發(fā)之ViewPager實(shí)現(xiàn)滑動(dòng)切換頁面
相關(guān)文章
建造者模式_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
建造者實(shí)現(xiàn)抽象類的所有未實(shí)現(xiàn)的方法,具體來說一般是兩項(xiàng)任務(wù),組建產(chǎn)品;返回組建好的產(chǎn)品2017-08-08
基于Android RecyclerView實(shí)現(xiàn)宮格拖拽效果
在Android發(fā)展的進(jìn)程中,網(wǎng)格布局一直比較有熱度,其中一個(gè)原因是對(duì)用戶來說便捷操作,對(duì)app廠商而言也會(huì)帶來很多的曝光量,本篇我們會(huì)使用RecyclerView來實(shí)現(xiàn)網(wǎng)格拖拽,本篇將結(jié)合圖片分片案例,實(shí)現(xiàn)拖拽效果,需要的朋友可以參考下2024-03-03
Android實(shí)現(xiàn)個(gè)人資料頁面頭像背景模糊顯示包(狀態(tài)欄)
這篇文章主要介紹了Android實(shí)現(xiàn)個(gè)人資料頁面頭像背景模糊顯示包括狀態(tài)欄,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-03-03
Android退出應(yīng)用最優(yōu)雅的方式(改進(jìn)版)
這篇文章主要介紹了Android退出應(yīng)用最優(yōu)雅的方式,改進(jìn)版,感興趣的小伙伴們可以參考一下2016-01-01
關(guān)于OkHttp中response.body().string()的用法解析
這篇文章主要介紹了關(guān)于OkHttp中response.body().string()的用法解析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-06-06
Android Studio使用教程(四):Gradle基礎(chǔ)
這篇文章主要介紹了Android Studio使用教程(四):Gradle基礎(chǔ),本文講解了什么是Gradle、安裝Gradle、Gradle 基本概念等內(nèi)容,需要的朋友可以參考下2015-05-05
Android Studio新建工程默認(rèn)在build.gradle中加入maven阿里源的問題
這篇文章主要介紹了Android Studio新建工程默認(rèn)在build.gradle中加入maven阿里源的問題,本文通過實(shí)例代碼相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-03-03

