Android开发之使用ViewPager实现图片左右滑动切换效果
作者:Rabbit丶 发布时间:2022-11-12 11:44:59
标签:viewpager,滑动切换
Android中图片的左右切换随处可见,今天我也试着查阅资料试着做了一下,挺简单的一个小Demo,却也发现了一些问题,话不多说,上代码~:
使用了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>
<!-- 点点 -->
<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>
接下来就是主函数的的代码了:
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<>();
//包裹点点的LinearLayout
private ViewGroup group;
private ImageView imageView;
//定义一个ImageVIew数组,来存放生成的小园点
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() {
/**
* 对于这几个想要动态载入的page页面,使用LayoutInflater.inflate()来找到其布局文件,并实例化为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() {
//获取当前界面个数
@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适配器选择哪个对象放在当前的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);
}
//初始化下面的小圆点的方法
private void initPointer() {
//有多少个界面就new多长的数组
imageViews = new ImageView[viewPages.size()];
for (int i = 0; i < imageViews.length; i++) {
imageView = new ImageView(this);
//设置控件的宽高
imageView.setLayoutParams(new LayoutParams(25, 25));
//设置控件的padding属性
imageView.setPadding(20, 0, 20, 0);
imageViews[i] = imageView;
//初始化第一个page页面的图片的原点为选中状态
if (i == 0) {
//表示当前图片
imageViews[i].setBackgroundResource(R.mipmap.page_indicator_focused);
/**
* 在java代码中动态生成ImageView的时候
* 要设置其BackgroundResource属性才有效
* 设置ImageResource属性无效
*/
} else {
imageViews[i].setBackgroundResource(R.mipmap.page_indicator_unfocused);
}
group.addView(imageViews[i]);
}
}
//ViewPager的onPageChangeListener监听事件,当ViewPager的page页发生变化的时候调用
public class GuidePageChangeListener implements ViewPager.OnPageChangeListener {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
//页面滑动完成后执行
@Override
public void onPageSelected(int position) {
//判断当前是在那个page,就把对应下标的ImageView原点设置为选中状态的图片
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);
}
}
}
//监听页面的状态,0--静止 1--滑动 2--滑动完成
@Override
public void onPageScrollStateChanged(int state) {
}
}
}
这样,一个简单地滑动图片的Demo就完成了,需要注意的地方有:在java代码中生成ImageView的时候,如果想为其设置显示的图片,要使用setBackgroundResource()方法而不是setImageResource()方法
以上所述是小编给大家介绍的Android开发之使用ViewPager实现图片左右滑动切换效果网站的支持!
来源:http://www.cnblogs.com/RabbitLx/archive/2016/08/07/5745857.html


猜你喜欢
- 1.插入排序这个打麻将或者打扑克的很好理解, 比如有左手有一副牌1,2,4,7 ,来一张3的牌, 是不是就是手拿着这张牌从右往左插到2,4之
- 本文实例讲述了Spring实战之属性占位符配置器用法。分享给大家供大家参考,具体如下:一 配置文件<?xml version=&quo
- @Value获取yml和properties配置参数Yml:#定时任务配置 application:
- 1. 概述官方JavaDocsApi: javax.swing.JLabelJLabel,标签。标签主要用于展示 文本 或 图片,也可以 同
- 一、Mybatis简介Mybatis是一款超级无敌的持久层框架,它支持自定义SQL、存储过程以及高级映射。Mybatis可以通过简单的XML
- 最近用到一些字符串加密,而.net中提供的加密算法中用起来比较复杂,便简单的封装了一下,方便日后使用。public class Encryp
- 前言本篇开始讲解音频编辑的具体操作,从相对简单的音频裁剪开始。要进行音频裁剪,我的方案是开启一个Service服务用于音频裁剪的耗时操作,主
- c#下压缩解压,主要是用第三方类库进行封装的。ICSharpCode.SharpZipLib.dll类库,链接地址为你官方下载链接。压缩主要
- 1.概述:C语言中的单向链表(单链表)是链表的一种,其特点是链表的链接方向是单向的,对链表的访问要通过顺序读取从头部开始。链表中最简单的一种
- 项目开发的过程中,经常会遇到添加水印的需求,其作用无非就是防止重要信息通过截图外传。(虽然我觉得并没有什么卵用,但领导的需求是不容质疑的)那
- Java Lambda 源码分析问题:Lambda 表达式是什么?JVM 内部究竟是如何实现 Lambda 表达式的?为什么要这样实现?一、
- 在使用手机时,蓝牙通信给我们带来很多方便。那么在Android手机中怎样进行蓝牙开发呢?本文以实例的方式讲解Android蓝牙开发的知识。&
- 读语句: String str = ConfigurationManager.AppSettings["DemoKey"
- 老风格,废话不多说了,直接给大家贴java代码了。代码如下:package com.zzw.getPhoneInfos;import and
- 在一个项目中,如果我们既用到了Struts2又用到了Servlet,项目运行时有可能无法正常访问Servlet,原因是在配置Struts的过
- 1,获取当前线程信息Thread.CurrentThread 是一个 静态的 Thread 类,Thread 的CurrentTh
- 概念尽量使用合成/聚合,而不是使用继承实现复用。所谓的合成/聚合是指一个对象里持有另外一个类的对象,通过调用这些对象的方法得到复用已有功能的
- 前言: 项目有个音乐播发器功能,实现音乐在线播放,同时需要带有歌词显示功能。网上也找过,在github找到勉强能用的控件,只是效果还是差强人
- 该篇文章篇幅很长,大概的思路如下 maven的介绍,初步
- 1 导入需要渐变的图片如果需要实现图片之间的渐变效果,我们需要两张照片,这样才能实现照片1到照片2的渐变。在路径 /res/values/