积累系统性知识
积聚技术精华
  首页    个人中心    撰写积文    建立课题    订立目标    整理积文    管理课题    管理目标    技能Get    代码积累 
Android-自定义多标题栏组件
error997 (error997)    2015-05-10 19:11:14      目标    课题
   1如图,当我们的项目有很多子项标题的时候.需要对标题实现左右滑动.点击标题切换Fragment.当滑动最左边的时候左箭头消失,滑至右边的时候同理.右箭头消失.
   1)因为我们要对滑动实现弹力效果.故应该重写横向滑动(onScrollChanged()监听器用于对左右滑动框显示控制)

切换到: 纯代码  
   
/** 
 * @author Lean 
 */  
public class BounceHorizontalScrollView extends HorizontalScrollView {  
  
    private static final int MAX_X_OVERSCROLL_DISTANCE = 30;// 最大Y轴移动尺寸   
    private Context mContext;  
    private int mMaxYOverscrollDistance;  
    private View mLeftIndicator;  
    private View mRightIndicator;  
  
    public BounceHorizontalScrollView(Context context, AttributeSet attrs) {  
        super(context, attrs);  
        mContext = context;  
        initBounceView();  
    }  
      
    public void setIndicator(View leftView,View rightView){  
        mLeftIndicator=leftView;  
        mRightIndicator=rightView;  
    }  
  
    private void initBounceView() {  
        final DisplayMetrics metrics = mContext.getResources().getDisplayMetrics();  
        final float density = metrics.density;  
        mMaxYOverscrollDistance = (int) (density * MAX_X_OVERSCROLL_DISTANCE);  
    }  
  
    @Override  
    @SuppressLint("NewApi")  
    protected boolean overScrollBy(int deltaX, int deltaY, int scrollX, int scrollY, int scrollRangeX, int scrollRangeY, int maxOverScrollX, int maxOverScrollY, boolean isTouchEvent) {  
        return super.overScrollBy(deltaX, deltaY, scrollX, scrollY, scrollRangeX, scrollRangeY, mMaxYOverscrollDistance,maxOverScrollY, isTouchEvent);  
    }  
  
    @Override  
    protected void onScrollChanged(int l, int t, int oldl, int oldt) {  
        super.onScrollChanged(l, t, oldl, oldt);  
        if (mLeftIndicator!=null&&mRightIndicator!=null) {  
            if (l<=0) {  
                mLeftIndicator.setVisibility(View.GONE);  
                mRightIndicator.setVisibility(View.VISIBLE);  
            }if (l==180) {  
                mLeftIndicator.setVisibility(View.VISIBLE);  
                mRightIndicator.setVisibility(View.GONE);  
            }else if(l<180&&l>0) {  
                mLeftIndicator.setVisibility(View.VISIBLE);  
                mRightIndicator.setVisibility(View.VISIBLE);  
            }  
        }  
    }  
      
}


   /**
 * @author Lean
 */
public class BounceHorizontalScrollView extends HorizontalScrollView {

   private static final int MAX_X_OVERSCROLL_DISTANCE = 30;// 最大Y轴移动尺寸
   private Context mContext;
   private int mMaxYOverscrollDistance;
   private View mLeftIndicator;
   private View mRightIndicator;

   public BounceHorizontalScrollView(Context context, AttributeSet attrs) {
      super(context, attrs);
      mContext = context;
      initBounceView();
   }
   
   public void setIndicator(View leftView,View rightView){
      mLeftIndicator=leftView;
      mRightIndicator=rightView;
   }

   private void initBounceView() {
      final DisplayMetrics metrics = mContext.getResources().getDisplayMetrics();
      final float density = metrics.density;
      mMaxYOverscrollDistance = (int) (density * MAX_X_OVERSCROLL_DISTANCE);
   }

   @Override
   @SuppressLint("NewApi")
   protected boolean overScrollBy(int deltaX, int deltaY, int scrollX, int scrollY, int scrollRangeX, int scrollRangeY, int maxOverScrollX, int maxOverScrollY, boolean isTouchEvent) {
      return super.overScrollBy(deltaX, deltaY, scrollX, scrollY, scrollRangeX, scrollRangeY, mMaxYOverscrollDistance,maxOverScrollY, isTouchEvent);
   }

   @Override
   protected void onScrollChanged(int l, int t, int oldl, int oldt) {
      super.onScrollChanged(l, t, oldl, oldt);
      if (mLeftIndicator!=null&&mRightIndicator!=null) {
         if (l<=0) {
            mLeftIndicator.setVisibility(View.GONE);
            mRightIndicator.setVisibility(View.VISIBLE);
         }if (l==180) {
            mLeftIndicator.setVisibility(View.VISIBLE);
            mRightIndicator.setVisibility(View.GONE);
         }else if(l<180&&l>0) {
            mLeftIndicator.setVisibility(View.VISIBLE);
            mRightIndicator.setVisibility(View.VISIBLE);
         }
      }
   }
   
}
   箭头设置进滑动界面.
   因为点击后需要对外回调点击事件,因此需要把点击事件的任务交付给外面的业务类.

切换到: 纯代码  
   
/** 
 *      健康标题 
 * 
 *  @author Lean  @date:2014-8-28   
 */  
public class TitleFrameView extends FrameLayout implements OnClickListener{  
      
    private View mLeftIndic;  
    private View mRightIndic;  
    private BounceHorizontalScrollView mScrollView;  
      
    public TitleFrameView(Context context, AttributeSet attrs) {  
        super(context, attrs);  
    }  
      
    public void setItemClickListener(OnClickListener itemClickListener) {  
        findViewById(R.id.unpay_tv).setOnClickListener(itemClickListener);  
        findViewById(R.id.allpay_tv).setOnClickListener(itemClickListener);  
        findViewById(R.id.unnurse_tv).setOnClickListener(itemClickListener);  
        findViewById(R.id.nursing_tv).setOnClickListener(itemClickListener);  
        findViewById(R.id.allnurse_tv).setOnClickListener(itemClickListener);  
    }  
      
    public void reShowItemTvColor(View v) {  
        ((TextView)findViewById(R.id.unpay_tv)).setTextColor(0xFFAFBEAD);  
        ((TextView)findViewById(R.id.allpay_tv)).setTextColor(0xFFAFBEAD);  
        ((TextView)findViewById(R.id.unnurse_tv)).setTextColor(0xFFAFBEAD);  
        ((TextView)findViewById(R.id.nursing_tv)).setTextColor(0xFFAFBEAD);  
        ((TextView)findViewById(R.id.allnurse_tv)).setTextColor(0xFFAFBEAD);  
        ((TextView)v).setTextColor(0xFFFFFFFF);  
    }  
      
  
    public void initDefault() {  
        findViewById(R.id.unpay_tv).performClick();  
    }  
  
    @Override  
    protected void onFinishInflate() {  
        super.onFinishInflate();  
        mLeftIndic=findViewById(R.id.iv_left);  
        mLeftIndic.setOnClickListener(this);  
        mRightIndic=findViewById(R.id.iv_right);  
        mRightIndic.setOnClickListener(this);  
        mScrollView=(BounceHorizontalScrollView) findViewById(R.id.scroll);  
        mScrollView.setIndicator(mLeftIndic, mRightIndic);  
    }  
  
    @Override  
    public void onClick(View v) {  
        switch (v.getId()) {  
        case R.id.iv_left:  
            mScrollView.scrollBy(-180,0);  
            break;  
        case R.id.iv_right:  
            mScrollView.scrollBy(180,0);  
            break;  
        default:  
            break;  
        }  
    }  
  
}


   /**
 *      健康标题
 *
 *    @author Lean  @date:2014-8-28  
 */
public class TitleFrameView extends FrameLayout implements OnClickListener{
   
   private View mLeftIndic;
   private View mRightIndic;
   private BounceHorizontalScrollView mScrollView;
   
   public TitleFrameView(Context context, AttributeSet attrs) {
      super(context, attrs);
   }
   
   public void setItemClickListener(OnClickListener itemClickListener) {
      findViewById(R.id.unpay_tv).setOnClickListener(itemClickListener);
      findViewById(R.id.allpay_tv).setOnClickListener(itemClickListener);
      findViewById(R.id.unnurse_tv).setOnClickListener(itemClickListener);
      findViewById(R.id.nursing_tv).setOnClickListener(itemClickListener);
      findViewById(R.id.allnurse_tv).setOnClickListener(itemClickListener);
   }
   
   public void reShowItemTvColor(View v) {
      ((TextView)findViewById(R.id.unpay_tv)).setTextColor(0xFFAFBEAD);
      ((TextView)findViewById(R.id.allpay_tv)).setTextColor(0xFFAFBEAD);
      ((TextView)findViewById(R.id.unnurse_tv)).setTextColor(0xFFAFBEAD);
      ((TextView)findViewById(R.id.nursing_tv)).setTextColor(0xFFAFBEAD);
      ((TextView)findViewById(R.id.allnurse_tv)).setTextColor(0xFFAFBEAD);
      ((TextView)v).setTextColor(0xFFFFFFFF);
   }
   

   public void initDefault() {
      findViewById(R.id.unpay_tv).performClick();
   }

   @Override
   protected void onFinishInflate() {
      super.onFinishInflate();
      mLeftIndic=findViewById(R.id.iv_left);
      mLeftIndic.setOnClickListener(this);
      mRightIndic=findViewById(R.id.iv_right);
      mRightIndic.setOnClickListener(this);
      mScrollView=(BounceHorizontalScrollView) findViewById(R.id.scroll);
      mScrollView.setIndicator(mLeftIndic, mRightIndic);
   }

   @Override
   public void onClick(View v) {
      switch (v.getId()) {
      case R.id.iv_left:
         mScrollView.scrollBy(-180,0);
         break;
      case R.id.iv_right:
         mScrollView.scrollBy(180,0);
         break;
      default:
         break;
      }
   }

}

切换到: 纯代码  
   
<?xml version="1.0" encoding="utf-8"?>  
<com.csz.vc.zbhealth.widget.TitleFrameView  
    xmlns:android="http://schemas.android.com/apk/res/android"  
    android:layout_width="match_parent"  
    android:layout_height="wrap_content"  
    android:background="#1F9401" >  
    <com.csz.vc.zbhealth.widget.BounceHorizontalScrollView   
        android:layout_width="match_parent"  
        android:layout_height="wrap_content"  
        android:id="@+id/scroll"  
        android:scrollbars="none"  >  
        <LinearLayout   
            android:layout_height="40dip"  
            android:layout_width="match_parent"  
            android:orientation="horizontal" >  
            <TextView  
                android:id="@+id/unpay_tv"   
                android:layout_height="match_parent"  
                android:layout_width="90dip"  
                android:text="@string/unpay"  
                android:textSize="18sp"  
                android:gravity="center"  
                android:textColor="@color/white"  
                android:background="#1F9401" />  
            <TextView  
                android:id="@+id/allpay_tv"   
                android:layout_height="match_parent"  
                android:layout_width="90dip"  
                android:text="@string/allpay"  
                android:textSize="18sp"  
                android:gravity="center"  
                android:textColor="@color/white"  
                android:background="#1F9401" />  
            <TextView   
                android:id="@+id/unnurse_tv"   
                android:layout_height="match_parent"  
                android:layout_width="90dip"  
                android:text="@string/unnurse"  
                android:textSize="18sp"  
                android:gravity="center"  
                android:textColor="@color/white"  
                android:background="#1F9401" />  
            <TextView   
                android:id="@+id/nursing_tv"   
                android:layout_height="match_parent"  
                android:layout_width="90dip"  
                android:text="@string/nursing"  
                android:textSize="18sp"  
                android:gravity="center"  
                android:textColor="@color/white"  
                android:background="#1F9401" />  
            <TextView   
                android:id="@+id/allnurse_tv"   
                android:layout_height="match_parent"  
                android:layout_width="90dip"  
                android:text="@string/allnurse"  
                android:textSize="18sp"  
                android:gravity="center"  
                android:textColor="@color/white"  
                android:background="#1F9401" />  
        </LinearLayout>  
    </com.csz.vc.zbhealth.widget.BounceHorizontalScrollView>  
    <ImageView  
        android:id="@+id/iv_left"   
        android:layout_height="match_parent"  
        android:layout_width="30dip"  
        android:layout_gravity="center_vertical|left"  
        android:scaleType="center"  
        android:src="@drawable/arrow_left" />  
    <ImageView   
        android:id="@+id/iv_right"   
        android:layout_height="match_parent"  
        android:layout_width="30dip"  
        android:layout_gravity="center_vertical|right"  
        android:scaleType="center"  
        android:src="@drawable/arrow_right" />  
</com.csz.vc.zbhealth.widget.TitleFrameView>


   <?xml version="1.0" encoding="utf-8"?>
<com.csz.vc.zbhealth.widget.TitleFrameView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="#1F9401" >
   <com.csz.vc.zbhealth.widget.BounceHorizontalScrollView 
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:id="@+id/scroll"
       android:scrollbars="none"  >
       <LinearLayout 
           android:layout_height="40dip"
           android:layout_width="match_parent"
           android:orientation="horizontal" >
           <TextView
               android:id="@+id/unpay_tv" 
               android:layout_height="match_parent"
               android:layout_width="90dip"
               android:text="@string/unpay"
               android:textSize="18sp"
               android:gravity="center"
               android:textColor="@color/white"
               android:background="#1F9401" />
           <TextView
               android:id="@+id/allpay_tv" 
               android:layout_height="match_parent"
               android:layout_width="90dip"
               android:text="@string/allpay"
               android:textSize="18sp"
               android:gravity="center"
               android:textColor="@color/white"
               android:background="#1F9401" />
           <TextView 
               android:id="@+id/unnurse_tv" 
               android:layout_height="match_parent"
               android:layout_width="90dip"
               android:text="@string/unnurse"
               android:textSize="18sp"
               android:gravity="center"
               android:textColor="@color/white"
               android:background="#1F9401" />
           <TextView 
               android:id="@+id/nursing_tv" 
               android:layout_height="match_parent"
               android:layout_width="90dip"
               android:text="@string/nursing"
               android:textSize="18sp"
               android:gravity="center"
               android:textColor="@color/white"
               android:background="#1F9401" />
           <TextView 
               android:id="@+id/allnurse_tv" 
               android:layout_height="match_parent"
               android:layout_width="90dip"
               android:text="@string/allnurse"
               android:textSize="18sp"
               android:gravity="center"
               android:textColor="@color/white"
               android:background="#1F9401" />
       </LinearLayout>
   </com.csz.vc.zbhealth.widget.BounceHorizontalScrollView>
    <ImageView
        android:id="@+id/iv_left" 
        android:layout_height="match_parent"
        android:layout_width="30dip"
        android:layout_gravity="center_vertical|left"
        android:scaleType="center"
        android:src="@drawable/arrow_left" />
    <ImageView 
        android:id="@+id/iv_right" 
        android:layout_height="match_parent"
        android:layout_width="30dip"
        android:layout_gravity="center_vertical|right"
        android:scaleType="center"
        android:src="@drawable/arrow_right" />
</com.csz.vc.zbhealth.widget.TitleFrameView>

转自 http://blog.csdn.net/qq285016127/article/details/38895589
(+0)技能Get

建议楼主:搜索关键字 |参考其他资源 |回复 |追问
  error997(error997):   个人中心    课题    目标    代码积累