Android-自定义ViewPager
效果图:

布局去指定自定义ViewPager:
view.custom.shangguigucustomview.MyCustomViewPager
<!-- 仿viewpager -->
<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"
tools:context=".ShangGuiguTestActivity"> <RadioGroup
android:id="@+id/radio_group"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:orientation="horizontal"></RadioGroup> <view.custom.shangguigucustomview.MyCustomViewPager
android:id="@+id/mycustom_viewpager"
android:layout_width="match_parent"
android:layout_height="match_parent">
</view.custom.shangguigucustomview.MyCustomViewPager> </LinearLayout>
自定义ViewPager:
public class MyCustomViewPager extends ViewGroup {
private static final String TAG = MyCustomViewPager.class.getSimpleName();
/**
* 定义手势识别器(注意:手势识别器没有事件拦截的特点)
*/
private GestureDetector gestureDetector;
private Scroller mScroller;
public MyCustomViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
initView(context, attrs);
}
void initView(final Context context, AttributeSet attributeSet) {
mScroller = new Scroller(context);
gestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener(){
@Override
public void onLongPress(MotionEvent e) {
super.onLongPress(e);
Toast.makeText(context, "你长按了", Toast.LENGTH_SHORT).show();
}
@Override
public boolean onDoubleTap(MotionEvent e) {
Toast.makeText(context,"你双击了", Toast.LENGTH_SHORT).show();
return super.onDoubleTap(e);
}
/**
*
* @param e1 开始按下的玩意
* @param e2 up后的玩意
* @param distanceX 滑动的X轴
* @param distanceY 滑动的Y轴
* @return
*/
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
// 自己不变,让自己内部的内容发生移动
// scrollBy((int)distanceX, (int)distanceY); // 根据当前的位置进行移动
scrollBy((int)distanceX, 0); // getScaleY(); // 创建的时候默认的一个起始值
// scrollTo((int)distanceX, 0 ); // 相对的是坐标,By相对的是距离
return true; // 手势滑动 自己来处理,自己来消耗,所以retrun true;
}
});
}
/**
* 1.为什么在一级画面能够显示,而在一级画面里面到子画面无法显示?
* 就是因为一级画面在onLayout一级画面指定好位置了,系统就可以绘制好,而在画面中没有测量好,所以需要遍历子画面进行测量
* @param widthMeasureSpec
* @param heightMeasureSpec
*
* 在ViewGroup中没有测量自己,只有测量孩子
* ViewGroup (调用去测量孩子) --> View(测量自己)
*/
/**
*
* @param widthMeasureSpec 1073742904 这个参数是父层视图给当前视图的宽度 和 模式
* @param heightMeasureSpec 1073743468 这个参数是父层视图给当前视图的高度 和 模式
*/
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
Log.i(TAG, "widthMeasureSpec:" + widthMeasureSpec + " heightMeasureSpec:" + heightMeasureSpec);
// 得到宽高的Size
int sizeWidth = MeasureSpec.getSize(widthMeasureSpec);
int sizeHeight = MeasureSpec.getSize(heightMeasureSpec);
// 得到高宽的模式
int modeWidth = MeasureSpec.getMode(widthMeasureSpec);
int modeHeight = MeasureSpec.getMode(heightMeasureSpec);
Log.i(TAG, ">>>>>>>>
Android-自定义ViewPager的更多相关文章
- android 自定义Viewpager实现无限循环
; i < imageUrls.length; i ++){ ADInfo info = new ADInfo(); info.setUrl(imageUrls[i]); info.setCon ...
- 【转】android 自定义ViewPager,修改原动画
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/38026503 记 得第一次见到ViewPager这个控件,瞬间爱不释手,做东西的 ...
- Android 自定义 ViewPager 打造千变万化的图片切换效果
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/38026503 记得第一次见到ViewPager这个控件,瞬间爱不释手,做东西的主 ...
- Android 自定义viewpager 三张图片在同一屏幕轮播的效果
github:https://github.com/nickeyCode/RoundImageViewPager 说实话不知道怎么描述这个效果,在网页上见得跟多,公司要求做这个效果得时候不知道怎么用文 ...
- Android 自定义 HorizontalScrollView 打造再多图片(控件)也不怕 OOM 的横向滑动效果
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/38140505 自从Gallery被谷歌废弃以后,Google推荐使用ViewPa ...
- 三行代码接入,社交软件打字时底下弹出的表情布局,自定义ViewPager+页面点标+各种功能的android小框架。
(转载请声明出处:http://www.cnblogs.com/linguanh/) 前言: 接上次分享的 ListView 动态加载类,入口:http://www.cnblogs.com/lingu ...
- Android实现图片轮显效果——自定义ViewPager控件
一.问题概述 使用ViewPager控件实现可横向翻页.水平切换图片等效果,但ViewPager需要手动滑动才能切换页面,图片轮显效果的效果本质上就是在ViewPager控件的基础上让它能自动的进行切 ...
- Android之自定义ViewPager实现图片的无线轮播
PS:以前也写过关于图片轮播这一块的博客.不过写的很烂,并且很多情况没有考虑到(没有支持无线轮播,和手势点击事件).因此这里写一篇补上.也是当时太年轻了. 注:图片请放大后再看.否则看不清楚. 学习内 ...
- Android 自定义View合集
自定义控件学习 https://github.com/GcsSloop/AndroidNote/tree/master/CustomView 小良自定义控件合集 https://github.com/ ...
- Android 自定义title 之Action Bar
Android 自定义title 之Action Bar 2014-06-29 飞鹰飞龙... 摘自 博客园 阅 10519 转 25 转藏到我的图书馆 微信分享: Action Ba ...
随机推荐
- (转)ASP与sql存储过程
本文转载自:http://www.cnblogs.com/Spring/archive/2006/10/18/532817.aspx ASP与存储过程(Stored Procedures)的文章不少, ...
- postman 获取时间戳的方法 和md5加密的方法
获取时间戳方法: postman.setGlobalVariable("timestamp",Math.round(new Date().getTime())); 这整句是获取 ...
- Samba服务创建共享文件系统
Linux 系统中的Samba Linux系统中的Samba服务器又提供了另外一种技术来弥补这种安全性的不足的技术,那就是采用账户映射方式为Samba服务器提供虚拟账户(不与Linux系统中的用户账户 ...
- 阿里云VPS(win系统)装ROS教程
以下方法是VPS下的WIN系统下安装ROS的方法,LINUX暂时没有 VPS系统装2003或2008 ,建议2008 启动快,安全,但以下内容是在2003上测试的, 2003系统,2003设置开机自动 ...
- mysql修复表
数据库Table xxx is marked as crashed and should be repaired错误的解决方法服务器断电等原因可能导致数据表损坏,导致访问的时候提示:Table xxx ...
- 记一次全站升级https引发的一系列问题
中秋假期,闲来无事.花了一下午折腾了下https,说实话这年头还有网站不上https显然是折腾精神不够啊~ 1.SSL证书评估 看了市面上各种类型的证书,有收费的也有免费的,但是最终还是选择了腾讯云提 ...
- python值解析excel
原文:http://blog.csdn.net/tomatoandbeef/article/details/52253578 一.安装python和xlrd模块 python下载地址,安装好后要配置环 ...
- Telnet命令相关+DMZ主机+花生壳
Win7如何解决telnet不是内部或外部命令的方案! telnet用法 测试端口号
- Python新利器之pipenv(转)
pipenv 都包含什么? pipenv 是 Pipfile 主要倡导者.requests 作者 Kenneth Reitz 写的一个命令行工具,主要包含了Pipfile.pip.click.requ ...
- @@ERROR和@@ROWCOUNT的用法
1. @ERROR 当前一个语句遇到错误,则返回错误号,否则返回0.需要注意的是@ERROR在每一条语句执行后会被立刻重置,因此应该在要验证的语句执行后检查数值或者是将它保存到局部变量 ...