Skip to content

Commit

Permalink
将KDTab类改为继承FrameLayout,自定义Tab更加方便,并增加一个TextViewTab的示例
Browse files Browse the repository at this point in the history
  • Loading branch information
XuQK committed Apr 14, 2021
1 parent eb825b3 commit 65b37d3
Show file tree
Hide file tree
Showing 4 changed files with 96 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import androidx.appcompat.app.AppCompatActivity
import github.xuqk.kdtablayout.KDTabAdapter
import github.xuqk.kdtablayout.KDTabLayout
import github.xuqk.kdtablayout.sample.adapter.ViewPagerAdapter
import github.xuqk.kdtablayout.sample.widget.TextViewTab
import github.xuqk.kdtablayout.widget.KDTab
import github.xuqk.kdtablayout.widget.KDTabIndicator
import github.xuqk.kdtablayout.widget.indicator.KDRecIndicator
Expand Down Expand Up @@ -113,9 +114,25 @@ class FixedTabActivity : AppCompatActivity() {
}
}

tab3.tabMode = KDTabLayout.TAB_MODE_SPREAD
tab3.contentAdapter = object : KDTabAdapter() {
override fun createTab(position: Int): KDTab? {
return TextViewTab(this@FixedTabActivity, data[position]).apply {
setOnClickListener {
vp.currentItem = position
}
}
}

override fun getTabCount(): Int {
return data.size
}
}

tab0.setViewPager(vp)
tab1.setViewPager(vp)
tab2.setViewPager(vp)
tab3.setViewPager(vp)
vp.adapter = ViewPagerAdapter(data.toMutableList())
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
package github.xuqk.kdtablayout.sample.widget

import android.annotation.SuppressLint
import android.content.Context
import android.graphics.Color
import android.graphics.Typeface
import android.view.Gravity
import android.widget.FrameLayout
import android.widget.TextView
import github.xuqk.kdtablayout.widget.KDTab
import github.xuqk.kdtablayout.widget.tab.KDColorMorphingTextTab

/**
* Created By:XuQK
* Created Date:21-3-5 下午2:57
* Creator Email:[email protected]
* Description:
*/

@SuppressLint("ViewConstructor")
class TextViewTab(context: Context, text: String) : KDTab(context) {

private val tv: TextView = TextView(context).apply {
this.text = text
textSize = 16f
}

init {
addView(
tv,
LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT).apply {
gravity = Gravity.CENTER
}
)
}

override fun onScrolling(selectedFraction: Float, selectedInLeft: Boolean) {
if (selectedFraction > 0.5f) {
tv.typeface = Typeface.DEFAULT_BOLD
} else {
tv.typeface = Typeface.DEFAULT
}
}

override fun reset() {
tv.typeface = Typeface.DEFAULT
}

override fun selectTab() {
tv.typeface = Typeface.DEFAULT_BOLD
}

override fun computeContentBounds() {

}
}
7 changes: 7 additions & 0 deletions app/src/main/res/layout/activity_fixed_tab.xml
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,13 @@
android:layout_gravity="center_horizontal"
android:background="@drawable/bg_round_stroke_r24"/>

<github.xuqk.kdtablayout.KDTabLayout
android:id="@+id/tab3"
android:layout_width="match_parent"
android:layout_height="48dp"
android:layout_marginTop="6dp"
android:background="#fff"/>

<androidx.viewpager.widget.ViewPager
android:id="@+id/vp"
android:layout_width="match_parent"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,9 @@ package github.xuqk.kdtablayout.widget
import android.content.Context
import android.graphics.*
import android.view.View
import android.view.ViewGroup
import android.widget.FrameLayout
import android.widget.ScrollView

/**
* Created By:XuQK
Expand All @@ -11,7 +14,7 @@ import android.view.View
* Description:
*/
abstract class KDTab(
context: Context) : View(context) {
context: Context) : FrameLayout(context) {

protected val paint = Paint(Paint.ANTI_ALIAS_FLAG)
/**
Expand All @@ -33,6 +36,18 @@ abstract class KDTab(
var horizontalPadding: Float = 0f
// ------供用户自定义的属性 END

init {
setWillNotDraw(false)
}

override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec)
setMeasuredDimension(
widthMeasureSpec,
MeasureSpec.makeMeasureSpec(MeasureSpec.getSize(heightMeasureSpec), MeasureSpec.AT_MOST)
)
}

/**
* @param selectedFraction 该Tab被选中的比例,即滚动完成度
* @param selectedInLeft 该Tab是否是从左边滚动到右边
Expand Down

0 comments on commit 65b37d3

Please sign in to comment.