当前位置:  编程技术>移动开发

android配合viewpager实现可滑动的标签栏示例分享

    来源: 互联网  发布时间:2014-10-23

    本文导语:  代码如下:package com.example.playtabtest.view; import com.example.playtabtest.R; import android.app.Activity;import android.content.Context;import android.support.v4.view.ViewPager;import android.support.v4.view.ViewPager.OnPageChangeListener;import android.util.AttributeSet;import android.u...

代码如下:

package com.example.playtabtest.view;

import com.example.playtabtest.R;

import android.app.Activity;
import android.content.Context;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.util.AttributeSet;
import android.util.DisplayMetrics;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.LinearInterpolator;
import android.view.animation.TranslateAnimation;
import android.widget.HorizontalScrollView;
import android.widget.ImageView;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.RadioGroup.OnCheckedChangeListener;

public class SyncHorizontalScrollView extends HorizontalScrollView {

 private View view;
 private ImageView leftImage;
 private ImageView rightImage;
 private int windowWitdh = 0;
 private Activity mContext;
 private RadioGroup rg_nav_content;
 private ImageView iv_nav_indicator;
 private LayoutInflater mInflater;
 private int indicatorWidth;// 每个标签所占的宽度
 private int currentIndicatorLeft = 0;// 当前所在标签页面的位移
 private ViewPager mViewPager;//与本view相关联的viewpager

 public SyncHorizontalScrollView(Context context) {
  super(context);
  // TODO Auto-generated constructor stub
 }

 public SyncHorizontalScrollView(Context context, AttributeSet attrs) {
  super(context, attrs);
  // TODO Auto-generated constructor stub
 }

 /**
  *
  * @param mViewPager与本view关联的viewpager
  * @param leftImage左箭头
  * @param rightImage右箭头
  * @param tabTitle 标签数组,对应各个标签的名称
  * @param count一页显示的标签数
  * @param context
  */
 public void setSomeParam(ViewPager mViewPager, ImageView leftImage,
   ImageView rightImage, String[] tabTitle, int count, Activity context) {
  this.mContext = context;
  this.mViewPager = mViewPager;
  mInflater = LayoutInflater.from(context);
  this.view = mInflater.inflate(R.layout.sync_hsv_item, null);
  this.addView(view);
  this.leftImage = leftImage;
  this.rightImage = rightImage;
  DisplayMetrics dm = new DisplayMetrics();
  context.getWindowManager().getDefaultDisplay().getMetrics(dm);
  windowWitdh = dm.widthPixels;
  indicatorWidth = windowWitdh / count;
  init(tabTitle);
  this.invalidate();
 }


 private void init(String[] tabTitle) {
  rg_nav_content = (RadioGroup) view.findViewById(R.id.rg_nav_content);
  iv_nav_indicator = (ImageView) view.findViewById(R.id.iv_nav_indicator);
  initIndicatorWidth();
  initNavigationHSV(tabTitle);
  setListener();
 }

 // 初始化滑动下标的宽
 private void initIndicatorWidth() {
  ViewGroup.LayoutParams cursor_Params = iv_nav_indicator
    .getLayoutParams();
  cursor_Params.width = indicatorWidth;
  iv_nav_indicator.setLayoutParams(cursor_Params);
 }

 // 添加顶部标签
 private void initNavigationHSV(String[] tabTitle) {
  rg_nav_content.removeAllViews();
  for (int i = 0; i < tabTitle.length; i++) {
   RadioButton rb = (RadioButton) mInflater.inflate(
     R.layout.nav_radiogroup_item, null);
   rb.setId(i);
   rb.setText(tabTitle[i]);
   rb.setLayoutParams(new LayoutParams(indicatorWidth,
     LayoutParams.MATCH_PARENT));
   rg_nav_content.addView(rb);
  }

 }

 private void setListener() {
  rg_nav_content
    .setOnCheckedChangeListener(new OnCheckedChangeListener() {
     @Override
     public void onCheckedChanged(RadioGroup group, int checkedId) {
      if (rg_nav_content.getChildAt(checkedId) != null) {
       TranslateAnimation animation = new TranslateAnimation(
         currentIndicatorLeft,
         ((RadioButton) rg_nav_content
           .getChildAt(checkedId)).getLeft(),
         0f, 0f);
       animation.setInterpolator(new LinearInterpolator());
       animation.setDuration(100);
       animation.setFillAfter(true);

       // 执行位移动画
       iv_nav_indicator.startAnimation(animation);
       mViewPager.setCurrentItem(checkedId); // ViewPager
                 // 跟随一起 切换
       // 记录当前 下标的距最左侧的 距离
       currentIndicatorLeft = ((RadioButton) rg_nav_content
         .getChildAt(checkedId)).getLeft();
       smoothScrollTo(
         (checkedId > 1 ? ((RadioButton) rg_nav_content
           .getChildAt(checkedId)).getLeft()
           : 0)
           - ((RadioButton) rg_nav_content
             .getChildAt(2)).getLeft(),
         0);
      }
     }
    });
 }

 /**
  * 模拟点击事件,供外部调用
  * @param position
  */
 public void performLabelClick(int position) {
  if (rg_nav_content != null && rg_nav_content.getChildCount() > position) {
   ((RadioButton) rg_nav_content.getChildAt(position)).performClick();
  }
 }

 // 显示和隐藏左右两边的箭头
 protected void onScrollChanged(int l, int t, int oldl, int oldt) {
  super.onScrollChanged(l, t, oldl, oldt);
  if (!mContext.isFinishing() && view != null && rightImage != null
    && leftImage != null) {
   if (view.getWidth()


    
 
 

您可能感兴趣的文章:

  • 滑动刷新的ListView Android PullToRefresh
  • android滑动解锁震动效果的开启和取消
  • android Gallery组件实现的iPhone图片滑动效果实例
  • 安卓(Android)中如何实现滑动导航
  • android开发教程之实现滑动关闭fragment示例
  • android 左右滑动+索引图标实现方法与代码
  • Android滑动式菜单 SlidingMenu
  • Android控件之SlidingDrawer(滑动式抽屉)详解与实例分享
  • android 通过向viewpage中添加listview来完成滑动效果(类似于qq滑动界面)
  • Android实现左右滑动效果的方法详解
  • 解析Android中实现滑动翻页之ViewFlipper的使用详解
  • android中实现指针滑动的动态效果方法
  • Android利用ViewPager实现滑动广告板实例源码
  • 如何在Android中实现渐显按钮的左右滑动效果
  • 如何在Android中实现左右滑动的指引效果
  • Android中实现可滑动的Tab的3种方式
  • android 九宫格滑动解锁开机实例源码学习
  • Android开发:TextView加入滚动条示例
  • android开发教程之switch控件使用示例
  • android开启免提切换功能示例
  • Android开发之注册登录方法示例
  • HTML标签参考手册 iis7站长之家
  • Android示例程序 apps-for-android
  • android网络编程之android连接网络的简单示例代码
  • android获取当前手机号示例程序
  • android读取assets文件示例
  • android读取raw文件示例
  • android实现来电静音示例(监听来电)
  • android开机自启动app示例分享
  • android开发教程之自定义控件checkbox的样式示例
  • Android创建文件实现对文件监听示例
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • android-viewpager-indicator
  • android教程viewpager自动循环和手动循环
  • Android ViewPager相册横向移动的实现方法
  • 使用ViewPager实现android软件使用向导功能实现步骤
  • 申请Android Map 的API Key(v2)的最新申请方式(SHA1密钥)
  • Android瀑布流实例 android_waterfall
  • Android开发需要的几点注意事项总结
  • Android系统自带样式 (android:theme)
  • android 4.0 托管进程介绍及优先级和回收机制
  • Android网络共享软件 Android Wifi Tether
  • Android访问与手机通讯相关类的介绍
  • Android 图标库 Android GraphView
  • Android及andriod无线网络Wifi开发的几点注意事项
  • 轻量级Android开发工具 Android Tools
  • Android 2.3 下StrictMode介绍
  • Android 开发环境 Android Studio
  • IDEA的Android开发插件 idea-android
  • Android手机事件提醒 Android Notifier
  • XBMC的Android客户端 android-xbmcremote
  • Android小游戏 Android Shapes
  • Android电池监控 Android Battery Dog
  • android开发:“android:WindowTitle”没有对应项no resource
  • Android 上类似IOS 的开关控件。 Android ToggleButton
  • Android 将 android view 的位置设为右下角的解决方法
  • Android 2D游戏引擎 Android Angle




  • 特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3