博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
viewPager 的可滑动 Title
阅读量:6428 次
发布时间:2019-06-23

本文共 2994 字,大约阅读时间需要 9 分钟。

有三种方式:

1. 系统提供的title

缺点:标题在viewpager的滑动过程中也会滑动

实现:在ViewPager布局中添加 PagerTabStrip 或者是 PagerTitleStrip 即可(两者选一个)

2. 自定义 Title 布局为:多个TextView + 一个 ImageView

3. 自定义 Title 布局为:一个LinearLayout 包含多个TextView ,重写onDraw() 方法,画出滑动块

(推荐使用)

public ViewPagerTitleView(Context context, AttributeSet attrs, int defStyleAttr) {        super(context, attrs, defStyleAttr);        this.mContext = context;        mPaint = new Paint();        mPaint.setColor(context.getResources().getColor(R.color.colorAccent));        mPaint.setStyle(Paint.Style.FILL_AND_STROKE);        mLayout = new LinearLayout(context);        mLayout.setOrientation(LinearLayout.HORIZONTAL);        LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);        params.setMargins(0, 20, 0, 20);        addView(mLayout, params);        params1 = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT, 1.0f);        setWillNotDraw(false);    }    public void setData() {        for (int i = 0; i < mPager.getAdapter().getCount(); i++) {            TextView textView = new TextView(mContext);            textView.setTextSize(18);            textView.setText(mPager.getAdapter().getPageTitle(i));            textView.setGravity(Gravity.CENTER);            textView.setLayoutParams(params1);            final int finalI = i;            textView.setOnClickListener(new OnClickListener() {                @Override                public void onClick(View v) {                    mPager.setCurrentItem(finalI);                }            });            mLayout.addView(textView);        }    }    @Override    protected void onDraw(Canvas canvas) {        super.onDraw(canvas);        int width = mLayout.getWidth() / mPager.getAdapter().getCount();        canvas.drawRect(mLayout.getLeft() + (mPosition + mDistense) * width, mLayout.getBottom(), mLayout.getLeft() + (mPosition + 1 + mDistense) * width, mLayout.getBottom() + dp(6), mPaint);    }    public int dp(float var0) {        float density = 2.0f;        return var0 == 0.0F ? 0 : (int) Math.ceil((double) (density * var0));    }    public void setViewPager(ViewPager pager) {        this.mPager = pager;        mPager.addView(new PagerTitleStrip(mContext));        if (mPager.getAdapter() != null) {            setData();            mPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {                @Override                public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {                    mDistense = positionOffset;                    mPosition=position;                    invalidate();                }                @Override                public void onPageSelected(int position) {                }                @Override                public void onPageScrollStateChanged(int state) {                }            });        }    }

 

转载于:https://www.cnblogs.com/zhy7104/p/6039797.html

你可能感兴趣的文章
mybatis中的#和$的区别
查看>>
ubuntu下搭建NDK环境
查看>>
MessageDigest简单介绍
查看>>
webpack window 使用sass来编译css样式
查看>>
D3 & Data Visualization in Ext JS
查看>>
java通过UUID生成16位唯一订单号
查看>>
001-web基本程序搭建
查看>>
函数指针和指针函数
查看>>
Intel 揭秘:如何在公有云、混合云和私有云间合理放置工作负载
查看>>
借力AI 极验如何构建下一代业务安全?
查看>>
用Python制作迷宫GIF
查看>>
支付宝推出基于区块链跨境支付,巨头入场小企业将面临灭顶之灾
查看>>
从事互联网行业,怎样才能快速掌握一门编程语言呢?
查看>>
谈谈fail-fast与fail-safe是什么以及工作机制
查看>>
深入浅出换肤相关技术以及如何实现
查看>>
Redis 基础、高级特性与性能调优
查看>>
React native 第三方组件 React native swiper
查看>>
接口幂等设计
查看>>
编程入门指南
查看>>
移动端的自适应方案—REM
查看>>