iis服务器助手广告
返回顶部
首页 > 资讯 > 移动开发 >android viewpaper实例探讨
  • 378
分享到

android viewpaper实例探讨

Android 2022-06-06 11:06:04 378人浏览 八月长安
摘要

一、首先,我们来看一下效果图,这是新浪微博的Tab滑动效果。我们可以手势滑动,也可以点击上面的头标进行切换。与此同方式,白色横条会移动到相应的页卡头标下。这是一个动画效果,白条

一、首先,我们来看一下效果图,这是新浪微博的Tab滑动效果。我们可以手势滑动,也可以点击上面的头标进行切换。与此同方式,白色横条会移动到相应的页卡头标下。这是一个动画效果,白条是缓慢滑动过去的。好了,接下来我们就来实现它。
二、在开始前,我们先要认识一个控件,ViewPager。它是Google SDk中自带的一个附加包的一个类,可以用来实现屏幕间的切换。这个附加包是Android-support-v4。jar,在最后的源码中会提供给大 家,在libs文件夹中。当然你也可以自己从网上搜索最新的版本。找到它后,我们需要在项目中添加
三、我们先做界面, 界面设计很简单,第一行三个头标,第二行动画图片,第三行页卡内容展示。
代码如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="Http://schemas.android.com/apk/res/android"
xmlns:umadsdk="http://schemas.android.com/apk/res/com.LoveBus"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<LinearLayout
android:id="@+id/linearLayout1"
android:layout_width="fill_parent"
android:layout_height="100.0dip"
android:background="#FFFFFF" >
<TextView
android:id="@+id/text1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1.0"
android:gravity="center"
android:text="页卡1"
android:textColor="#000000"
android:textSize="22.0dip" />
<TextView
android:id="@+id/text2"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1.0"
android:gravity="center"
android:text="页卡2"
android:textColor="#000000"
android:textSize="22.0dip" />
<TextView
android:id="@+id/text3"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1.0"
android:gravity="center"
android:text="页卡3"
android:textColor="#000000"
android:textSize="22.0dip" />
</LinearLayout>
<ImageView
android:id="@+id/cursor"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:scaleType="matrix"
android:src="@drawable/a" />
<android.support.v4.view.ViewPager
android:id="@+id/vPager"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_weight="1.0"
android:background="#000000"
android:flipInterval="30"
android:persistentDrawinGCache="animation" />
</LinearLayout>

我们要展示三个页卡,所以还需要三个页卡内容的界面设计,这里我们只设置了背景颜色,能起到区别作用即可。
代码如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:background="#158684" >
</LinearLayout>

四、代码部分要进行初始化的工作 (1) 先来变量的定义
代码如下:
private ViewPager mPager;//页卡内容
private List<View> listViews; // Tab页面列表
private ImageView cursor;// 动画图片
private TextView t1, t2, t3;// 页卡头标
private int offset = 0;// 动画图片偏移量
private int currIndex = 0;// 当前页卡编号
private int bmpW;// 动画图片宽度

(2) 初始化头标
代码如下:

private void InitTextView() {
t1 = (TextView) findViewById(R.id.text1);
t2 = (TextView) findViewById(R.id.text2)� �
t3 = (TextView) findViewById(R.id.text3);
t1.setOnClickListener(new MyOnClickListener(0));
t2.setOnClickListener(new MyOnClickListener(1));
t3.setOnClickListener(new MyOnClickListener(2));
}

public class MyOnClickListener implements View.OnClickListener {
private int index = 0;
public MyOnClickListener(int i) {
index = i;
}
@Override
public void onClick(View v) {
mPager.setCurrentItem(index);
}
};

(3) 初始化页卡内容区
代码如下:
<font color="#008000"><font color="black">  
  public class MyPagerAdapter extends PagerAdapter {
  public List<View> mListViews;
  public MyPagerAdapter(List<View> mListViews) {
  this.mListViews = mListViews;
  }
  @Override
  public void destroyItem(View arg0, int arg1, Object arg2) {
  ((ViewPager) arg0).removeView(mListViews.get(arg1));
  }
  @Override
  public void finishUpdate(View arg0) {
  }
  @Override
  public int getCount() {
  return mListViews.size();
  }
  @Override
  public Object instantiateItem(View arg0, int arg1) {
  ((ViewPager) arg0).addView(mListViews.get(arg1), 0);
  return mListViews.get(arg1);
  }
  @Override
  public boolean isViewFromObject(View arg0, Object arg1) {
  return arg0 == (arg1);
  }
  @Override
  public void restoreState(Parcelable arg0, ClassLoader arg1) {
  }
  @Override
  public Parcelable saveState() {
  return null;
  }
  @Override
  public void startUpdate(View arg0) {
  }
  }
</font></font>
这里我们实现了各页卡的装入和卸载 (4) 初始化动画

private void InitImageView() {
cursor = (ImageView) findViewById(R.id.cursor);
bmpW = BitmapFactory.decodeResource(getResources(), R.drawable.a)
.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);// 设置动画初始位置
}

根据屏幕的分辨率和图片的宽度计算动画移动的偏移量   
代码如下:
  
public class MyOnPageChangeListener implements 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) {   }   }

五、打完收工,快来看看自己的劳动成果吧


--结束END--

本文标题: android viewpaper实例探讨

本文链接: https://www.lsjlt.com/news/28104.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 探讨如何定义Javascript实例方法
    Javascript是一种广泛应用于Web前端开发的编程语言,它具有灵活的语法和强大的功能。在Javascript中,我们可以使用对象来构造数据模型,并为这些对象添加方法来实现各种行为。在本文中,我们将探讨如何定义Javascript实例方...
    99+
    2023-05-14
  • 如何用实例探讨.NET强命称的思路
    如何用实例探讨.NET强命称的思路,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。手头有一个行业软件,是需要插上加密狗才能正常运行的,C# / .Net Framework 1....
    99+
    2023-06-17
  • Go语言底层实现探讨
    标题:Go语言底层实现探讨:深入了解Go语言运行机制 正文: Go语言作为一门高效、简洁的编程语言,一直备受程序员们的喜爱。其强大的并发模型、垃圾回收机制和简洁的语法使得开发者们能够更...
    99+
    2024-03-13
    go语言 底层实现 探讨 内存占用
  • 深入探讨 Golang 接口的实现
    Golang(又称Go语言)是一门现代化的编程语言,它是由 Google 设计和维护的。Golang 是一种静态语言,它通过强类型和严格类型检查的方式来提高代码的可维护性和健壮性。其中一个最有趣的特性就是接口,本文将会深入探讨 Golang...
    99+
    2023-05-14
    Golang go语言 接口
  • 深入探讨golang的底层实现
    Golang是一种高效、现代化的编程语言,以其快速、简单和安全的开发模式,在近年来越来越受到开发者的欢迎。Go语言不仅支持多线程,还具有良好的并发开发能力,同时它也是一种非常底层的语言,这使得Go语言的底层实现得到了广泛关注。考虑到语言设计...
    99+
    2023-05-14
  • 探讨在JavaScript中如何实现addClass()
    JavaScript 是一门广泛使用的编程语言,在 Web 应用开发中,常常需要操作 HTML 元素的 class 属性来控制样式和行为。其中一个常用的方法就是 addClass,用于为指定元素添加一个或多个类名。在本文中,我们将探讨在 J...
    99+
    2023-05-14
  • Golang函数底层实现原理探讨
    Golang函数底层实现原理探讨Golang语言中的函数是非常重要的一个特性,但是很少有人关注其底层实现原理。本文将深入探讨Golang函数的底层实现原理,希望读者能够更好地理解和优化自己的代码。Golang函数的定义在Golang中,函数...
    99+
    2023-05-17
    函数 Golang 底层实现
  • 深入探讨Go语言函数的使用案例
    珍惜时间,勤奋学习!今天给大家带来《深入探讨Go语言函数的使用案例》,正文内容主要涉及到等等,如果你正在学习Golang,或者是对Golang有疑问,欢迎大家关注我!后面我会持续更新相关内容的,希望...
    99+
    2024-04-04
  • 实例探讨:使用PHP脚本在Linux服务器上实现并发处理
    概述:在当今互联网时代,高并发是互联网应用开发中非常重要的一个方面。针对高并发的处理,服务器端需要具备一定的并发处理能力,以提高系统性能和吞吐量。本文将介绍如何使用PHP脚本在Linux服务器上实现并发处理,并提供一些具体的代码示例。一、P...
    99+
    2023-10-21
    linux服务器 并发处理 PHP脚本
  • 怎样实现Java线程的深入探讨
    这篇文章将为大家详细讲解有关怎样实现Java线程的深入探讨,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1.什么是线程    一般来说,我们把正在计算机中执行的程序叫做&...
    99+
    2023-06-03
  • Vue自定义指令深入探讨实现
    目录指令自定义指令关于注册自定义指令全局注册局部注册自定义指令的钩子函数封装自定义指令指令 想要了解自定义指令,那肯定得先明白什么是指令。 指令的本质:语法糖,标志位。在编译阶段 r...
    99+
    2023-05-19
    Vue自定义指令 Vue自定义指令实现
  • Golang中的工厂模式实践与探讨
    工厂模式是一种设计模式,用于创建对象,无需指定具体的类,其优点包括解耦创建过程、可扩展性和灵活性,适用于创建过程复杂、需要动态选择产品或需要提供创建新产品类型能力的情况。 Go 中的工...
    99+
    2024-04-04
    golang 工厂模式
  • 如何探讨WinForm不同代码的实现
    这篇文章给大家介绍如何探讨WinForm不同代码的实现,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。在进入正文之前,想请大家先欣赏下面两段代码://这是一个控制台程序,请先添加System.Windows.Form.d...
    99+
    2023-06-17
  • 探讨PHP接口设计的实际意义
    PHP接口设计在当今互联网应用开发中扮演着至关重要的角色,它不仅为不同系统间的数据交换提供了便利,还为开发者提供了一种灵活、高效的方式来实现模块化设计和接口间的通信。本文将从实际意义和...
    99+
    2024-04-02
  • Go语言应用开发实践与探讨
    Go语言应用开发实践与探讨 近年来,随着云计算、大数据和人工智能等技术的迅猛发展,越来越多的开发者开始将目光投向了Go语言。作为一门出色的系统编程语言,Go语言以其高效率、简洁明了的语...
    99+
    2024-03-01
    go语言 应用开发 探讨 区块链 网络编程 区块链开发 标准库
  • Oracle中DECODE函数的高级技巧与案例探讨
    Oracle中的DECODE函数是一种非常强大且常用的函数,用于在数据查询和处理中实现逻辑判断和值替换。本文将探讨DECODE函数的高级技巧和应用案例,并给出具体的代码示例。 1. D...
    99+
    2024-03-07
    技巧 oracle decode 代码可读性
  • Android实现探探图片滑动效果
    之前一段时间,在朋友的推荐下,玩了探探这一款软件,初玩的时候,就发现,这款软件与一般的社交软件如陌陌之类的大相径庭,让我耳目一新,特别是探探里关于图片滑动操作让人觉得非常新鲜。所以在下通过网上之前的前辈的经历加上自己的理解,也来涉涉水。下面...
    99+
    2023-05-31
    android 图片滑动 roi
  • 深入探讨opencv图像矫正算法实战
    摘要 在机器视觉中,对于图像的处理有时候因为放置的原因导致ROI区域倾斜,这个时候我们会想办法把它纠正为正确的角度视角来,方便下一步的布局分析与文字识别,这个时候通过透视变换就可以取...
    99+
    2024-04-02
  • Go语言包管理实践:依赖性探讨
    go 语言包管理采用 go 模块系统,将依赖关系组织成树形结构,自动解析和下载依赖项。实战中,通过在 go.mod 文件中指定模块路径和版本号,即可引入第三方库。go 模块支持精确指定依...
    99+
    2024-04-03
    go语言 包管理
  • 探讨网站性能优化设计的最佳实践和案例分析
    网站性能优化设计的最佳实践与案例分析 随着网络技术的迅猛发展,越来越多的企业和个人都拥有了自己的网站。然而,随之而来的是网页加载速度变慢、响应时间变长等问题,给用户的体验产生了负面影响。因此,对于网站性能的优化设计成为了刻不容缓...
    99+
    2024-02-02
    性能优化 最佳实践 案例分析 前端优化 异步加载
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作