第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

默認(rèn)不選中第一個(gè)

? ?private Paint mPaint;
? ?private Path mPath;
? ?private int mTriangleWidth;//三角形寬度
? ?private int mTriangleHeight;//三角形高度
? ?private static final float RADIO_TRIANG_WIDTH = 1 / 6F; //三角形與按鈕的比例
? ?private int mInitTriangleX;//移動(dòng)
? ?private int mTranslationX;//偏移位置
? ?private int mTabVisibleCount;
? ?private static final int COUNT_DEFAULT_TAB = 4;
? ?private static int COLOR_TEXT_SELECT = 0xFFFFFFFF;
? ?private static int COLOR_TEXT_NORMAL = 0x77FFFFFF;

? ?public List<String> mTitles;

? ?public interface PageChangeListener {

? ? ? ?void onPageScrolled(int position, float positionOffset, int positionOffsetPixels);

? ? ? ?void onPageSelected(int position);

? ? ? ?void onPageScrollStateChanged(int state);
? ?}


? ?public PageChangeListener mListener;

? ?public void setOnPageChangeListener(PageChangeListener listener) {
? ? ? ?mListener = listener;
? ?}

? ?/**
? ? * 設(shè)置可見tab的數(shù)量
? ? *
? ? * @param count
? ? */
? ?public void setVisibleTabCount(int count) {
? ? ? ?mTabVisibleCount = count;
? ?}

? ?public ViewPagerIndicator(Context context) {
? ? ? ?this(context, null);
? ?}

? ?public ViewPagerIndicator(Context context, @Nullable AttributeSet attrs) {
? ? ? ?super(context, attrs);

? ? ? ?TypedArray array = context.obtainStyledAttributes(attrs, R.styleable.ViewPagerIndicator);
? ? ? ?mTabVisibleCount = array.getInt(R.styleable.ViewPagerIndicator_visible_tab_count, COUNT_DEFAULT_TAB);
? ? ? ?if (mTabVisibleCount < 0) {
? ? ? ? ? ?mTabVisibleCount = COUNT_DEFAULT_TAB;
? ? ? ?}
? ? ? ?array.recycle();

? ? ? ?mPaint = new Paint();
? ? ? ?mPaint.setAntiAlias(true);
? ? ? ?mPaint.setColor(Color.WHITE);
? ? ? ?mPaint.setStyle(Paint.Style.FILL);
? ? ? ?mPaint.setPathEffect(new CornerPathEffect(3));
? ?}


? ?@Override
? ?protected void dispatchDraw(Canvas canvas) {
? ? ? ?canvas.save();
? ? ? ?canvas.translate(mTranslationX + mInitTriangleX, getHeight() + 2);
? ? ? ?canvas.drawPath(mPath, mPaint);
? ? ? ?canvas.restore();
? ? ? ?super.dispatchDraw(canvas);
? ?}

? ?@Override
? ?protected void onSizeChanged(int w, int h, int oldw, int oldh) {
? ? ? ?super.onSizeChanged(w, h, oldw, oldh);
? ? ? ?mTriangleWidth = (int) (w / mTabVisibleCount * RADIO_TRIANG_WIDTH);
? ? ? ?mTranslationX = w / mTabVisibleCount / 2 - mTriangleWidth / 2;
? ? ? ?initTriangle();
? ?}

? ?/**
? ? * 畫三角形
? ? */
? ?private void initTriangle() {
? ? ? ?mTriangleHeight = mTriangleWidth / 2;
? ? ? ?mPath = new Path();
? ? ? ?mPath.moveTo(0, 0);
? ? ? ?mPath.lineTo(mTriangleWidth, 0);
? ? ? ?mPath.lineTo(mTriangleWidth / 2, -mTriangleHeight);
? ? ? ?mPath.close();//閉合
? ?}

? ?/**
? ? * 指示器跟隨手指移動(dòng)
? ? *
? ? * @param position
? ? * @param positionOffset
? ? */
? ?public void scroll(int position, float positionOffset) {
? ? ? ?int width = getWidth() / mTabVisibleCount;
? ? ? ?mInitTriangleX = (int) (width * (position + positionOffset));

? ? ? ?//在tab移動(dòng)到最后的時(shí)候
? ? ? ?if (position >= mTabVisibleCount - 2
? ? ? ? ? ? ? ?&& positionOffset > 0
? ? ? ? ? ? ? ?&& getChildCount() > mTabVisibleCount
? ? ? ? ? ? ? ?&& position != (mTitles.size() - 2)) {
? ? ? ? ? ?if (mTabVisibleCount != 1) {
? ? ? ? ? ? ? ?this.scrollTo((int) ((position - (mTabVisibleCount - 2)) * width + width * positionOffset), 0);
? ? ? ? ? ?} else {
? ? ? ? ? ? ? ?this.scrollTo((int) (position * width + width * positionOffset), 0);
? ? ? ? ? ?}

? ? ? ?}

? ? ? ?invalidate();
? ?}

? ?@Override
? ?protected void onFinishInflate() {
? ? ? ?super.onFinishInflate();
? ? ? ?int cCount = getChildCount();
? ? ? ?if (cCount == 0)
? ? ? ? ? ?return;
? ? ? ?for (int i = 0; i < cCount; i++) {
? ? ? ? ? ?View view = getChildAt(i);
? ? ? ? ? ?LinearLayout.LayoutParams params = (LayoutParams) view.getLayoutParams();
? ? ? ? ? ?params.weight = 0;
? ? ? ? ? ?params.width = getScreeWidth() / mTabVisibleCount;
? ? ? ? ? ?view.setLayoutParams(params);
? ? ? ?}
? ?}

? ?/**
? ? * 獲得屏幕的寬度
? ? *
? ? * @return
? ? */
? ?public int getScreeWidth() {
? ? ? ?WindowManager wm = (WindowManager) getContext().getSystemService(Context.WINDOW_SERVICE);
? ? ? ?DisplayMetrics dp = new DisplayMetrics();
? ? ? ?wm.getDefaultDisplay().getMetrics(dp);
? ? ? ?return dp.widthPixels;
? ?}

? ?public void setTabItemTitles(List<String> titles) {
? ? ? ?if (titles != null && titles.size() > 0) {
? ? ? ? ? ?removeAllViews();
? ? ? ? ? ?mTitles = titles;
? ? ? ? ? ?for (String title : mTitles) {
? ? ? ? ? ? ? ?addView(generateTextView(title));
? ? ? ? ? ?}
? ? ? ?}
? ?}

? ?private View generateTextView(String title) {
? ? ? ?TextView tv = new TextView(getContext());
? ? ? ?LinearLayout.LayoutParams lp = new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
? ? ? ?lp.width = getScreeWidth() / mTabVisibleCount;
? ? ? ?tv.setText(title);
? ? ? ?tv.setGravity(Gravity.CENTER);
? ? ? ?tv.setTextColor(COLOR_TEXT_NORMAL);
? ? ? ?tv.setTextSize(TypedValue.COMPLEX_UNIT_SP, 16);
? ? ? ?tv.setLayoutParams(lp);
? ? ? ?return tv;
? ?}

? ?private ViewPager mViewPager;

// ? ?public void setViewViewPager(ViewPager viewViewPager, int pos) {
// ? ? ? ?mViewPager = viewViewPager;
//
// ? ? ? ?mViewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
// ? ? ? ? ? ?@Override
// ? ? ? ? ? ?public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
// ? ? ? ? ? ? ? ?scroll(position, positionOffset);
// ? ? ? ? ? ? ? ?if (mListener != null) {
// ? ? ? ? ? ? ? ? ? ?mListener.onPageScrolled(position, positionOffset, positionOffsetPixels);
// ? ? ? ? ? ? ? ?}
// ? ? ? ? ? ?}
//
// ? ? ? ? ? ?@Override
// ? ? ? ? ? ?public void onPageSelected(int position) {
// ? ? ? ? ? ? ? ?if (mListener != null) {
// ? ? ? ? ? ? ? ? ? ?mListener.onPageSelected(position);
// ? ? ? ? ? ? ? ?}
// ? ? ? ? ? ? ? ?highLightTextView(position);
// ? ? ? ? ? ?}
//
// ? ? ? ? ? ?@Override
// ? ? ? ? ? ?public void onPageScrollStateChanged(int state) {
// ? ? ? ? ? ? ? ?if (mListener != null) {
// ? ? ? ? ? ? ? ? ? ?mListener.onPageScrollStateChanged(state);
// ? ? ? ? ? ? ? ?}
// ? ? ? ? ? ?}
// ? ? ? ?});
// ? ? ? ?mViewPager.setCurrentItem(pos);
// ? ? ? ?highLightTextView(pos);
// ? ?}

? ?public void setViewViewPager(ViewPager viewpager, int position) {
? ? ? ?mViewPager = viewpager;
? ? ? ?mViewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {

? ? ? ? ? ?@Override
? ? ? ? ? ?public void onPageSelected(int position) {
? ? ? ? ? ? ? ?if (mListener != null) {
? ? ? ? ? ? ? ? ? ?mListener.onPageSelected(position);
? ? ? ? ? ? ? ?}
? ? ? ? ? ? ? ?highLightTextView(position);
? ? ? ? ? ?}

? ? ? ? ? ?@Override
? ? ? ? ? ?public void onPageScrolled(int position, float positionOffset,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? int positionOffsetPixels) {
? ? ? ? ? ? ? ?// 三角形跟隨ViewPager移動(dòng)的距離就是:
? ? ? ? ? ? ? ?// tabWidth*positionOffset+position*tabWidth
? ? ? ? ? ? ? ?scroll(position, positionOffset);

? ? ? ? ? ? ? ?if (mListener != null) {
? ? ? ? ? ? ? ? ? ?mListener.onPageScrolled(position, positionOffset,
? ? ? ? ? ? ? ? ? ? ? ? ? ?positionOffsetPixels);
? ? ? ? ? ? ? ?}
? ? ? ? ? ?}

? ? ? ? ? ?@Override
? ? ? ? ? ?public void onPageScrollStateChanged(int state) {
? ? ? ? ? ? ? ?if (mListener != null) {
? ? ? ? ? ? ? ? ? ?mListener.onPageScrollStateChanged(state);
? ? ? ? ? ? ? ?}

? ? ? ? ? ?}
? ? ? ?});
? ? ? ?mViewPager.setCurrentItem(position);
? ? ? ?highLightTextView(position);
? ?}

? ?/**
? ? * 高亮被點(diǎn)擊的tab
? ? * @param position
? ? */
? ?private void highLightTextView(int position){
? ? ? ?resetTextViewColor();
? ? ? ?View view = getChildAt(position);
? ? ? ?if (view instanceof TextView) {
? ? ? ? ? ?((TextView) view).setTextColor(COLOR_TEXT_SELECT);
? ? ? ?}
? ?}
? ?/**
? ? * 重置tab文本顏色
? ? */
? ?private void resetTextViewColor(){
? ? ? ?for (int i = 0; i < getChildCount(); i++) {
? ? ? ? ? ?View view = getChildAt(i);
? ? ? ? ? ?if (view instanceof TextView) {
? ? ? ? ? ? ? ?((TextView) view).setTextColor(COLOR_TEXT_NORMAL);
? ? ? ? ? ?}
? ? ? ?}
? ?}

// ? ?/**
// ? ? * 改變選中的顏色
// ? ? *
// ? ? * @param pos
// ? ? */
// ? ?private void highLightTextView(int pos) {
// ? ? ? ?resetTextViewAll();
// ? ? ? ?View view = getChildAt(pos);
// ? ? ? ?if (view instanceof TextView) {
// ? ? ? ? ? ?((TextView) view).setTextColor(COLOR_TEXT_SELECT);
// ? ? ? ?}
// ? ?}
//
// ? ?/**
// ? ? * 未選中的顏色
// ? ? */
// ? ?private void resetTextViewAll() {
// ? ? ? ?for (int i = 0; i < getChildCount(); i++) {
// ? ? ? ? ? ?View view = getChildAt(i);
// ? ? ? ? ? ?if (view instanceof TextView) {
// ? ? ? ? ? ? ? ?((TextView) view).setTextColor(COLOR_TEXT_NORMAL);
// ? ? ? ? ? ?}
// ? ? ? ?}
// ? ?}

正在回答

舉報(bào)

0/150
提交
取消
Android-自定義ViewPager指示器
  • 參與學(xué)習(xí)       30024    人
  • 解答問題       78    個(gè)

帶領(lǐng)大家實(shí)現(xiàn)最火爆的跟隨型指示器,學(xué)完保準(zhǔn)壓倒一片

進(jìn)入課程

默認(rèn)不選中第一個(gè)

我要回答 關(guān)注問題
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)