Skip to content

Commit 187ee8f

Browse files
committed
Add padding methods by percentage of the screen width and dp
1 parent 2e80442 commit 187ee8f

File tree

5 files changed

+78
-16
lines changed

5 files changed

+78
-16
lines changed

README.md

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,20 @@ then you just need to set deck default padding
2525
private val deckPager by lazy { activity.findViewById<Deck>(R.id.deck_pager) }
2626

2727
private fun initDeck() {
28-
deckPager.useDefaultPadding(activity)
28+
deckPager.setDefaultPadding(activity)
2929
}
30+
```
31+
32+
or set padding based on percentage of the screen width
3033

34+
```kotlin
35+
deckPager.setPercentagePadding(activity)
36+
```
37+
38+
or set padding based on dp value
39+
40+
```kotlin
41+
deckPager.setDpPadding(activity)
3142
```
3243

3344
##### Remember you can set all other view pager properties with deck

app/src/main/java/com/example/bloder/deck/DeckAdapter.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.example.bloder.deck
22

33
import android.content.Context
4+
import android.support.v4.content.ContextCompat
45
import android.support.v4.view.PagerAdapter
56
import android.support.v7.widget.CardView
67
import android.view.LayoutInflater
@@ -18,7 +19,8 @@ class DeckAdapter(private val context: Context) : PagerAdapter() {
1819
override fun instantiateItem(container: ViewGroup?, position: Int): Any {
1920
val view = LayoutInflater.from(context).inflate(R.layout.card, null)
2021
container?.addView(view, 0)
21-
view.findViewById<CardView>(R.id.card).cardBackgroundColor = context.getColorStateList(cards[position].color)
22+
view.findViewById<CardView>(R.id.card).cardBackgroundColor =
23+
ContextCompat.getColorStateList(context, cards[position].color)
2224
view.findViewById<TextView>(R.id.title).text = cards[position].name
2325
return view
2426
}

app/src/main/java/com/example/bloder/deck/MainActivity.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,6 @@ class MainActivity : AppCompatActivity() {
1616
setContentView(R.layout.activity_main)
1717
deckPager.offscreenPageLimit = 5
1818
deckPager.adapter = DeckAdapter(this)
19-
deckPager.useDefaultPadding(this)
19+
deckPager.setDefaultPadding(this)
2020
}
2121
}

lib/src/main/java/com/example/lib/CoverFlowTransformer.kt

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,17 +7,18 @@ import android.view.View
77
/**
88
* Created by bloder on 25/08/17.
99
*/
10+
private const val SCALE_MIN = .3f
11+
private const val SCALE_MAX = 1f
12+
private const val MIN_ALPHA = .5f
13+
private const val SCALE = .05f
14+
1015
class CoverFlowTransformer : ViewPager.PageTransformer {
1116

12-
private var SCALE_MIN = 0.3f
13-
private var SCALE_MAX = 1f
14-
private var MIN_ALPHA = 0.5f
15-
private var scale = .05f
16-
private var paddingFactor: Float = 0.08f
17+
var paddingFactor: Float = 0.08f
1718

1819
override fun transformPage(page: View, position: Float) {
1920
val realPosition = position - paddingFactor
20-
val realScale = getFloat(1 - Math.abs(realPosition * scale), SCALE_MIN, SCALE_MAX)
21+
val realScale = getFloat(1 - Math.abs(realPosition * SCALE), SCALE_MIN, SCALE_MAX)
2122
page.scaleX = realScale
2223
page.scaleY = realScale
2324
if (realPosition != 0f) {

lib/src/main/java/com/example/lib/Deck.kt

Lines changed: 55 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,25 +5,73 @@ import android.content.Context
55
import android.support.v4.view.ViewPager
66
import android.util.AttributeSet
77
import android.util.DisplayMetrics
8+
import android.util.TypedValue
89

910
/**
1011
* Created by bloder on 25/08/17.
1112
*/
13+
private const val DEFAULT_PERCENTAGE_PADDING = 8
14+
1215
class Deck : ViewPager {
1316

17+
private val pageTransformer = CoverFlowTransformer()
18+
1419
constructor(context: Context) : super(context)
1520
constructor(context: Context, attributeSet: AttributeSet) : super(context, attributeSet)
1621

17-
init { initView() }
22+
init {
23+
initView()
24+
}
25+
26+
private fun initView() {
27+
setPageTransformer(true, pageTransformer)
28+
}
1829

19-
private fun initView() = this.setPageTransformer(true, CoverFlowTransformer())
30+
/**
31+
* Set left and right padding with default value
32+
*/
33+
fun setDefaultPadding(context: Activity) {
34+
setPercentagePadding(context, DEFAULT_PERCENTAGE_PADDING)
35+
}
2036

21-
fun useDefaultPadding(context: Activity) {
22-
val metrics = DisplayMetrics()
23-
context.windowManager.defaultDisplay.getMetrics(metrics)
24-
val padding = (metrics.widthPixels * 0.08).toInt()
25-
setPadding(padding, 0, padding, 0)
37+
/**
38+
* Set left and right padding based on percentage of the screen width
39+
* If the percentage is more than 18, the left and right items height might not be consistent
40+
*/
41+
fun setPercentagePadding(context: Activity, percentage: Int) {
42+
when {
43+
percentage == 0 -> initProperties(context, 0f)
44+
percentage < 0 -> throw IllegalArgumentException("Percentage can't be lower than 0")
45+
percentage > 100 -> throw IllegalArgumentException("Percentage can't be higher than 100")
46+
else -> {
47+
val metrics = DisplayMetrics()
48+
context.windowManager.defaultDisplay.getMetrics(metrics)
49+
val padding = metrics.widthPixels * percentage / 100f
50+
initProperties(context, padding)
51+
}
52+
}
53+
}
54+
55+
/**
56+
* Set left and right padding based on dp value
57+
*/
58+
fun setDpPadding(context: Activity, dp: Float) {
59+
val padding = TypedValue.applyDimension(
60+
TypedValue.COMPLEX_UNIT_DIP,
61+
dp,
62+
context.resources.displayMetrics
63+
)
64+
initProperties(context, padding)
65+
}
66+
67+
private fun initProperties(context: Activity, padding: Float) {
68+
val intPadding = padding.toInt()
69+
setPadding(intPadding, 0, intPadding, 0)
2670
clipToPadding = false
2771
pageMargin = 0
72+
73+
val metrics = DisplayMetrics()
74+
context.windowManager.defaultDisplay.getMetrics(metrics)
75+
pageTransformer.paddingFactor = padding / metrics.widthPixels
2876
}
2977
}

0 commit comments

Comments
 (0)