多页面切换指示控件,ViewPager配合使用

CircleIndicator.class


import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import androidx.annotation.Nullable;
import android.util.AttributeSet;
import android.view.View;

/**
 * Created by Administrator on 2017/12/12 0012.
 */

public class CircleIndicator extends View {
    public CircleIndicator(Context context) {
        super(context);
        initPaint();
    }

    public CircleIndicator(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
        initPaint();
    }

    public CircleIndicator(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        initPaint();
    }

    public void initPaint() {
        mPaint = new Paint();
        mPaint.setColor(Color.parseColor("#55eeeeee"));
        mPaint.setStyle(Paint.Style.FILL);
        mPaint.setAntiAlias(true);
    }

    public Paint mPaint;

    public int unSelectColor = Color.parseColor("#55eeeeee");
    public int selectColor = Color.WHITE;
    public int size = 3;
    public int radius = 5;
    public int radio = 2;
    public int position = 0;
    public float offSet = 0f;//偏移量

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        int w = getWidth() / 2;
        int h = getHeight() / 2;
        //画默认indicator
        mPaint.setColor(unSelectColor);
        for (int i = 0; i < size; i++) {
            canvas.save();
            canvas.drawCircle(w - radius * radio * (size - 1) + 2 * radio * i * radius, h, radius, mPaint);
            canvas.restore();
        }

        //画选中indicator
        mPaint.setColor(selectColor);
        canvas.drawCircle(w - radius * radio * (size - 1) + 2 * radio * (position + (isOffsetMove ? offSet : 0)) * radius, h, radius, mPaint);
        if (isFadeOutAtLast) {
            fadeOutAnim();
        }
    }

    public boolean isFadeOutAtLast = false;

    private boolean isOffsetMove = false;

    public boolean isOffsetMove() {
        return isOffsetMove;
    }

    public void setOffsetMove(boolean offsetMove) {
        isOffsetMove = offsetMove;
    }

    public boolean isFadeOutAtLast() {
        return isFadeOutAtLast;
    }

    public void setFadeOutAtLast(boolean fadeOutAtLast) {
        isFadeOutAtLast = fadeOutAtLast;
    }

    public void fadeOutAnim() {
        if (position == size - 2 && offSet > 0) {
            this.setAlpha(1f - offSet * 2);
        } else {
            this.setAlpha(1f);
        }
    }

    public int getUnSelectColor() {
        return unSelectColor;
    }

    public void setUnSelectColor(int unSelectColor) {
        this.unSelectColor = unSelectColor;
    }

    public int getSelectColor() {
        return selectColor;
    }

    public void setSelectColor(int selectColor) {
        this.selectColor = selectColor;
    }

    public int getSize() {
        return size;
    }

    public void setSize(int size) {
        this.size = size;
    }

    public int getRadius() {
        return radius;
    }

    public void setRadius(int radius) {
        this.radius = radius;
    }

    public int getRadio() {
        return radio;
    }

    public void setRadio(int radio) {
        this.radio = radio;
    }

    public int getPosition() {
        return position;
    }

    public void setPosition(int position) {
        this.position = position;
        invalidate();
    }

    public float getOffSet() {
        return offSet;
    }

    public void setOffSet(float offSet) {
        this.offSet = offSet;
    }
}

使用
1、在xml中

  <com.xxx.widget.CircleIndicator
            android:id="@+id/indicator"
            android:layout_width="40dp"
            android:layout_height="45dp"
            android:layout_gravity="center_horizontal"
            android:layout_marginBottom="10dp" />

2、在代码中

CircleIndicator mIndicator;

初始化

        mIndicator.setSelectColor(Color.BLACK);
        mIndicator.setUnSelectColor(Color.parseColor("#d3d3d3"));
        mIndicator.setRadius(10);
        mIndicator.setOffsetMove(false);
 mVp.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

            }

            @Override
            public void onPageSelected(int position) {
                mIndicator.setPosition(position % imgList.length);
                mIndicator.invalidate();
            }

            @Override
            public void onPageScrollStateChanged(int state) {

            }
        });
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
TwoPanels是管理俩个页面切换控件,俩个页面间既可以水平排列也可垂直排列。俩个页面都是Fragment,中间有个slider,负责控制俩个页面切换。通常他把左页面或垂直排列的上页面都叫左(left)页面, 把右页面或垂直排列的下页面都叫右(right)页面。项目地址:https://github.com/DesarrolloAntonio/TwoPanels 效果图:如何使用让你的Activity继承自TwoPanelsBaseActivitypublic class MainActivity extends TwoPanelsBaseActivity {2. 设置左、右页面以及设置参数setBaseOrientation(LinearLayout.HORIZONTAL);//设置俩个页面的排列方式,水平还是垂直 MyRightFragment mRightFragment = new MyRightFragment();//右页面,这个Fragment你需要自定义 MyLeftFragment mLeftFragment = new MyLeftFragment(); getFragmentManager().beginTransaction().add(R.id.right, mRightFragment).commit();//将页面的Fragment绑定到控件上 getFragmentManager().beginTransaction().add(R.id.left, mLeftFragment).commit();方法使用方法名说明setSlidersDrawables(int verticalDrawable, int horizontalDrawable)Set de drawables for the slider in horizontal and vertical like this example: setSlidersDrawables(R.drawable.slider_vertical, R.drawable.slider_horizontal)设置slider(左、右页面中间部分的)的图标,分为垂直的和水平的图标setSliderSize(int size)设置slider的宽度switchSliderVisitility();以动画方式切换setBaseOrientation(int orientation)Set the orientation of the panels with the values LinearLayout.VERTICAL or LinearLayout.HORIZONTAL, default is LinearLayout.HORIZONTAL.设置排列方式,水平的还是垂直的slideFragmentsToRight()Slide the fragments to the right with an animation.隐藏掉右页面或下页面,相当于点击俩次右箭头slideFragmentsToLeft()Slide the fragments to the left with an animation隐藏掉左页面或上页面,相当于点击俩次左箭头.showTwoFragments()Show two panels in the screen.让俩个页面都显示,一般是调用了hideRight()、hideLeft后让俩个页面同时显示hideRight()Hide the right panel and show the left panel in full screen.隐藏右页面hideLeft()Hide the left panel and show the right panel in full screen.隐藏左页面
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值