Android基础学习之viewpager(左右滑页卡)
来源:互联网 发布:mac原唱变伴奏 编辑:程序博客网 时间:2024/06/05 13:27
此功能为android 3.0 后开始有,如果需要兼容低版本侧要使用v4兼容包
1.xml布局视图
<LinearLayout 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:orientation="vertical" > <LinearLayout android:id="@+id/ll_top" android:layout_width="match_parent" android:layout_height="40dp" android:orientation="horizontal" android:background="#ccc" > <TextView android:id="@+id/tv_title1" android:layout_width="0dp" android:layout_height="37dp" android:layout_weight="1" android:gravity="center" android:text="Tab1" /> <TextView android:id="@+id/tv_title2" android:layout_width="0dp" android:layout_height="37dp" android:layout_weight="1" android:gravity="center" android:text="Tab2" /> <TextView android:id="@+id/tv_title3" android:layout_width="0dp" android:layout_height="37dp" android:layout_weight="1" android:gravity="center" android:text="Tab3" /> </LinearLayout> <ImageView android:id="@+id/iv_cursor" android:layout_width="match_parent" android:layout_height="wrap_content" android:scaleType="matrix" android:src="@drawable/cursor"/> <LinearLayout android:layout_width="match_parent" android:layout_height="1dp" android:background="#0af"> </LinearLayout> <android.support.v4.view.ViewPager android:id="@+id/viewpager" android:layout_width="wrap_content" android:layout_height="wrap_content" android:flipInterval="30" android:persistentDrawingCache="animation" > </android.support.v4.view.ViewPager></LinearLayout>
效果图
2.Activity类,直接上代码了
package com.ql.viewpagerdemo;import java.util.ArrayList;import java.util.List;import android.app.Activity;import android.graphics.BitmapFactory;import android.graphics.Matrix;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.DisplayMetrics;import android.view.LayoutInflater;import android.view.View;import android.view.View.OnClickListener;import android.view.ViewGroup;import android.view.animation.Animation;import android.view.animation.TranslateAnimation;import android.widget.ImageView;import android.widget.TextView;public class MainActivity extends Activity implements OnPageChangeListener { private TextView tv_title1; private TextView tv_title2; private TextView tv_title3; private ViewPager viewPager; private List<View> views; //用于装页卡 private View view1, view2, view3; //分别对应3个Tab的页卡视图 private ImageView iv_cursor; private int bmpW; //指示器图片的宽 private int offset; // 动画图片偏移量 private int currIndex = 0; // 当前页卡的编号 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //分开封装,便于维护和阅读 initImageView(); initTitleView(); initViewPager(); } private void initViewPager() { viewPager = (ViewPager) findViewById(R.id.viewpager);//获取控件对象 views = new ArrayList<View>(); //初始化容器 LayoutInflater inflater = LayoutInflater.from(this); //用LayoutInflater获取xml布局文件 view1 = inflater.inflate(R.layout.tab1, null);//加载tab对应的xml布局 views.add(view1); //添加进容器 view2 = inflater.inflate(R.layout.tab2, null); views.add(view2); view3 = inflater.inflate(R.layout.tab3, null); views.add(view3); viewPager.setAdapter(new MyPagerAdapter()); //绑定适配器 viewPager.setCurrentItem(0); //默认显示第1张页卡 viewPager.setOnPageChangeListener(this); //设置页卡改变监听器 } private void initTitleView() { tv_title1 = (TextView) findViewById(R.id.tv_title1); tv_title2 = (TextView) findViewById(R.id.tv_title2); tv_title3 = (TextView) findViewById(R.id.tv_title3); tv_title1.setOnClickListener(new MyListener(0)); //为TextView设置监听器 tv_title2.setOnClickListener(new MyListener(1)); tv_title3.setOnClickListener(new MyListener(2)); } private void initImageView() { iv_cursor = (ImageView) findViewById(R.id.iv_cursor); bmpW = BitmapFactory.decodeResource(getResources(), R.drawable.cursor) .getWidth(); //获得图片宽度 DisplayMetrics outMetrics = new DisplayMetrics(); // 用来保存屏幕相关数据的对象 getWindowManager().getDefaultDisplay().getMetrics(outMetrics); // 填充当前屏幕数据到该对象 int screenW = outMetrics.widthPixels; // 获得屏幕宽度 // 动画操作 Matrix matrix = new Matrix(); // 用来做矩阵变换的对象 offset = (screenW / 3 - bmpW) / 2; matrix.postTranslate(offset, 0); // 初始位置对于 页卡编号0 iv_cursor.setImageMatrix(matrix); // 设置动画效果 } //自定义监听器类 private class MyListener implements OnClickListener { private int index = -1; public MyListener(int index) { this.index = index; } @Override public void onClick(View v) { viewPager.setCurrentItem(index); //设置显示的页卡 } } //自定义页卡适配器 private class MyPagerAdapter extends PagerAdapter { @Override //父容器中页卡总数 public int getCount() { return views.size(); } @Override //建立object和view的映射 public boolean isViewFromObject(View view, Object object) { return view == object; //由object来生成view (key-value) } @Override //将页卡view从父容器中移除 public void destroyItem(ViewGroup container, int position, Object object) { container.removeView(views.get(position)); } @Override //将页卡view添加到父容器,最后将view作为object返回 public Object instantiateItem(ViewGroup container, int position) { container.addView(views.get(position)); return views.get(position); } } @Override public void onPageScrollStateChanged(int arg0) { } @Override public void onPageScrolled(int arg0, float arg1, int arg2) { } @Override //页卡改变事件 public void onPageSelected(int arg0) { //处理指示器动画效果 int one = offset * 2 + bmpW;// 页卡1 -> 页卡2 偏移量 Animation animation = new TranslateAnimation(one * currIndex, one * arg0, 0, 0); currIndex = arg0; animation.setFillAfter(true);// True:图片停在动画结束位置 animation.setDuration(300);// 持续时间 iv_cursor.startAnimation(animation); //开始动画 }}
0 0
- Android基础学习之viewpager(左右滑页卡)
- android基础学习之viewpager初探
- Android之实现ViewPager+Fragment左右滑动
- android 学习之Fragment+ViewPager实现页面左右滑动标签页
- android学习之-ViewPager
- android基础学习之fragment+viewpager+fragment事件听
- Android基础应用之 ViewPager
- Android 实现多页界面左右滑动切换效果之入门+进阶 (ViewPager+PagerAdapter)
- Android之DrawerLayout实现ViewPager+左右侧边栏
- android viewpager左右循环滑动
- Android ViewPager左右滑动月历
- android viewpager 禁止左右滑动
- android viewpager 无限左右滑动
- Android Viewpager拦截 左右滑动
- Android禁止ViewPager左右滑动
- android - ViewPager 监听左右滑动
- android viewpager禁止左右滑动
- Android 禁止ViewPager左右滑动
- Cookie和Session补充
- java中的内部类
- qt开发----小白的成长伊始
- 台湾国立大学机器学习技法.听课笔记(第六讲):Support Vector Regression
- 匿名对象
- Android基础学习之viewpager(左右滑页卡)
- SQL Server 2008 R2 死锁监控
- 关于JavaScript中数组去重(任意数据类型)
- 自己-社会-机器学习
- LintCode 乱序字符串
- C++--内建类型所占的字节数与内建类型转换
- 创建视图和副本
- Minimum Depth of Binary Tree
- https 之 ssl 证书