Android開發(fā)之使用ViewPager實(shí)現(xiàn)圖片左右滑動切換效果
Android中圖片的左右切換隨處可見,今天我也試著查閱資料試著做了一下,挺簡單的一個小Demo,卻也發(fā)現(xiàn)了一些問題,話不多說,上代碼~:
使用了3個xml文件作為ViewPager的滑動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>
只是用了一個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; //定義一個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() { /** * 對于這幾個想要動態(tài)載入的page頁面,使用LayoutInflater.inflate()來找到其布局文件,并實(shí)例化為View對象 */ 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(); } //判斷是否由對象生成頁面 @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)); } //返回一個對象,這個對象表明了PagerAdapter適配器選擇哪個對象放在當(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() { //有多少個界面就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; //初始化第一個page頁面的圖片的原點(diǎn)為選中狀態(tài) if (i == 0) { //表示當(dāng)前圖片 imageViews[i].setBackgroundResource(R.mipmap.page_indicator_focused); /** * 在java代碼中動態(tài)生成ImageView的時候 * 要設(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ā)生變化的時候調(diào)用 public class GuidePageChangeListener implements ViewPager.OnPageChangeListener { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } //頁面滑動完成后執(zhí)行 @Override public void onPageSelected(int position) { //判斷當(dāng)前是在那個page,就把對應(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--滑動 2--滑動完成 @Override public void onPageScrollStateChanged(int state) { } } }
這樣,一個簡單地滑動圖片的Demo就完成了,需要注意的地方有:在java代碼中生成ImageView的時候,如果想為其設(shè)置顯示的圖片,要使用setBackgroundResource()方法而不是setImageResource()方法
以上所述是小編給大家介紹的Android開發(fā)之使用ViewPager實(shí)現(xiàn)圖片左右滑動切換效果,希望對大家有所幫助,如果大家有任何疑問歡迎給我留言,小編會及時回復(fù)大家的,再此也非常感謝大家對腳本之家網(wǎng)站的支持!
- Android如何使用ViewPager2實(shí)現(xiàn)頁面滑動切換效果
- Android HorizontalScrollView滑動與ViewPager切換案例詳解
- Android使用TabLayou+fragment+viewpager實(shí)現(xiàn)滑動切換頁面效果
- Android ViewPager撤消左右滑動切換功能實(shí)現(xiàn)代碼
- Android中的ViewPager視圖滑動切換類的入門實(shí)例教程
- Android App中使用ViewPager+Fragment實(shí)現(xiàn)滑動切換效果
- Android應(yīng)用中利用ViewPager實(shí)現(xiàn)多頁面滑動切換效果示例
- Android編程實(shí)現(xiàn)ViewPager多頁面滑動切換及動畫效果的方法
- Android實(shí)現(xiàn)界面左右滑動切換功能
- Android開發(fā)之ViewPager實(shí)現(xiàn)滑動切換頁面
相關(guān)文章
Android TV開發(fā):實(shí)現(xiàn)3D仿Gallery效果的實(shí)例代碼
這篇文章主要介紹了Android TV開發(fā):實(shí)現(xiàn)3D仿Gallery效果的實(shí)例代碼,效果:滾動翻頁+ 頁面點(diǎn)擊+頁碼指示器+焦點(diǎn)控制,主要為了移植到電視上做了按鍵事件和焦點(diǎn)控制。2018-05-05詳解flutter中常用的container layout實(shí)例
這篇文章主要為大家介紹了詳解flutter中常用的container layout實(shí)例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09AndroidHttpClient詳解及調(diào)用示例
本文給大家介紹AndroidHttpClient結(jié)構(gòu)、使用方式及調(diào)用示例詳解,需要的朋友可以參考下2015-10-10Android studio實(shí)現(xiàn)畫板功能
這篇文章主要介紹了Android studio實(shí)現(xiàn)畫板功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-01-01Android編程圖片加載類ImageLoader定義與用法實(shí)例分析
這篇文章主要介紹了Android編程圖片加載類ImageLoader定義與用法,結(jié)合實(shí)例形式分析了Android圖片加載類ImageLoader的功能、定義、使用方法及相關(guān)操作注意事項(xiàng),代碼中備有較為詳盡的注釋便于理解,需要的朋友可以參考下2017-12-12android中在Activity中響應(yīng)ListView內(nèi)部按鈕的點(diǎn)擊事件的兩種方法
本篇文章主要介紹了android中在Activity中響應(yīng)ListView內(nèi)部按鈕的點(diǎn)擊事件的兩種方法,有需要的可以了解一下。2016-11-11Android實(shí)現(xiàn)動態(tài)添加數(shù)據(jù)與堆疊折線圖詳解流程
堆疊折線圖是折線圖的一種,堆積折線圖用于顯示每一數(shù)值所占大小隨時間或有序類別而變化的趨勢,可能顯示數(shù)據(jù)點(diǎn)以表示單個數(shù)據(jù)值,也可能不顯示這些數(shù)據(jù)點(diǎn)。堆疊折線圖中,類別數(shù)據(jù)沿水平軸均勻分布,所有值數(shù)據(jù)沿垂直軸均勻分布2021-10-10Android SeekBar實(shí)現(xiàn)滑動條效果
這篇文章主要為大家詳細(xì)介紹了Android SeekBar實(shí)現(xiàn)滑動條效果,可以改變并顯示當(dāng)前進(jìn)度的拖動,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-07-07Android無需讀寫權(quán)限通過臨時授權(quán)讀寫用戶文件詳解
這篇文章主要為大家介紹了Android無需讀寫權(quán)限通過臨時授權(quán)讀寫用戶文件詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03Android仿淘寶頭條基于TextView實(shí)現(xiàn)上下滾動通知效果
這篇文章主要介紹了Android TextView實(shí)現(xiàn)上下滾動通知效果,需要的朋友可以參考下2017-03-03