Skip to content
This repository was archived by the owner on Mar 27, 2022. It is now read-only.

Commit 4c42768

Browse files
committed
Added one more listener and clickable-enable attributes.
1 parent 8052671 commit 4c42768

File tree

7 files changed

+86
-30
lines changed

7 files changed

+86
-30
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ and:
3636

3737
```gradle
3838
dependencies {
39-
compile 'com.github.ceryle:SegmentedButton:v1.1.9'
39+
compile 'com.github.ceryle:SegmentedButton:v1.2.0'
4040
}
4141
```
4242

library/src/main/java/co/ceryle/segmentedbutton/ButtonAttributes.java

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
*/
1616
package co.ceryle.segmentedbutton;
1717

18-
import android.graphics.Typeface;
1918
import android.view.View;
2019
import android.widget.Button;
2120

@@ -24,8 +23,6 @@ class ButtonAttributes {
2423
private float weight = 0;
2524
private boolean hasTint, hasTextColor, hasRippleColor, hasWidth, hasWeight;
2625
private View rippleView;
27-
private Typeface typeface;
28-
2926

3027
static void setAttributes(Button b, ButtonAttributes a) {
3128
b.setTextColor(a.getTextColor());
@@ -99,14 +96,6 @@ else if (s.hasDrawableTintOnSelection())
9996
}
10097
}
10198

102-
public void setTypeface(Button b, Typeface typeface) {
103-
b.setTypeface(typeface);
104-
}
105-
106-
public Typeface getTypeface() {
107-
return typeface;
108-
}
109-
11099
int getTextColor() {
111100
return textColor;
112101
}

library/src/main/java/co/ceryle/segmentedbutton/SegmentedButtonGroup.java

Lines changed: 67 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import android.support.v4.view.animation.FastOutSlowInInterpolator;
3333
import android.support.v4.view.animation.LinearOutSlowInInterpolator;
3434
import android.util.AttributeSet;
35+
import android.util.Log;
3536
import android.view.View;
3637
import android.view.ViewGroup;
3738
import android.view.animation.AccelerateDecelerateInterpolator;
@@ -266,7 +267,6 @@ public void updateViews() {
266267

267268
attrs.setTextColor(b, textColorOnSelection, hasTextColorOnSelection);
268269
attrs.setTintColor(b, drawableTintOnSelection, hasDrawableTintOnSelection);
269-
// attrs.setTypeface(b, b.getTypeface());
270270
}
271271

272272
setBackgroundColor(mainGroup, selectorBackgroundDrawable, selectorColor);
@@ -373,36 +373,36 @@ public void addView(View child, int index, ViewGroup.LayoutParams params) {
373373
}
374374
}
375375

376+
377+
ArrayList<View> ripples = new ArrayList<>();
378+
376379
private void initForeground(final int pos) {
377380
ButtonAttributes attrs = btnAttrs.get(pos);
378381

379382
/**
380383
* Ripple
381384
* **/
382385
View rippleView = new View(getContext());
383-
btnAttrs.get(pos).setRippleView(rippleView);
386+
attrs.setRippleView(rippleView);
384387
rippleView.setLayoutParams(new LinearLayout.LayoutParams(attrs.getWidth(), 0, attrs.getWeight()));
385388

386389
rippleContainer.addView(rippleView);
387390

388391
rippleView.setOnClickListener(new OnClickListener() {
389392
@Override
390393
public void onClick(View v) {
391-
toggle(pos, animateSelectorDuration, true);
394+
if (clickable && enabled)
395+
toggle(pos, animateSelectorDuration, true);
392396
}
393397
});
394398

395-
if (hasRippleColor)
396-
Util.setRipple(rippleView, rippleColor);
397-
else if (ripple)
398-
Util.setSelectableItemBackground(getContext(), rippleView);
399-
else {
400-
for (Button button : buttons) {
401-
if (button instanceof SegmentedButton && ((SegmentedButton) button).hasRipple())
402-
Util.setRipple(rippleView, ((SegmentedButton) button).getRippleColor());
403-
}
399+
setRipple(rippleView, enabled && clickable);
400+
if (!enabled) {
401+
setEnabledColor(enabled);
404402
}
405403

404+
ripples.add(rippleView);
405+
406406
/**
407407
* Divider
408408
* **/
@@ -414,6 +414,23 @@ else if (ripple)
414414
dividerContainer.addView(dividerView);
415415
}
416416

417+
private void setRipple(View v, boolean isClickable) {
418+
if (isClickable) {
419+
if (hasRippleColor)
420+
Util.setRipple(v, rippleColor);
421+
else if (ripple)
422+
Util.setSelectableItemBackground(getContext(), v);
423+
else {
424+
for (Button button : buttons) {
425+
if (button instanceof SegmentedButton && ((SegmentedButton) button).hasRipple())
426+
Util.setRipple(v, ((SegmentedButton) button).getRippleColor());
427+
}
428+
}
429+
} else {
430+
Util.setBackground(v, null);
431+
}
432+
}
433+
417434
private void setContainerAttrs() {
418435
if (isInEditMode())
419436
mainGroup.setBackgroundColor(backgroundColor);
@@ -423,7 +440,7 @@ private void setContainerAttrs() {
423440

424441
private int selectorColor, animateSelector, animateSelectorDuration, position, backgroundColor, dividerColor, drawableTintOnSelection, textColorOnSelection, dividerSize, rippleColor, dividerPadding, dividerRadius, shadowMargin, shadowMarginTop, shadowMarginBottom, shadowMarginLeft, shadowMarginRight, borderSize, borderColor;
425442
private float shadowElevation, radius;
426-
private boolean shadow, ripple, hasRippleColor, hasDivider, hasDrawableTintOnSelection, hasTextColorOnSelection;
443+
private boolean clickable, enabled, shadow, ripple, hasRippleColor, hasDivider, hasDrawableTintOnSelection, hasTextColorOnSelection;
427444

428445
private Drawable backgroundDrawable, selectorBackgroundDrawable, dividerBackgroundDrawable;
429446

@@ -470,6 +487,14 @@ private void getAttributes(AttributeSet attrs) {
470487
selectorBackgroundDrawable = typedArray.getDrawable(R.styleable.SegmentedButtonGroup_sbg_selectorBackgroundDrawable);
471488
dividerBackgroundDrawable = typedArray.getDrawable(R.styleable.SegmentedButtonGroup_sbg_dividerBackgroundDrawable);
472489

490+
enabled = typedArray.getBoolean(R.styleable.SegmentedButtonGroup_sbg_enabled, true);
491+
492+
try {
493+
clickable = typedArray.getBoolean(R.styleable.SegmentedButtonGroup_android_clickable, true);
494+
} catch (Exception ex) {
495+
Log.d("SegmentedButtonGroup", ex.toString());
496+
}
497+
473498
typedArray.recycle();
474499
}
475500

@@ -899,6 +924,35 @@ public int getMargin() {
899924
return margin;
900925
}
901926

927+
private void setRippleState(boolean state) {
928+
for (View v : ripples) {
929+
setRipple(v, state);
930+
}
931+
}
932+
933+
private void setEnabledColor(boolean enabled) {
934+
float alpha = 1f;
935+
if (!enabled)
936+
alpha = 0.5f;
937+
938+
mainGroup.setAlpha(alpha);
939+
leftGroup.setAlpha(alpha);
940+
rightGroup.setAlpha(alpha);
941+
}
942+
943+
@Override
944+
public void setEnabled(boolean enabled) {
945+
this.enabled = enabled;
946+
setRippleState(enabled);
947+
// setEnabledColor(enabled); // TODO
948+
}
949+
950+
@Override
951+
public void setClickable(boolean clickable) {
952+
this.clickable = clickable;
953+
setRippleState(clickable);
954+
}
955+
902956
@Override
903957
public Parcelable onSaveInstanceState() {
904958
Bundle bundle = new Bundle();
@@ -916,5 +970,4 @@ public void onRestoreInstanceState(Parcelable state) {
916970
}
917971
super.onRestoreInstanceState(state);
918972
}
919-
920973
}

library/src/main/java/co/ceryle/segmentedbutton/Util.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ private static ColorStateList getPressedColorSelector(int pressedColor) {
8585
);
8686
}
8787
/**
88-
* Ripple Helper - END
88+
* Ripple Utility - END
8989
**/
9090

9191

@@ -119,6 +119,6 @@ private static GradientDrawable getGradientDrawable(int dividerColor, int divide
119119
}
120120

121121
/**
122-
* Round Helper - END
122+
* Round Utility - END
123123
**/
124124
}

library/src/main/res/values/attrs.xml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,9 @@
4545
<attr name="sbg_radius" format="dimension"/>
4646
<attr name="sbg_backgroundColor" format="color"/>
4747

48+
<attr name="sbg_enabled" format="boolean"/>
49+
<attr name="android:clickable"/>
50+
4851
<attr name="sbg_animateSelectorDuration" format="integer"/>
4952
<attr name="sbg_animateSelector" format="integer">
5053
<flag name="fastOutSlowIn" value="0"/>

sample/src/main/java/co/ceryle/segmentedbutton/MainActivity.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package co.ceryle.segmentedbutton;
22

3+
import android.os.Handler;
34
import android.support.v7.app.AppCompatActivity;
45
import android.os.Bundle;
56
import android.view.View;
@@ -36,6 +37,18 @@ public void onClick(View view) {
3637
group.setPosition(position, true);
3738
}
3839
});
40+
41+
42+
group.setClickable(false);
43+
44+
Handler handler = new Handler();
45+
Runnable runnable = new Runnable() {
46+
@Override
47+
public void run() {
48+
group.setClickable(true);
49+
}
50+
};
51+
handler.postDelayed(runnable, 5000);
3952
}
4053

4154
private void updateButton(int position) {

sample/src/main/res/layout/activity_main.xml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
android:layout_height="match_parent"
66
android:orientation="vertical">
77

8-
98
<LinearLayout
109
android:layout_width="match_parent"
1110
android:layout_height="wrap_content"
@@ -131,7 +130,6 @@
131130
app:sb_typeface="fonts/aniron.ttf"/>
132131
</co.ceryle.segmentedbutton.SegmentedButtonGroup>
133132

134-
135133
<co.ceryle.segmentedbutton.SegmentedButtonGroup
136134
android:layout_width="match_parent"
137135
android:layout_height="wrap_content"

0 commit comments

Comments
 (0)