写点什么

Android 开发:自定义 TabLayout,神奇效果竟是如此简单,Android 面试题集 2021 版

用户头像
Android架构
关注
发布于: 刚刚

canvas.drawPath(pathRight, paint);


tabtext 的绘制(关键代码):


for (int i = 0; i < tabTextList.size(); i++) {


String strTabText = tabTextList.get(i);


Rect rectText = new Rect();


textPaint.getTextBounds(strTabText, 0, strTabText.length(), rectText);


int strWidth = rectText.width();


int strHeight = rectText.height();


if (i == 0) {


canvas.drawText(strTabText, (textWidth + arcWidth / 2) / 2 - strWidth / 2, viewHeight / 2 + strHeight / 2, textPaint);


} else if (i == tabTextList.size() - 1) {


canvas.drawText(strTabText, viewWidth - (textWidth + arcWidth / 2) / 2 - strWidth / 2, viewHeight / 2 + strHeight / 2, textPaint);


} else {


canvas.drawText(strTabText, textWidth * i + arcWidth * (i - 1) + (textWidth + 2 * arcWidth) / 2 - strWidth / 2, viewHeight / 2 + strHeight / 2, textPaint);


}


}


tab 点击处理(关键代码):


@Override


public boolean onTouchEvent(MotionEvent event) {


boolean isHandleClick = false;//是否处理点击事件


switch (event.getAction()) {


case MotionEvent.ACTION_DOWN:


float x = event.getX();


float y = event.getY();


System.out.println("YPKTabLayoutView.onTouchEvent x=" + x + " y=" + y);


for (int i = 0; i < tabNumber; i++) {


if (x <= ((i + 1) * textWidth + i * arcWidth + arcWidth / 2)) {//点击的第一个按钮


tabPosition = i;


if (onTabClickListener != null) {


onTabClickListener.tabSelectedListener(tabPosition);


}


invalidate();


isHandleClick = true;


break;


}


}


return isHandleClick;


case MotionEvent.ACTION_MOVE:


break;


case MotionEvent.ACTION_UP:


break;


}


return super.onTouchEvent(event);


}


步骤说明:


我们在 onTouchEvent 方法中, 首先获取到点击控件后 x,y 坐标,然后 for 循环判断 x 的坐标是在哪个 tab 项的范围内,最后在哪个范围内,我们就认为点击了那个 tab 项,回调对应的 tabPosition 就可以了。


远程依赖使用


==================================================================


《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
浏览器打开:qq.cn.hn/FTe 免费领取
复制代码


一:添加依赖


Add it in your root build.gradle at the end of repositories:


allprojects {


repositories {


...


maven { url 'https://jitpack.io' }


}


}


Add the dependency


dependencies {


implementation 'com.github.dacaoyuan:YPKTabDemo:1.0.2'


}


二:在 xml 布局中添加


<com.ypk.library.view.YPKTabLayoutView


android:id="@+id/mYPKTabLayoutView"


android:layout_width="match_parent"


android:layout_height="wrap_content"


android:layout_margin="10dp"


app:view_bg_corners="0"


app:arcControlX="30" />


三:代码中


val tabTextList: MutableList<String> = ArrayList<String>()


tabTextList.add("推荐学习");


tabTextList.add("企业学院");


tabTextList.add("我的关注");


mYPKTabLayoutView.setTabTextList(tabTextList);


mYPKTabLayoutView.addTabSelectedListener { tabPosition ->


val makeText =


Toast.makeText(


this@MainActivity,


"点击了第" + tabPosition + "项",


Toast.LENGTH_SHORT


)


makeText.setGravity(Gravity.CENTER, 0, 0);


makeText.show();


}


属性说明



文章到这里就已经说完啦,如果你对实现思路有更好的建议,欢迎留言,指正。


源码地址:


https://github.com/dacaoyuan/YPKTabDemo


最后


==============================================================


在这里我也分享一份由几位大佬一起收录整理的 Android 学习 PDF+架构视频+面试文档+源码笔记高级架构技术进阶脑图、Android 开发面试专题资料,高级进阶架构资料


这些都是我闲暇还会反复翻阅的精品资料。可以有效的帮助大家掌握知识、理解原理。当然你也可以拿去查漏补缺,提升自身的竞争力。


如果你有需要的话,可以?点这领取


喜欢本文的话,不妨顺手给我点个小赞、评论区留言或者转发支持一下呗~

用户头像

Android架构

关注

还未添加个人签名 2021.10.31 加入

还未添加个人简介

评论

发布
暂无评论
Android开发:自定义TabLayout,神奇效果竟是如此简单,Android面试题集2021版