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 ...
随机推荐
- 不用第三方解码库取得图片宽高 附完整C++算法实现代码
在特定的应用场景下,有时候我们只是想获取图片的宽高, 但不想通过解码图片才取得这个信息. 预先知道图片的宽高信息,进而提速图片加载,预处理等相关操作以提升体验. 在stackoverflow有一篇相关 ...
- [AHOI2012]树屋阶梯
题目描述 输入输出格式 输入格式: 一个正整数N(1<=N<=500),表示阶梯的高度. 输出格式: 一个正整数,表示搭建方法的个数.(注:搭建方法的个数可能很大) 输入输出样例 输入样例 ...
- noip2017"退役"记
day0 口胡了一下去年的六道题,感觉很稳,看了6集动漫,0点钟就去睡了. day1 早上被一阵革命练习曲吵醒,而我还是窝在被子里不想起床(-﹃-)~zZ.于是室友开始放起了lost river... ...
- 【BZOJ2705】【Sdoi2012】Longge的问题
Description Longge的数学成绩非常好,并且他非常乐于挑战高难度的数学问题.现在问题来了:给定一个整数N,你需要求出\(\Sigma gcd(i, N) (1 \leq i \leq N ...
- FZU 2157 树形DP
最开始一直不理解题是什么意思 ╯▽╰ 题意:给出n个点,每个点都有两种花费,一个是0种花费,一个是1种花费,每两个点相连,边也有花费,是随着点所取话费的种类不同,边的花费也不同,边有四种花费,00,0 ...
- hdu 2896 病毒侵袭 AC自动机(查找包含哪些子串)
病毒侵袭 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- matplotlib中subplot的各参数的作用
subplot(a,b,c)中a代表所画图形的行数 b代表所画图形的列数 c代表所画图形的序号. plt.figure(facecolor='w', figsize=(9, 10)) plt.subp ...
- c语言第四次作业e
---恢复内容开始--- (一)改错题 输出三角形的面积和周长,输入三角形的三条边a.b.c,如果能构成一个三角形,输出面积area和周长perimeter(保留2位小数):否则,输出"Th ...
- SQL Server数据库账号密码变更后导致vCenter Server无法访问数据库
SQL Server数据库账号密码变更后导致vCenter Server无法访问数据库 1.1状况描述: 若SQL Server数据库的账号(这里以sa为例)密码发生了变更,那么连接数据的客户端vCe ...
- localStorage存储数组以及取数组方法
var weekArray = ['周一'.'周二'.'周三'.'周四'.'周五']; //存: localStorage.setItem('weekDay',JSON.stringify(weekA ...