20 ViewPager Demo3指示器
MainActivity.java
package com.qf.day20_viewpager_demo3;
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.os.Bundle;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.LinearLayout.LayoutParams;
public class MainActivity extends Activity {
private ViewPager viewPager;
List<ImageView> list;
private int[] imags = { R.drawable.txt_theme26, R.drawable.txt_theme29, R.drawable.txt_theme30 };
// 指示器图片
private ImageView[] icons;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
viewPager = (ViewPager) findViewById(R.id.viewPager);
// 数据源
initData();
// 获取指示器
initIcon();
// adapter
MyAdapter adapter = new MyAdapter();
viewPager.setAdapter(adapter);
// setOnPageChangeListener
// addOnPageChangeListener
// ViewPager的监听事件
viewPager.setOnPageChangeListener(new OnPageChangeListener() {
/**
* 当前界面被选中时调用 position:当前位置
* 刚开始时此方法不会被回调
*/
@Override
public void onPageSelected(int position) {
// TODO Auto-generated method stub
// 首先把所有图片改成 一样的图片
for (int i = 0; i < icons.length; i++) {
icons[i].setImageResource(R.drawable.icon01);
}
// 当前位置的图片 改成不一致的
icons[position].setImageResource(R.drawable.icon02);
Log.e("==", "==onPageSelected"+position);
}
/**
* 界面滚动的回调方法 参数1:当前界面的下标 参数2:当前界面的滚动偏移量 参数3:当前界面滚动偏移量的像素值
*
*/
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
// TODO Auto-generated method stub
Log.e("==", "==onPageScrolled 参数1 "+arg0);
Log.e("==", "==onPageScrolled 参数2 "+arg1);
Log.e("==", "==onPageScrolled 参数3 "+arg2 );
}
/**
* 当前界面滑动状态改变时调用
* SCROLL_STATE_IDLE 停止滑动
* SCROLL_STATE_SETTLING 当用户有自然滑动的时候调用 比如说向左滑动然后放手
* 如果滑动的时候再回动回原来的位置不会触发 当然你能放回原位
* SCROLL_STATE_DRAGGING 正在滑动的状态
*/
@Override
public void onPageScrollStateChanged(int arg0) {
}
});
}
// 初始化指示器
public void initIcon() {
// 获取指示器的父容器
LinearLayout layout = (LinearLayout) findViewById(R.id.layout_id);
icons = new ImageView[imags.length];
for (int i = 0; i < icons.length; i++) {
// icons[i] = (ImageView) layout.getChildAt(i);
icons[i] = new ImageView(getApplicationContext());
// 设置图片的布局大小 也可在此设定marging
//使用的包为此元素在布局文件中的父元素
LayoutParams params = new LayoutParams(20, 20);
params.setMargins(0, 0, 20, 0);
icons[i].setLayoutParams(params);
// 容器里含有指示器
layout.addView(icons[i]);
icons[i].setImageResource(R.drawable.icon01);
icons[i].setTag(i);// 保存当前位置
icons[i].setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
// 滑动到指定的界面
// viewPager.setCurrentItem((Integer)v.getTag());
viewPager.setCurrentItem((Integer) v.getTag(), false);
}
});
}
// 设置第一个图片和其余图片不一致
icons[0].setImageResource(R.drawable.icon02);
}
// 初始化数据源
public void initData() {
list = new ArrayList<ImageView>();
for (int i = 0; i < imags.length; i++) {
ImageView iv = new ImageView(getApplicationContext());
iv.setImageResource(imags[i]);
list.add(iv);
}
}
public class MyAdapter extends PagerAdapter {
@Override
public int getCount() {
// TODO Auto-generated method stub
return list.size();
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
// TODO Auto-generated method stub
container.addView(list.get(position));
return list.get(position);
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
// TODO Auto-generated method stub
// super.destroyItem(container, position, object);
container.removeView(list.get(position));
}
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
// TODO Auto-generated method stub
return arg0 == arg1;
}
}
}
布局文件
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<android.support.v4.view.ViewPager
android:id="@+id/viewPager"
android:layout_width="match_parent"
android:layout_height="match_parent"
></android.support.v4.view.ViewPager>
<LinearLayout
android:id="@+id/layout_id"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="49dp"
android:layout_centerHorizontal="true"
android:layout_alignParentBottom="true"
android:orientation="horizontal" >
</LinearLayout>
</RelativeLayout>
20 ViewPager Demo3指示器的更多相关文章
- 20 ViewPager总结
V4:兼容到1.6,V7:兼容到 2.1,V13:兼容到3.2(平板) 兼容包 ViewPager 父类: android.support.v4.view.ViewPager ViewPager:滑动 ...
- 20 ViewPager demo5,6:FragmentAdapter 导航数据
Demo5 文件结构: MainActivity.java package com.qf.day20_viewpager_demo5; import java.util.ArrayList; impo ...
- 20 ViewPager Demo4自动轮播
MainActivity.java 思想:才用非常大的数 让其看起来可以循环轮播图片并且用户可以从尽头滑到首图的特点 . package com.qf.day20_viewpager_demo4; i ...
- Android ViewPager使用详解
这是谷歌官方给我们提供的一个兼容低版本安卓设备的软件包,里面包囊了只有在安卓3.0以上可以使用的api.而viewpager就是其中之一利用它,我们可以做很多事情,从最简单的导航,到页面菜单等等.那如 ...
- 【Android 界面效果21】Android ViewPager使用详解
这是谷歌官方给我们提供的一个兼容低版本安卓设备的软件包,里面包囊了只有在安卓3.0以上可以使用的api.而viewpager就是其中之一利用它,我们可以做很多事情,从最简单的导航,到页面菜单等等.那如 ...
- Android ViewPager使用具体解释
这是谷歌官方给我们提供的一个兼容低版本号安卓设备的软件包,里面包囊了仅仅有在安卓3.0以上能够使用的api.而viewpager就是当中之中的一个利用它,我们能够做非常多事情,从最简单的导航,到页面菜 ...
- Android Tab -- 使用ViewPager、PagerTitleStrip/PagerTabStrip来实现
原文地址:http://blog.csdn.net/crazy1235/article/details/42678877 效果:滑动切换:点击标签切换. 代码:https://github.com/l ...
- Android ViewPager使用详解(转)
这是谷歌官方给我们提供的一个兼容低版本安卓设备的软件包,里面包囊了只有在安卓3.0以上可以使用的api.而viewpager就是其中之一利用它,我们可以做很多事情,从最简单的导航,到页面菜单等等.那如 ...
- ViewPager实现页卡的3种方法(谷歌组件)
----方法一:---- 效果图: 须要的组件: ViewPager+PagerTabStrip 布局文件代码: <!--xmlns:android_custom="http://sc ...
随机推荐
- [bzoj1488][HNOI2009]图的同构——Polya定理
题目大意 求两两互不同构的含n个点的简单图有多少种. 简单图是关联一对顶点的无向边不多于一条的不含自环的图. a图与b图被认为是同构的是指a图的顶点经过一定的重新标号以后,a图的顶点集和边集能完全与b ...
- WISCO信息组NOIP模拟赛-部落冲突
传送门 首先肯定考虑树剖,这里没有要求区间加,所以可以用树状数组维护,不会卡常的 这里是边权,可以转化为点权:让每条边连接的较深的节点的点权等于边权即可,然后计算的时候减去lca #include&l ...
- [Spoj]Counting Divisors (cube)
来自FallDream的博客,未经允许,请勿转载,谢谢. 设d(x)表示x的约数个数,求$\sum_{i=1}^{n}d(i^{3})$ There are 5 Input files. - Inpu ...
- 【集训第四天·继续刷题】之 lgh怒刚ypj
继续水题,终于完全掌握了伸展树了,好心痛QAQ. 1.codevs1343 蚱蜢 区间最大值查询+单点移动 最大值查询维护一个mx数组就行,单点移动么,先删除在插入 CODE: /* PS: 比较ma ...
- BZOJ2989 数列(二进制分组)
这题其实可以cdq分治做,但是如果强制在线的话,这里有个牛逼方法叫二进制分组. 它的基本思想是把修改操作按二进制分组,遇到修改就在尾部加一个,并与之前的合并,比如之前有23(16+4+2+1)个,加了 ...
- JavaBean实现用户登陆
本文简单讲述使用javabean实现用户登录,包括用户登录,注册和退出等. 系统结构图 2.数据库表 create table P_USER ( id VARCHAR2(50) not n ...
- C# 枚举在项目中使用心得
阅读目录 基本介绍 使用注意 使用方法 扩展用法 本文主要是我在项目中对C#枚举的使用心得,如有不足的地方欢迎您指出. 一.基本介绍 枚举是由一组特定常量构成的一组数据结构,是值类型的一种特 ...
- 索引法则--IS NULL, IS NOT NULL 也无法使用索引
Mysql 系列文章主页 =============== 1 数据准备 1.1 建表 DROP TABLE IF EXISTS staff; CREATE TABLE IF NOT EXISTS st ...
- 详解linux进程间通信-管道 popen函数 dup2函数
前言:进程之间交换信息的唯一方法是经由f o r k或e x e c传送打开文件,或通过文件系统.本章将说明进程之间相互通信的其他技术-I P C(InterProcess Communication ...
- KMP及其改进算法
本文主要讲述KMP已经KMP的一种改进方法.若发现不正确的地方,欢迎交流指出,谢谢! KMP算法的基本思想: KMP的算法流程: 每当一趟匹配过程中出现字符比较不等时,不需回溯 i 指针,而是利用已经 ...