1,主布局文件

android:layout_width=”match_parent”

android:layout_height=”match_parent”

android:orientation=”vertical”

>

android:layout_width=”match_parent”

android:layout_height=”wrap_content”>

android:id=”@+id/activity_viewpager_tab1_tv”

android:layout_width=”0dp”

android:layout_weight=”1″

android:layout_height=”wrap_content”

android:textSize=”30dp”

android:gravity=”center”

android:text=”页签1″/>

android:id=”@+id/activity_viewpager_tab2_tv”

android:layout_width=”0dp”

android:layout_weight=”1″

android:layout_height=”wrap_content”

android:textSize=”30dp”

android:gravity=”center”

android:text=”页签2″/>

android:id=”@+id/activity_viewpager_tab3_tv”

android:layout_width=”0dp”

android:layout_weight=”1″

android:layout_height=”wrap_content”

android:textSize=”30dp”

android:gravity=”center”

android:text=”页签3″/>

android:id=”@+id/cursor”

android:layout_width=”fill_parent”

android:layout_height=”wrap_content”

android:scaleType=”matrix”

android:src=”@drawable/tab_scoll_bar”

/>

android:id=”@+id/activity_viewpager_vp”

android:layout_width=”wrap_content”

android:layout_height=”wrap_content”

android:layout_gravity=”center”

android:layout_weight=”1.0″

android:flipInterval=”30″

android:persistentDrawingCache=”animation”>

2,子页面布局文件

android:layout_width=”match_parent”

android:layout_height=”match_parent”

android:orientation=”vertical”

android:background=”@android:color/holo_red_light”

>

页签对应的布局文件简单地以填满不同颜色来演示效果,一共3个布局文件。

3,activity

package com.sonar.android.push.demo.getui.activities;

import android.app.Activity;

import android.graphics.BitmapFactory;

import android.graphics.Matrix;

import android.os.Bundle;

import android.os.Handler;

import android.support.v4.view.ViewPager;

import android.util.DisplayMetrics;

import android.view.LayoutInflater;

import android.view.View;

import android.view.animation.Animation;

import android.view.animation.TranslateAnimation;

import android.widget.ArrayAdapter;

import android.widget.ImageView;

import android.widget.ListView;

import android.widget.TextView;

import com.handmark.pulltorefresh.library.PullToRefreshBase;

import com.handmark.pulltorefresh.library.PullToRefreshListView;

import com.sonar.android.push.demo.getui.R;

import com.sonar.android.push.demo.getui.adapters.MyPagerAdapter;

import java.util.ArrayList;

import java.util.List;

/**

* 使用PullToRefresh库实现下拉刷新和上拉加载更多

* Created by Administrator on 2016/10/26.

*/

public class ViewPagerActivity extends Activity implements View.OnClickListener{

ViewPager viewPager;

TextView tab1;

TextView tab2;

TextView tab3;

List pageList = new ArrayList<>();

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.layout_activity_viewpager);

setView();

initView();

setListener();

}

private void setView(){

this.viewPager = (ViewPager)findViewById(R.id.activity_viewpager_vp);

this.tab1 = (TextView)findViewById(R.id.activity_viewpager_tab1_tv);

this.tab2 = (TextView)findViewById(R.id.activity_viewpager_tab2_tv);

this.tab3 = (TextView)findViewById(R.id.activity_viewpager_tab3_tv);

}

private void initView(){

//设置

LayoutInflater layoutInflater = getLayoutInflater();

pageList.add(layoutInflater.inflate(R.layout.layout_viewpager_page1,null));

pageList.add(layoutInflater.inflate(R.layout.layout_viewpager_page2,null));

pageList.add(layoutInflater.inflate(R.layout.layout_viewpager_page3,null));

this.viewPager.setAdapter(new MyPagerAdapter(pageList));

this.viewPager.setCurrentItem(0);

InitImageView();

}

private void setListener() {

this.tab1.setOnClickListener(this);

this.tab2.setOnClickListener(this);

this.tab3.setOnClickListener(this);

this.viewPager.setOnPageChangeListener(new MyOnPageChangeListener());

}

@Override

public void onClick(View v) {

switch (v.getId()){

case R.id.activity_viewpager_tab1_tv:

changePage(0);

break;

case R.id.activity_viewpager_tab2_tv:

changePage(1);

break;

case R.id.activity_viewpager_tab3_tv:

changePage(2);

break;

default:

break;

}

}

private void changePage(int pageNo){

viewPager.setCurrentItem(pageNo);

}

private ImageView cursor;// 动画图片

private int offset = 0;// 动画图片偏移量

private int currIndex = 0;// 当前页卡编号

private int bmpW;// 动画图片宽度

/**

* 初始化动画

*/

private void InitImageView() {

cursor = (ImageView) findViewById(R.id.cursor);

bmpW = BitmapFactory.decodeResource(getResources(), R.drawable.alipay_icon)

.getWidth();// 获取图片宽度

DisplayMetrics dm = new DisplayMetrics();

getWindowManager().getDefaultDisplay().getMetrics(dm);

int screenW = dm.widthPixels;// 获取分辨率宽度

offset = (screenW / 3 – bmpW) / 2;// 计算偏移量

Matrix matrix = new Matrix();

matrix.postTranslate(offset, 0);

cursor.setImageMatrix(matrix);// 设置动画初始位置

}

/**

* 页卡切换监听

*/

class MyOnPageChangeListener implements ViewPager.OnPageChangeListener {

int one = offset * 2 + bmpW;// 页卡1 ->页卡2

偏移量

int two = one * 2;// 页卡1 ->页卡3

偏移量

@Override

public void onPageSelected(int arg0) {

Animation animation = null;

switch (arg0) {

case 0:

if (currIndex == 1) {

animation = new TranslateAnimation(one, 0, 0, 0);

} else if (currIndex == 2) {

animation = new TranslateAnimation(two, 0, 0, 0);

}

break;

case 1:

if (currIndex == 0) {

animation = new TranslateAnimation(offset, one, 0, 0);

} else if (currIndex == 2) {

animation = new TranslateAnimation(two, one, 0, 0);

}

break;

case 2:

if (currIndex == 0) {

animation = new TranslateAnimation(offset, two, 0, 0);

} else if (currIndex == 1) {

animation = new TranslateAnimation(one, two, 0, 0);

}

break;

}

currIndex = arg0;

animation.setFillAfter(true);// True:图片停在动画结束位置

animation.setDuration(300);

cursor.startAnimation(animation);

}

@Override

public void onPageScrolled(int arg0, float arg1, int arg2) {

}

@Override

public void onPageScrollStateChanged(int arg0) {

}

}

}

4,viewPager适配器

package com.sonar.android.push.demo.getui.adapters;

import android.os.Parcelable;

import android.support.v4.view.PagerAdapter;

import android.support.v4.view.ViewPager;

import android.view.View;

import android.view.ViewGroup;

import java.util.List;

/**

* Created by Administrator on 2016/10/26.

*/

public class MyPagerAdapter extends PagerAdapter{

List pageList;

public MyPagerAdapter(List pageList) {

this.pageList = pageList;

}

@Override

public void startUpdate(ViewGroup container) {

}

@Override

public void destroyItem(View container, int position, Object object) {

((ViewPager)container).removeView(pageList.get(position));

}

@Override

public Object instantiateItem(View container, int position) {

((ViewPager) container).addView(pageList.get(position), 0);

return pageList.get(position);

}

@Override

public Parcelable saveState() {

return null;

}

@Override

public void restoreState(Parcelable state, ClassLoader loader) {

}

@Override

public int getCount() {

return pageList.size();

}

@Override

public boolean isViewFromObject(View view, Object object) {

return view == object;

}

}

5,效果图

android本页切换子页,android ViewPager控件实现手势滑动切换页签-Fun言相关推荐

  1. C# (1)点击菜单跳出新窗体,(2)在主窗体中切换子窗体(pannel控件的使用)

    窗体设计,需要在点击菜单栏时显示不同的窗体 点击充值记录后显示出新窗体 实现效果 代码 点击充值信息在主窗体切换子窗体 实现效果 实现方法 (1)添加Pannel控件 (2)添加代码(书写在菜单栏的双 ...

  2. android控件跟随手势滑动改变位置

    要求: 1.通过手指移动来拖动图片   2.控制图片不能超出屏幕显示区域 技术点: 1.MotionEvent处理 2.对View进行动态定位(layout) activity_main.xml: & ...

  3. Android卡片滑动切换动画,Android原生ViewPager控件实现卡片翻动效果

    本文实例为大家分享了Android控件ViewPager实现卡片翻动效果的具体代码,供大家参考,具体内容如下 先放一张效果图: 想要实现这样的效果其实并不是太难,需要对ViewPager的一些细节属性 ...

  4. 微信小程序手把手教你实现类似Android中ViewPager控件效果

    微信小程序手把手教你实现类似Android中ViewPager控件效果 前言 需求分析 头部TAB 滑动的内容部分 最终版本 尾巴 前言 在做Android开发的时候,ViewPager是开发者使用频 ...

  5. android禁止下拉刷新,Android开发之无痕过渡下拉刷新控件的实现思路详解

    相信大家已经对下拉刷新熟悉得不能再熟悉了,市面上的下拉刷新琳琅满目,然而有很多在我看来略有缺陷,接下来我将说明一下存在的缺陷问题,然后提供一种思路来解决这一缺陷,废话不多说!往下看嘞! 1.市面一些下 ...

  6. android 应用内悬浮,Andorid 应用内悬浮控件实践方案总结

    推荐使用 FloatWindow 库实现悬浮窗,功能全面,链式调用,简洁清爽. 地址 : https://github.com/yhaolpz/FloatWindow 2017/12/30 更新: F ...

  7. 如何在Android实现桌面清理内存简单Widget小控件

    如何在Android实现桌面清理内存简单Widget小控件 我们经常会看到类似于360.金山手机卫士一类的软件会带一个widget小控件,显示在桌面上,上面会显示现有内存大小,然后会带一个按键功能来一 ...

  8. Android入门(二)——常见布局与控件

    文章目录 一.常见界面布局 1.线性布局 LinearLayout 2.相对布局 RelativeLayout 3.表格布局 TableLayout 4.帧布局 FrameLayout 二.常见界面控 ...

  9. android点击隐藏控件,Android编程实现点击EditText之外的控件隐藏软键盘功能

    本文实例讲述了Android编程实现点击EditText之外的控件隐藏软键盘功能.分享给大家供大家参考,具体如下: 工具类 ... public static void hideKeyboard(Co ...

最新文章

  1. UVA10294项链和手镯(等价类计数问题)
  2. 「Ubuntu: Conda」Conda相关命令
  3. python 保存csv文件
  4. Springboot第二篇:与前端fetch通信(附springboot解决跨域方法)
  5. 惠州交警携手高德地图 引导市民智慧出行
  6. kafka 在 360 商业化的实践
  7. Flask 源代码阅读笔记
  8. hadoo分布式安装
  9. 工具类与工具函数 —— NextPrime
  10. HDU 2602 Bone Collector 0/1背包
  11. php遍历目录与文件夹的多种方法详解
  12. 泰拉瑞亚服务器云存档文件夹,泰拉瑞亚助手常见问题 存档等问题解决方法
  13. 苹果发布蓝牙耳机新固件,耳机Find My功能越发普及
  14. 转载于掘金的vue3学习笔记
  15. 快来,票字版软件电子发票的设置方式(详细流程)
  16. E舞成名模拟器分析及下载地址
  17. The Movies Dataset(电影数据集)
  18. Scanner键盘录入
  19. 第二十二届中国文旅全球论坛新闻发布会在穗召开
  20. java实现第七届蓝桥杯圆圈舞

热门文章

  1. vue 项目常见功能(搜索 时间戳转换 过滤器)
  2. 【★】路由环路大总结!
  3. 组播协议——IGMP v2报文头介绍
  4. maven 下载源码
  5. 浏览器兼容:改写window.showModalDialog
  6. 长沙理工 ACM 数位 DP 1488
  7. 一种数据结构的封装模式
  8. 大数据_Flink_数据处理_运行时架构5_slot和任务调度---Flink工作笔记0020
  9. 大数据之-Hadoop3.x_MapReduce_数据压缩---大数据之hadoop3.x工作笔记0138
  10. AndroidStudio_Android Studio项目中报Call requires API level 18 (current min is 16)---Android原生开发工作笔记232