ViewPagerIndicator+ViewPager


ViewPagerIndicator

public class ViewPagerIndicator extends LinearLayout {

    //画笔
    private Paint mPaint;
    //用来画一条线
    private Path mPath;
    //绘制线的宽度
    private int mLineWidth;
    //线的初始位置
    private int mInitTranslationX;
    //移动位置
    private int mTranslationX;
    //子控件
    private View mChildView;

    public ViewPagerIndicator(Context context) {
        super(context,null);
    }

    public ViewPagerIndicator(Context context, AttributeSet attrs) {

        super(context, attrs);
        mPaint = new Paint();
        mPaint.setAntiAlias(true);
        mPaint.setColor(Color.parseColor("#ffba00"));
        mPaint.setStrokeWidth(3);
        mPaint.setStyle(Paint.Style.STROKE);
    }

    //完成布局后获取子控件
    @Override
    protected void onFinishInflate() {
        super.onFinishInflate();
        mChildView = getChildAt(0);
    }
    //在onSizeChanged中获取宽和初始位置,并根据位置初始化线
    @Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
        super.onSizeChanged(w, h, oldw, oldh);
        mTranslationX = 0;
        mLineWidth = mChildView.getMeasuredWidth();
        mInitTranslationX = (w/getChildCount()-mLineWidth)/2;

        initLine();
    }
    //初始化线
    private void initLine(){
        mPath = new Path();
        mPath.moveTo(0,0);
        mPath.lineTo(mLineWidth,0);

    }
    //绘制线
    @Override
    protected void dispatchDraw(Canvas canvas) {
        canvas.save();
        //移动到该坐标后开始绘制
        canvas.translate(mInitTranslationX + mTranslationX,getHeight());
        canvas.drawPath(mPath,mPaint);
        canvas.restore();
        super.dispatchDraw(canvas);
    }

    在viewpager的onPageScrolled监听方法中调用此方法。viewPager滑动时mTranslationX的距离跟着变化,实现线的滑动,position,offset由onPageScrolled传值
    public void scroll(int position ,float offset){
        int tabWidth = getWidth()/getChildCount();
        mTranslationX =(int) (tabWidth * offset +tabWidth * position);
        //请求重绘,调用dispatchDraw方法
        invalidate();
    }
}

Activity_main

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.example.myfragmentlayout.MainActivity">

  <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/store_fl"
        >
        <ImageView
            android:layout_width="match_parent"
            android:layout_height="150dp"
            android:background="#FF6143"
            />

            <RelativeLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="10dp"
                android:layout_marginLeft="10dp"
                android:layout_marginRight="10dp"
                android:id="@+id/store_top"
                >
                <ImageView
                    android:layout_width="15dp"
                    android:layout_height="15dp"
                    android:background="@mipmap/back"
                     android:layout_centerVertical="true"
                    />
                <EditText
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:background="@null"
                     android:layout_centerInParent="true"
                    android:hint="请选择该店铺的商品"
                    android:textSize="14sp"
                    />
                <ImageView
                    android:layout_width="20dp"
                    android:layout_height="20dp"
                    android:layout_alignParentRight="true"
                    android:src="@mipmap/detaile_share"
                    />
            </RelativeLayout>

             <RelativeLayout
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:layout_gravity="bottom"
                 android:layout_alignBottom="@id/store_fl"
                 android:layout_marginBottom="10dp"
                 android:layout_marginLeft="10dp"
                 android:layout_marginRight="10dp"
                 >
                 <ImageView
                     android:id="@+id/store_img"
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
                     android:src="@mipmap/ic_launcher"
                     />
                 <LinearLayout
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
                     android:layout_toRightOf="@id/store_img"
                     android:orientation="vertical"
                     android:layout_alignBottom="@id/store_img"
                      android:layout_marginLeft="10dp"
                     >
                     <TextView
                         android:layout_width="wrap_content"
                         android:layout_height="wrap_content"
                         android:text="sdfsd"
                         android:textColor="#EFEFEF"
                         android:textSize="20sp"
                         />
                      <TextView
                          android:layout_marginTop="8dp"
                          android:layout_width="wrap_content"
                          android:layout_height="wrap_content"
                          android:textColor="#EFEFEF"
                          android:text="sdfsdf"
                          android:textSize="14sp"
                          />
                 </LinearLayout>
                 <ImageView
                     android:layout_width="50dp"
                     android:layout_height="20dp"
                     android:src="@mipmap/ic_launcher"
                     android:layout_alignBottom="@id/store_img"
                     android:layout_alignParentRight="true"
                     />
             </RelativeLayout>
    </FrameLayout>
     <com.example.myfragmentlayout.ViewPagerIndicator
         android:id="@+id/store_indicator"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:paddingTop="10dp"
         android:paddingBottom="10dp"
         android:orientation="horizontal"
         >
          <TextView
              android:id="@+id/store_all"
              android:layout_width="0dp"
              android:layout_weight="1"
              android:layout_height="wrap_content"
              android:clickable="true"
              android:gravity="center"
              android:onClick="onClick"
             android:text="综合"

             />
          <TextView
              android:id="@+id/store_new"
              android:layout_width="0dp"
              android:layout_weight="1"
              android:layout_height="wrap_content"
              android:clickable="true"
              android:gravity="center"
              android:onClick="onClick"
             android:text="新品"

             />
          <TextView
              android:id="@+id/store_sales"
              android:layout_width="0dp"
              android:layout_weight="1"
              android:layout_height="wrap_content"
              android:clickable="true"
              android:gravity="center"
              android:onClick="onClick"
             android:text="销量"

             />

             <TextView
              android:id="@+id/store_prece"
                 android:layout_width="0dp"
                 android:layout_weight="1"
                 android:layout_height="wrap_content"
                 android:clickable="true"
                 android:gravity="center"
                 android:onClick="onClick"
              android:text="价格"
               />
     </com.example.myfragmentlayout.ViewPagerIndicator>
    <android.support.v4.view.ViewPager
        android:id="@+id/store_pager"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#fff">
    </android.support.v4.view.ViewPager>
</LinearLayout>

MainActivity

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    
    private TextView storeAll;
    private TextView storeNew;
    private TextView storeSales;
    private TextView storePrice;
    private ViewPager storePager;
    private ViewPagerIndicator storeIndicator;

    private List<Fragment> mFragmentList;
    private FragmentPagerAdapter orderPickingAdapter;
    private ViewPager.OnPageChangeListener onPageChangeListener;
    //当前选中的indicator
    private TextView currentItem;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.bind(this);
        init();
        storePager.setAdapter(orderPickingAdapter);
        storePager.addOnPageChangeListener(onPageChangeListener);
        storePager.setCurrentItem(0);
        currentItem = storeAll;
        currentItem.setTextColor(Color.parseColor("#ffba00"));
        //自定义适配器


    }

    private void init() {
        storeAll = findViewById(R.id.store_all);
        storeNew = findViewById(R.id.store_new);
        storeSales = findViewById(R.id.store_sales);
        storePrice = findViewById(R.id.store_prece);
        storePager = findViewById(R.id.store_pager);
        storeIndicator = findViewById(R.id.store_indicator);
        storeAll.setOnClickListener(this);
        storeNew.setOnClickListener(this);
        storeSales.setOnClickListener(this);
        storePrice.setOnClickListener(this);
        mFragmentList = new ArrayList<>();
        StoreAllFragment storeAllFragment = new StoreAllFragment();
        mFragmentList.add(storeAllFragment);
        mFragmentList.add(new StoreNewFragment());
        mFragmentList.add(new StoreSaleFragment());
        mFragmentList.add(new StorePriceFrament());

        orderPickingAdapter = new FragmentPagerAdapter(getSupportFragmentManager()) {
            @Override
            public int getCount() {
                return mFragmentList.size();
            }

            @Override
            public Fragment getItem(int i) {
                return mFragmentList.get(i);
            }
        };
        //设置ViewPager监听事件
        onPageChangeListener = new ViewPager.OnPageChangeListener() {
            //滑动时,indicator下面的横线跟着滑动
            @Override
            public void onPageScrolled(int i, float v, int i1) {
                storeIndicator.scroll(i, v);
            }

            //选中监听,改变indicator文字颜色
            @Override
            public void onPageSelected(int i) {
                switch (i) {
                    case 0:
                        if (currentItem == storeAll)
                            return;
                        storeAll.setTextColor(Color.parseColor("#ffba00"));
                        currentItem.setTextColor(Color.parseColor("#646464"));
                        currentItem = storeAll;
                        break;
                    case 1:
                        if (currentItem == storeNew)
                            return;
                        storeNew.setTextColor(Color.parseColor("#ffba00"));
                        currentItem.setTextColor(Color.parseColor("#646464"));
                        currentItem = storeNew;
                        break;
                    case 2:
                        if (currentItem == storeSales)
                            return;
                        storeSales.setTextColor(Color.parseColor("#ffba00"));
                        currentItem.setTextColor(Color.parseColor("#646464"));
                        currentItem = storeSales;
                        break;
                    case 3:
                        if (currentItem == storePrice)
                            return;
                        storePrice.setTextColor(Color.parseColor("#ffba00"));
                        currentItem.setTextColor(Color.parseColor("#646464"));
                        currentItem = storePrice;
                        break;
                }
            }

            @Override
            public void onPageScrollStateChanged(int i) {

            }

        };

    }


    @Override
    public void onClick(View view) {
        switch (view.getId()) {
            case R.id.store_all:
                storePager.setCurrentItem(0);
                break;
            case R.id.store_new:
                Toast.makeText(this,"动啊",Toast.LENGTH_SHORT).show();
                storePager.setCurrentItem(1);
                break;
            case R.id.store_sales:
                storePager.setCurrentItem(2);
                break;
            case R.id.store_prece:
                storePager.setCurrentItem(3);
                break;
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值