Android UI--ViewPager扩展Tab标签指示,android开发网上购物app
布局搞定之后,定义一个适配器如下:
package com.wwj.viewpager;
import java.util.List;
import android.support.v4.view.PagerAdapter;
import android.view.View;
import android.view.ViewGroup;
/**
-
ViewPager适配器
-
@author wwj
*/
public class ViewPagerAdapter extends PagerAdapter {
// 界面列表
private List views;
public ViewPagerAdapter(List views) {
this.views = views;
}
@Override
public void destroyItem(ViewGroup container, int position, Object o
bject) {
container.removeView(views.get(position));
}
@Override
public int getCount() {
if (views != null) {
return views.size();
}
return 0;
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
container.addView(views.get(position)); // 把被点击的图片放入缓存中
return views.get(position); // 返回被点击图片对象
}
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
return (arg0 == arg1);
}
}
适配器搞定之后,直接去Activity
package com.wwj.viewpager;
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.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.animation.Animation;
import android.view.animation.TranslateAnimation;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends Activity {
ViewPager viewPager;
ViewPagerAdapter pagerAdapter;
View view1, view2, view3, view4; // 页面
List views; // Tab页面列表
ImageView img_cursor; // 指示图片
TextView tv_guid1, tv_guid2, tv_guid3, tv_guid4; // 页卡头标
int offset = 0; // 偏移量
int currIndex = 0; // 当前页卡编号
int bmpW; // 图片宽度
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initImageView();
initTextView();
view1 = (View) findViewById(R.layout.viewpager1);
view2 = (View) findViewById(R.layout.viewpager2);
view3 = (View) findViewById(R.layout.viewpager3);
view4 = (View) findViewById(R.layout.viewpager4);
LayoutInflater inflater = LayoutInflater.from(this);
view1 = inflater.inflate(R.layout.viewpager1, null);
view2 = inflater.inflate(R.layout.viewpager2, null);
view3 = inflater.inflate(R.layout.viewpager3, null);
view4 = inflater.inflate(R.layout.viewpager4, null);
views = new ArrayList();
views.add(view1);
views.add(view2);
views.add(view3);
views.add(view4);
pagerAdapter = new ViewPagerAdapter(views);
viewPager = (ViewPager) findViewById(R.id.viewpager);
viewPager.setAdapter(pagerAdapter);
viewPager.setCurrentItem(0);
viewPager.setOnPageChangeListener(new MyOnPageChangeListener());
}
/**
-
初始化动画图片
*/
private void initImageView() {
img_cursor = (ImageView) findViewById(R.id.cursor);
bmpW = BitmapFactory.decodeResource(getResources(), R.drawable.cursor)
.getWidth();
DisplayMetrics dm = new DisplayMetrics();
this.getWindowManager().getDefaultDisplay().getMetrics(dm);
int screenW = dm.widthPixels; // 获取手机屏幕宽度分辨率
offset = (screenW / 4 - bmpW) / 2; // 获取图片偏移量
// imageview设置平移,使下划线平移到初始位置(平移一个offset)
Matrix matrix = new Matrix();
matrix.postTranslate(offset, 0);
img_cursor.setImageMatrix(matrix);
}
/**
-
初始化TextView控件,和注册监听器
*/
private void initTextView() {
tv_guid1 = (TextView) findViewById(R.id.tv_guid1);
tv_guid2 = (TextView) findViewById(R.id.tv_guid2);
tv_guid3 = (TextView) findViewById(R.id.tv_guid3);
tv_guid4 = (TextView) findViewById(R.id.tv_guid4);
tv_guid1.setOnClickListener(listener);
tv_guid2.setOnClickListener(listener);
tv_guid3.setOnClickListener(listener);
tv_guid4.setOnClickListener(listener);
}
OnClickListener listener = new OnClickListener() {
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.tv_guid1:
viewPager.setCurrentItem(0);
break;
case R.id.tv_guid2:
viewPager.setCurrentItem(1);
break;
case R.id.tv_guid3:
viewPager.setCurrentItem(2);
break;
case R.id.tv_guid4:
viewPager.setCurrentItem(3);
break;
default:
break;
}
}
};
// 当页面滑动时,开始动画并跳出Toast
public class MyOnPageChangeListener implements OnPageChangeListener {
private int one = offset * 2 + bmpW; // 页面1到页面2的偏移量
@Override
public void onPageScrollStateChanged(int arg0) {
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
}
ntItem(3);
break;
default:
break;
}
}
};
// 当页面滑动时,开始动画并跳出Toast
public class MyOnPageChangeListener implements OnPageChangeListener {
private int one = offset * 2 + bmpW; // 页面1到页面2的偏移量
@Override
public void onPageScrollStateChanged(int arg0) {
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
}
相关文章
- 一、File类的使用
目录 一、概念 二、创建类的实例 (一)常用构造器 1.构造器1(public File(String pathname)) 2.构造器2(public File(String parent,String child)) 3.构造器3(public File(File parent,…...
2023/6/8 8:48:30 - 操作系统原理笔记
系统 操作系统的概念功能与目标 操作系统定义 负责协调硬件, 软件等计算机资源的工作为上层应用程序, 用户提供简单易用的服务, 接口与环境是计算机中最接近硬件的软件 操作系统的功能 作为系统的管理者应该提供的功能 文件管理(打开文件夹) 内存管理(将数据装入内存) 处理…...
2023/5/28 16:02:51 - DHCP工作原理
DHCP工作原理图DHCP关键知识点DHCP服务器数据传输的端口为UDP67DHCP客户机数据传输的端口为UDP68客户机的源IP地址为:0.0.0.0客户机的目的IP地址:255.255.255.255DHCP过程详解发现阶段:DHCP客户机获取网络中DHCP服务器信息的阶段提供阶段:DHCP SERVER向DHCP客户机提供预分配…...
2023/5/29 3:33:46 - 图床搭建——Typora+PicGo+Gitee实现图片上传
前面讲到了图床搭建——TyporaPicGoGithub实现图片上传 图床搭建——TyporaPicGoGithub实现图片上传_惜洛-Jankin的博客-CSDN博客 今天讲讲如何用Gitee实现图片上传,首先还是需要用到PicGo软件,此处不再赘述,可以参考前文,下文介…...
2023/6/9 7:21:01 - 【好玩】树莓派超声波测距(实测有效)
树莓派超声波测距(实测有效)用具:代码:用具: 树莓派超声波测距模块 代码: import RPi.GPIO as GPIO import timeGPIO.setmode(GPIO.BCM) trig17 #发送接口,连接GPIO.17 echo27 #接收端口&…...
2023/5/25 10:27:50 - Python番外篇:Pygame给CSDN博客1周年的我送上一个蛋糕
hello,大家好,我是wangzirui32,今天我们来学习如何用Pygame给自己做一个博客生日贺卡。 前言 今天是我的博客1周年,从2021年1月17日到2022年1月17日,我经历了很多,也感受到了很多,我第一篇发布…...
2023/5/27 12:37:44 - npm WARN npm npm does not support Node.js v17.3.1解决方法
每次执行npm命令都会出现下面的警告,很恼火 在网上找了一些解决方法,都没有得到解决。 原因: 本质上就是npm和node不配套,需要升级npm 或者node。 查询npm和node匹配关系:以往的版本 | Node.js 网上找的方法&#…...
2023/6/5 1:55:39 - matlab学习笔记②
向量: 生成向量: ①直接输入:A [1,2,3,4,5,6] → 生成向量A,A是一维向量,具有六个分量 ②利用冒号表达式:x x0:step:xn →x0为首元素值,xn为为元素值限,step为每个元素与前一个…...
2023/6/1 17:10:14 - 计算机网络(自顶向下)笔记
本书是自顶向下进行的, 在第一章概述计算机网络的层次结构,从第二章开始从上到下一章介绍一层(大致), 最后是移动互联网/网络安全的内容 计算机网络中的每一层都具有一定的功能, 通过层间接口向上层提供服务, 通过调用下层接口实现一定的功能. 每一层的学习方式 原理 功能向…...
2023/5/28 11:39:24 - VMware替换:森林正在生长
随着全球范围内“云化”趋势不断普及,一些变化逐渐浮出水面。 在需求侧,“去IOE”浪潮(即去掉IBM小型机、Oracle数据库、EMC存储设备)正在朝去VMware、去AWS转向,国内的航空、教育、建筑、房地产、运输等领域…...
2023/6/9 7:19:50 - C++ 11特性深入学习
若一个类重载 符号 class_name& operator(const class_name& other) 通过函数返回一个临时的class来定义一个 已声明的 变量时 class_name c class_name(arg); 会进行较多的工作:先用arg的对应构造函数生成一个临时var, 然后重载函数将var作为参…...
2023/5/25 19:47:59 - Java初步--JDK安装与环境搭建
一、JDK的安装与卸载 下载JDK 1. 下载地址,点击进入: www.oracle.com/technetwork/java/javase/downloads/index.html 点击下载JDK,会出现如图所示的下载列表界面。首先,点击”Accept License Agreement”,然后选择…...
2023/5/25 14:58:56 - Qt 编译项目集 时出现winmain/qtmain_win.cpp:97: undefined reference to `qMain(int, char**) 未定义主函数
Qt 编译项目出现undefined reference to qMain[int, char**]未定义主函数未定义主函数 情况说明:一、问题截图二、问题分析三、解决办法情况说明: 是Qt项目使用 TEMPLATE subdirs 时,独立编译子项目时出现问题一、问题截图 二、问题分析 是…...
2023/5/29 20:18:39 - vue插件发布到npm(消息弹窗插件)
vue插件发布到npm(消息弹窗插件) 一、Demo描述 本次演示的是一个使用 vue 发布自己的插件——custom-message-song这是一个简单消息弹窗插件(为下一个重量级插件“自定义表单”插件发布做练习准备),这次就来小试牛刀,从插件的开…...
2023/6/1 0:05:15 - mote: voice commenting for Google Docs-谷歌文档实时共享语音协作工具
mote: voice commenting for Google Docs-谷歌文档实时共享语音协作工具-小白学堂...
2023/5/17 13:46:21 - Redhat7.3安装wget及yum命令方法
1、Wget安装 Redhat7.3最小安装wget命令也需要自己安装一下,wget下载地址:http://mirrors.163.com/centos/7/os/x86_64/Packages/wget-1.14-18.el7_6.1.x86_64.rpm 下载到/usr/local/soft目录后,执行rpm -ivh wget-1.14-18.el7_6.1.x86_64.…...
2023/6/5 1:09:18 - 王垠 40行代码
文章摘录自: 王垠的40行代码,究竟diao在哪里-阿里云开发者社区 王垠是谁? 不用我说了吧!!! 别傻谈,亮码瞧! ;; A simple CPS transformer which does proper tail-call and does not;; duplicate contexts for if-expressions.;; author: Yin Wang (yw21cs.indi…...
2023/6/3 18:08:25 - 10分钟教你写出 坦克大战【无敌版】
导读 最近读到一位大佬的游戏文章之后,手痒难耐就想自己也写一个小游戏。苦于没有游戏素材在网上搜也都是付费的,我就随便写了一点点来给自己解解馋。😗 好了废话不多说我们现在先试一下游戏效果。不好玩也不要说出来,嘻嘻嘻。后…...
2023/6/3 6:35:10 - Nginx反向代理中使用proxy_redirect重定向url
在使用Nginx做反向代理功能时,有时会出现重定向的url不是我们想要的url,这时候就可以使用proxy_redirect进行url重定向设置了。proxy_redirect功能比较强大,其作用是对发送给客户端的URL进行修改!!语法:proxy_redirect [ default|off|redirect replacement ];默认:proxy_…...
2023/6/5 14:15:29 - FLINK-CDC之sql方式的应用(mysql篇)
1、mysql中创建表,注意,mysql要开启binlog,否则报错 CREATE TABLE `cdc_user` ( `id` BIGINT(11) NOT NULL, `name` VARCHAR(50) NULL DEFAULT NULL COLLATE utf8mb4_bin, `type` VARCHAR(50) NULL DEFAULT NULL COLLATE utf8mb4_bin, `desc` TEXT NULL DEF…...
2023/5/31 23:17:50
最新文章
- react设计模式,jsx
1.修改配置项: eject:暴露配置项!!!一旦暴露了就无法还原回去 会报错。这个错误:我们刚才把代码改了,在暴露之前,先让我们把代码提交到git历史区保留下来—防止暴露后的代码覆盖了我们该的代码 …...
2023/6/9 13:13:25 - 2023免联考双证1年学制的中国人民大学与加拿大女王大学金融硕士,别错过
就像上个世纪,有个中专或者师范毕业学历就感觉光宗耀祖了一样。可当下,即便你是研究生学历,在企业也并非是最有发展的,因为硕士研究生已经成为进入职场的基本条件了。如果你的学历还有所欠缺,那么免联考双证1年学制的中…...
2023/6/9 13:13:15 - MySQL底层数据结构
1、引入 一个sql语句在mysql中究竟是如何运行的?又应该通过怎样的方式去查找我们要找的数据?这里就涉及到几种存储数据的算法; 可以做索引的数据结构有数组、链表、二叉搜索树和B树(B-树、B树)。 2、各种数据结构 …...
2023/6/9 13:12:57 - taobao平台上关键字的API接口接入说明
淘宝API接口是一个丰富的接口库,提供了各种各样的接口供开发者使用。满足多语言开发。以下是一些常见的淘宝API接口及其代码示例。 1. 搜索商品API接口 该API提供了关键字搜索淘宝商品的功能,可以使用各种编程语言来访问。以下代码段展示了使用Python来…...
2023/6/9 13:12:39 - JDK8-1-Lambda表达式(3)-函数式接口
JDK8-1-Lambda表达式(3)-函数式接口 有且仅有一个抽象方法的接口称为函数式接口,上文 中 java.util.function.Predicate 接口就是一个函数式接口,Java 8中引入的函数式接口定义在 java.util.function 包下 java.util.function.P…...
2023/6/9 13:12:09 - 在webpack中使用Eslint
一、Eslint介绍 要在webpack中使用Eslint首先我们先了解下什么是Eslint 1. 什么是Eslint ESLint是一个用于在JavaScript代码中发现和报告问题的静态代码分析工具。它可以检测常见的编码错误,如拼写错误、变量未声明、使用未定义的变量等,还可以检测代…...
2023/6/9 13:11:58 - 过五关斩六将,欧科云链荣膺2023安博会“创新产品优秀奖”
6月7日,由中华人民共和国公安部指导、中华人民共和国商务部批准,公安部主管的中国安全防范产品行业协会主办和承办的2023中国国际社会公共安全产品博览会(以下简称:安博会)正式开幕。 此次安博会,欧科云链携…...
2023/6/9 13:11:30 - 【大数据之路5-2】Hive 全调优
Hive 全调优 1. 调优概述2. 调优具体细节1. Hive 建表设计层面1. 利用分区表优化2. 利用分桶表优化3. 选择合适的文件存储格式4. 选择合适的压缩格式2. HQL 语法和运行参数层面1. 查看 Hive 执行计划2. 列裁剪3. 谓词下推4. 分区裁剪5. 合并小文件6. 合理设置 MapTask 并行度7.…...
2023/6/9 13:11:10 - 《计算机组成原理》期末考试复习提纲+手写练习题+知识点总结(10个考点总结梳理+作业测试手写详细解答)
待完善 (一)给出一个分别用补码和 IEEE754 法表示的 32 位数,如何求真值? (二) 给定两个定点小数的真值,如何求原码补码变形补码(扩展2个符号位,用于溢出判断)? 经典例…...
2023/6/9 13:10:52 - 6.9 条件变量的使用及注意事项
目录 条件变量 使用步骤: 初始化: 生产资源线程: 开始产生资源 消费者线程: 条件变量 应用场景:生产者消费者问题,是线程同步的一种手段。 必要性:为了实现等待某个资源,让线…...
2023/6/9 13:10:25 - 安装Redis三主三从
安装Redis 下载地址:https://redis.io/download/#redis-downloads 安装过程 cd /redis/redis-6.0.5make install修改配置文件 vim redis.confdaemonize yes dir "/data/soft/redis-7.0.11/6379/" cluster-enabled yes cluster-config-file "/da…...
2023/6/9 13:10:10 - 市场类型与完全竞争市场
短期完全竞争市场 区分市场类型的几条标准: 生产者的数量商品的同质性(差异化程度)进出市场的障碍信息是否完全市场类型: 完全垄断寡头垄断垄断性竞争完全竞争完全竞争市场的特征: 企业:数目多&规模小产品:同质化进出:自由 完全竞争市场上的企业是价格接受者最优产…...
2023/6/9 13:09:51 - 互联网摸鱼日报(2023-06-09)
互联网摸鱼日报(2023-06-09) InfoQ 热门话题 阿里大模型又有新进展:时间、空间可控的视频生成模型VideoComposer正式问世 趣丸科技媒体算法负责人马金龙确认出席 ArchSummit 深圳 百度智能云技术委员会主席王耀确认担任QCon联席主席并将发表主题演讲 继Stabilit…...
2023/6/9 13:09:38 - ansible:command not foundnon-zero return code 解决方法
问题现象 使用ansible命令行执行远程命令 使用command模块,出现报错:[Errno 2] No such file or directory 一样的命令换shell模块,出现报错:/bin/sh: ifconfig: command not foundnon-zero return code 问题原因 通过shell模块…...
2023/6/9 13:09:24 - 拖拽(QT)
一、拖放(Drag and Drop)的概念 拖放提供了一种简单的可视化机制,用户可以使用该机制在应用程序之间和内部传输信息。 拖放在功能上类似于粘贴板机制。 二、拖放类 这些类处理拖放和必要的mime类型编码和解码。 QDrag: 支持…...
2023/6/9 13:08:47 - CRM系统排行榜TOP10——2023年度
在当今竞争激烈的市场环境中,CRM客户系统是企业必备的管理工具,它可以帮助企业管理客户数据,优化业务流程,实现业绩增长。那么有哪些优秀的CRM系统呢?下面请看全球2023年CRM管理系统十大排行榜。 全球2023年CRM管理系…...
2023/6/9 13:07:35 - 线程池源码解读及原理
前言 大龄程序员老王 老王是一个已经北漂十多年的程序员,岁数大了,加班加不过年轻人,升迁也无望,于是拿着手里的一些积蓄,回老家转行创业。他选择了洗浴行业,开一家洗浴中心,没错,一…...
2023/6/9 13:07:19 - Lambda表达式 函数式接口 Stream流
目录 一. Lambda表达式 1. 函数式编程思想概述 2. Lambda的优化 3. Lambda的格式 标准格式: 参数和返回值: 省略格式: 4. Lambda的前提条件 二. 函数式接口 1. 概述 格式 FunctionalInterface注解 2. 常用函数式接口 Supplier接口 Consumer接口 Function接口 P…...
2023/6/9 13:07:02 - 【Android】WMS(一)Window的类型和标志
Window、WindowManager、WMS区别 Window: Window 是 Android 中的一个视图容器,代表整个屏幕或 Activity 的一部分。每个 Window 都有自己的 Surface 对象,Surface 对象具有绘制和渲染功能,可以显示 View 和其他元素。在 Androi…...
2023/6/9 13:06:45 - Meetup 报名|06.17 StarRocks Friends 与你相约上海
StarRocks & Friends 是由 StarRocks 社区发起的城市线下 meetup,旨在联合社区与行业的专家小伙伴们分享基于 StarRocks 的最佳实践、大数据分析的前沿技术和 StarRocks 生态融合等热门话题。 不远千里奔赴,只为与你相聚。这个夏天,让我们…...
2023/6/9 13:06:31