- 浏览: 84048 次
- 性别:
- 来自: 成都
最新评论
-
284772894:
好文章,谢谢
android硬件传感器 -
康妮西:
求这个View的解释望博主联系,我的联系方式:kangnixi ...
让scrollview在滚动的过程中自动定位页的边边 -
muyu114:
你这个是啥意思啊,有什么效果没有
让scrollview在滚动的过程中自动定位页的边边
/** * The Class PageScrollView, we can scroll the pages in this component. */ public class PageScrollView extends LinearLayout { /** The context. */ private Context mContext; /** The adapter used to get the view of each page. */ private BaseAdapter mAdapter; /** The page count. */ private int mPageCount = 0; /** The current page index. */ private int mCurrPageIndex = 0; /** The scroll view in this component. */ private HorizontalScrollView mScrollView; /** The target parent view for each page. */ private LinearLayout mPageContent; /** The velocity tracker. */ private VelocityTracker mVelocityTracker; /** The width for each page. */ private int mWidth; /** The maximum velocity. */ private int mMaximumVelocity; /** The change. */ private boolean mChange = false; /** The Constant SNAP_VELOCITY. */ private static final int SNAP_VELOCITY = 500; /** The Constant PAGE_FACTOR. */ private static final int PAGE_FACTOR = 3; /** The units parameter for velocity. */ private static final int VELOCITY_UNITS = 1000; /** * Instantiates a new page scroll view. * * @param context the context */ public PageScrollView(Context context) { super(context); mContext = context; } /** * Instantiates a new page scroll view. * * @param context the context * @param attrs the attrs */ public PageScrollView(Context context, AttributeSet attrs) { super(context, attrs); mContext = context; } /** * Sets the adapter. * * @param adapter the adapter * @param with the with for each page */ public void setAdapter(BaseAdapter adapter, int with) { if (adapter == null) { return; } mAdapter = adapter; mWidth = with; initUI(); bindLayoutUI(); } /** * Inits the ui. */ private void initUI() { this.removeAllViews(); mScrollView = new HorizontalScrollView(mContext); mScrollView.setHorizontalScrollBarEnabled(false); mScrollView.setLayoutParams(new ViewGroup.LayoutParams( ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.FILL_PARENT)); mPageContent = new LinearLayout(mContext); mPageContent.setLayoutParams(new LinearLayout.LayoutParams( LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.FILL_PARENT)); //mPageContent.setGravity(Gravity.CENTER); mPageContent.setOrientation(HORIZONTAL); mScrollView.setOnTouchListener(mTouchListener); this.addView(mScrollView); mScrollView.addView(mPageContent); // FIXME: width is a problem sometimes! final LinearLayout.LayoutParams lp = (LinearLayout.LayoutParams) this.getLayoutParams(); if (!(lp.width == LinearLayout.LayoutParams.FILL_PARENT || lp.width == LinearLayout.LayoutParams.WRAP_CONTENT)) { mWidth = lp.width; } final ViewConfiguration configuration = ViewConfiguration.get(mContext); mMaximumVelocity = configuration.getScaledMaximumFlingVelocity(); } /** * Bind layout ui, add pages to this component. */ private void bindLayoutUI() { mPageCount = mAdapter.getCount(); final LinearLayout.LayoutParams params = new LinearLayout.LayoutParams( mWidth, LinearLayout.LayoutParams.FILL_PARENT); // params.gravity = Gravity.CENTER; for (int i = 0; i < mPageCount; i++) { final View v = mAdapter.getView(i, null, null); mPageContent.addView(v, params); } } /** * Gets the current page index. * * @return the current page index */ public int getCurrentPageIndex() { return mCurrPageIndex; } /** The m touch listener. */ private View.OnTouchListener mTouchListener = new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { final int action = event.getAction(); if (mVelocityTracker == null) { mVelocityTracker = VelocityTracker.obtain(); } mVelocityTracker.addMovement(event); switch (action) { case MotionEvent.ACTION_UP: final VelocityTracker velocityTracker = mVelocityTracker; velocityTracker.computeCurrentVelocity(VELOCITY_UNITS, mMaximumVelocity); final int velocityX = (int) velocityTracker.getXVelocity(); final int scrollX = mScrollView.getScrollX(); final int deltaX = (int) (scrollX - mCurrPageIndex * mWidth); if (((velocityX > SNAP_VELOCITY) || (deltaX < -mWidth / PAGE_FACTOR)) && mCurrPageIndex > 0) { mCurrPageIndex -= 1; mChange = true; } else if (((velocityX < -SNAP_VELOCITY) || (deltaX > mWidth / PAGE_FACTOR)) && mCurrPageIndex < (mPageCount - 1)) { mCurrPageIndex += 1; mChange = true; } mScrollView.smoothScrollTo(mCurrPageIndex * mWidth, 0); if (mChange) { if (mOnPageChangeListener != null) { mOnPageChangeListener.onPageChange(); } mChange = false; } if (mVelocityTracker != null) { mVelocityTracker.recycle(); mVelocityTracker = null; } return true; // break; default: break; } return false; } }; /** * The listener interface for receiving onPageChange events. * The class that is interested in processing a onPageChange * event implements this interface, and the object created * with that class is registered with a component using the * component's <code>addonPageChangeListener<code> method. When * the onPageChange event occurs, that object's appropriate * method is invoked. * * @see onPageChangeEvent */ public interface OnPageChangeListener { /** * On page change. */ void onPageChange(); } /** The m on page change listener. */ private OnPageChangeListener mOnPageChangeListener; /** * Sets the on page change listener. * * @param l the new on page change listener */ public void setOnPageChangeListener(OnPageChangeListener l) { mOnPageChangeListener = l; } /** * Sets the page index. * * @param index the new page index */ public void setPageIndex(int index) { if (index < 0 || index > mPageCount - 1 || index == mCurrPageIndex) { return; } mCurrPageIndex = index; mScrollView.smoothScrollTo(mCurrPageIndex * mWidth, 0); } }
评论
2 楼
康妮西
2011-06-09
求这个View的解释
望博主联系,我的联系方式:
kangnixi@gmail.com 或 QQ: 1047286578
望博主联系,我的联系方式:
kangnixi@gmail.com 或 QQ: 1047286578
1 楼
muyu114
2011-05-16
你这个是啥意思啊,有什么效果没有
发表评论
-
Android_SDK_NDK_JNI
2014-09-10 12:26 722Android SDK、NDK、JNI的简 ... -
如何检查apk是否签名
2012-02-22 16:46 2487Use this command : (Jarsigner i ... -
切割bitmap
2011-11-15 16:09 973Bitmap resource = BitmapFactory ... -
TextView控件属性列表
2011-10-08 15:58 1190纯属转载: http://www.cnbl ... -
元数据Meta Data
2011-09-30 16:30 1143<meta-data andr ... -
Android UI Operation in Thread
2011-09-21 17:16 1140Android UI Operation in Thread ... -
系统自带样式Android:theme
2011-06-23 15:58 2257Android应用开发——系统自带样式Android:them ... -
EditText自动获取焦点并弹出输入法的问题
2011-06-16 16:25 50441.每次启动新的Activity的时候,输入法总是弹出来,太烦 ... -
Service Broadcast BroadcastReceiver AlarmManager,Notification利用service定时/周期性发送广播
2011-05-31 16:35 38741.如题 主要实现 1.启动service,关 ... -
android硬件传感器
2011-05-30 16:07 13376纯属转载:http://dev.10086 ... -
权限permission
2011-05-27 18:03 1279纯属于转载: http://blog.csdn.net/ ... -
读写系统设置——日期与时间使用网络提供的值(时间与网络同步)
2011-05-27 17:19 2534//读_1.带默认参数的 Settings.Syste ... -
读写系统设置
2011-05-27 17:13 1810Android的很多设置想关的东西都存储在数据库中 andro ... -
Display_获取屏幕宽高
2011-05-06 12:19 975public static void intScreen(A ... -
seletctAll___利用ScrollView+RadioGroup+RadioButton实现相似互斥
2011-05-03 17:58 2091假如你有多个匹配list,在这些匹配list中存在这样的一些匹 ... -
selectAll___CheckBox in ListView
2011-05-03 17:32 14551.如果你有一个ListView,listView的 adap ... -
Layout___模块重用之include布局整合
2011-04-06 14:04 1359在Android的开发中,我们知道布局文件可以让我们很 ... -
value-string
2011-04-06 13:36 2091我们知道在android的value文件夹下,string.x ... -
利用PorterDuff.Mode做橡皮擦效果
2011-04-01 18:03 10760http://stackoverflow.com/questi ... -
UI___tab view 的实现
2011-03-24 15:19 1985一.通过xml文件实现 1.创建一个tab iew,所需的x ...
相关推荐
在ScrollView滚动时,我们可以更新UIPageControl的currentPage属性,让用户知道当前显示的是哪一页。在"UIPageControlDemo"这个项目文件中,很可能包含了如何将ScrollView和UIPageControl结合使用的示例代码。 在...
而在自动滚动过程中,如果检测到用户开始滑动,则暂停自动滚动。 在实际开发中,我们还可以添加一些额外的功能,比如添加页码指示器,显示当前显示的是第几张图片;或者添加动画效果,让图片的切换更自然流畅。此外...
本篇文章将深入探讨如何在Android中实现ScrollView的自动滚动,并结合“ScrollView自动滚动”这一主题,解析相关知识点。 首先,我们要了解ScrollView的基本用法。ScrollView是一个可以包含单个垂直布局的容器,它...
在Android开发中,ScrollView是一个非常常见的布局控件,它允许用户在单个屏幕上滚动查看超过一屏幕内容的视图。ScrollView通常用于包含多个其他视图,如TextView、ImageView或者LinearLayout等,以提供垂直滚动功能...
3. **平滑过渡**:为了使滚动看起来平滑,我们需要在滚动过程中隐藏或显示复制的视图,确保滚动过程中的内容切换不突兀。 4. **监听器和回调**:可以设置一个滚动监听器,当滚动到一定位置时触发回调,更新数据显示...
在ScrollView中嵌套GridView时,需要注意避免冲突,因为两者都有滚动功能,合理配置可以使用户体验更佳。 接下来,我们关注GridView。GridView是基于Adapter的控件,它可以动态加载数据并将其组织成网格形式。每个...
在Swift中,我们可以使用`UIView.animate(withDuration:)`方法来平滑地改变`contentOffset`,实现自动滚动效果。例如: ```swift UIView.animate(withDuration: 1.0) { self.scrollView.contentOffset = CGPoint(x...
显示dialog, Scrollview自动滚动
在Android开发中,ScrollView是一个非常常用的布局控件,它允许用户在内容超出屏幕时通过滚动查看更多的信息。本文将深入探讨如何实现一个ScrollView动画滚动到顶部的功能,这在很多应用场景中都非常有用,例如用户...
在本教程中,我们将深入探讨如何设置ScrollViewer的滚动条以及如何实现上一页、下一页的功能。 首先,让我们了解ScrollViewer的基本用法。ScrollViewer是一个可以嵌套其他控件的容器,当其内容超出边界时,会自动...
简单几句代码就可以集成无限滚动的ScrollView。 通过新的方式去实现无限滚动功能,模式采用类似... 摒弃了普通思路在didScroll这个代理里面去翻页,优化了翻页的算法,手动滑动过程中自动滑动和手动滑动不相互影响。
然而,当需要让ScrollView平滑地滚动到特定位置时,标准的`scrollTo()`方法可能会表现出不理想的效果,因为它会立即跳转到指定位置,缺乏平滑过渡,这在用户体验上可能显得生硬。本篇将详细介绍如何实现ScrollView...
在Android开发中,ScrollView是常用的布局控件,用于实现单向滚动,但有时我们需要实现一个可以双向滚动的视图,这就涉及到了自定义组件的知识。本文将深入解析如何实现一个支持垂直和水平双向滚动的ScrollView。 ...
ScrollView是iOS中用于展示可滚动内容的基础控件,它可以容纳多个视图并允许用户上下左右滚动查看。实现ScrollView的无限滚动,关键在于正确设置其内容尺寸和滚动方向,以及在适当的时候重用视图以节省内存。 为了...
本项目“Unity嵌套滚动ScrollView.zip”着重探讨了如何在Unity中实现ScrollView的嵌套,即在一个ScrollView内嵌入另一个ScrollView,以创建横竖滑动的复杂布局。 首先,我们关注的核心文件是"CustomScrollRect.cs...
unity UGUI ScrollView 滚动条循环开发插件 ,
在Unity引擎中,滚动条(ScrollView)是一种常用的游戏界面元素,尤其在实现列表或轮播图等场景中不可或缺。本文将深入探讨如何实现"Unity滚动条ScrollView自动居中、缩放、变暗扩展"这一技术。 首先,让我们理解...
在iOS开发中,`UIScrollView` 是一个非常重要的控件,它允许用户在内容超过视图范围时滚动查看。"scrollView循环滚动"这个话题涉及到如何使`UIScrollView`的内容无限循环,就像一个轮播图或者瀑布流展示那样。这种...
对应这种页面结构应该毫无疑问是最底层是一个纵向滚动的scrollView,它的页面上面放一个固定高度的header,紧接着下面一个支持横向滚动切换的容器scrollView,容器上面才是各个页面具体的tableView,如下图: ...
在创建“自动循环滚动”的`UIScrollView`时,我们需要实现两个主要功能:一是让`UIScrollView`自动滚动,二是实现内容的无缝循环。 首先,自动滚动通常是通过定时器(`NSTimer`或`CADisplayLink`)来实现的。我们...