主题 : android设置水平、垂直滚动条自动滚动 复制链接 | 浏览器收藏 | 打印
欢迎加入清源的android开发交流群:314230976,加群时请验证:arm,谢谢!
级别: 侠客
UID: 94332
精华: 0
发帖: 72
金钱: 370 两
威望: 74 点
贡献值: 0 点
综合积分: 144 分
注册时间: 2013-07-14
最后登录: 2013-09-25
楼主  发表于: 2013-07-24 16:15

 android设置水平、垂直滚动条自动滚动

在做一个小项目时遇到需要随着手势翻页的同时,上面导航栏也需要随着而滑动,这样就需要在手势事件中调用滚动条的水平滑动事件。
总体效果图如下:

滚动部分布局XML片段:
复制代码
  1. [html] view plaincopy
  2. android:id="@+id/horizonMenu"  
  3. android:layout_width="match_parent"  
  4. android:layout_height="match_parent"  
  5. android:scrollbars="none" >  
  6. android:id="@+id/chart_navigate"  
  7. android:layout_width="match_parent"  
  8. android:layout_height="match_parent"  
  9. android:layout_alignParentLeft="true"  
  10. android:layout_gravity="top"  
  11. android:background="#ffffff"  
  12. android:orientation="horizontal"  
  13. android:layout_margin="0dp"  
  14. android:layout_marginBottom="1dip"  
  15. android:padding="0dp">

  
  
部分代码:
复制代码
  1. [java] view plaincopy
  2.   
  3. public class ChartFramgment extends Fragment {  
  4. private static View viewMain;  
  5. // the loading dialog after completed to login  
  6. private static LinearLayout linearLayout;  
  7. private static int navigateWidth = 0;  
  8. private static HorizontalScrollView horizontalScrollView;  
  9. private final static Handler handler = new Handler();  
  10. @Override  
  11. public View onCreateView(LayoutInflater inflater, ViewGroup container,  
  12. Bundle savedInstanceState) {  
  13. super.onCreateView(inflater, container, savedInstanceState);  
  14. // get the view by id in the framgment.  
  15. viewMain = inflater.inflate(R.layout.chart, container, false);  
  16. DisplayMetrics displaymetrics = new DisplayMetrics();  
  17. getActivity().getWindowManager().getDefaultDisplay()  
  18. .getMetrics(displaymetrics);  
  19. navigateWidth=(int)(displaymetrics.widthPixels*0.8);  
  20. horizontalScrollView = (HorizontalScrollView) viewMain  
  21. .findViewById(R.id.horizonMenu);  
  22. horizontalScrollView  
  23. .setLayoutParams(new android.widget.RelativeLayout.LayoutParams(  
  24. navigateWidth, 100));  
  25. linearLayout = (LinearLayout) viewMain  
  26. .findViewById(R.id.chart_navigate);  
  27. linearLayout.setOrientation(LinearLayout.HORIZONTAL);  
  28. return viewMain;  
  29. }  
  30.   
  31. public static void slipToNext() {  
  32. //滑动到下一页d的相关处理  
  33. //......  
  34. //导航滚动条随着水平滚动 ,这里必须放到handler里面异步处理滚动才会到位,否则滚动会是上次滚动的结果,总差那么一点。  
  35. handler.post(scrollHandler);  
  36. }  
  37.   
  38. public static void slipToBack() {  
  39. //滑动到上一页d的相关处理  
  40. //......  
  41. //导航滚动条随着水平滚动  
  42. handler.post(scrollHandler);  
  43. }  
  44. @Override  
  45. public void onCreate(Bundle savedInstanceState) {  
  46. super.onCreate(savedInstanceState);  
  47. }  
  48. private static Runnable scrollHandler = new Runnable() {  
  49. @Override  
  50. public void run() {  
  51. //计算滚动偏移量  
  52. int offSet = (linearLayout.getMeasuredWidth())  
  53. - horizontalScrollView.getWidth();  
  54. if (offSet < 0) {  
  55. offSet = 0;  
  56. }  
  57. //滑到制定位置  
  58. horizontalScrollView.scrollTo(offSet, 0);  
  59. }  
  60. };  
  61. }
以上是水平自动滚动的部分代码,垂直类似,做对应改动即可。
欢迎加入android开发交流群,群号是:314230976