diff --git a/Readme.md b/Readme.md index 4d2f99a..f00d045 100755 --- a/Readme.md +++ b/Readme.md @@ -1,6 +1,29 @@ # Toggle Android Library for Custom Switches. +### Added feature + 1. Added different toggle and text color + - app:colorText="#ffffff" + - app:colorToggle="#ffffff" + + 2. Added text modification option + - app:textUpperCase + - app:textLowerCase + + 3. Start toggle animation from touched X position or from the toggle position + - setStartAnimationFromTouchPosition (only from code) + + 4. Outsourced properties + - setDuration (only from code) + - setInterpolator (only from code) + + 5. Added option the disable touch during animation + - setInterruptAnimation (only from code) + + 6. Added Animation listener to track toggle position in percentages + - setOnAnimateListener (only from code) + + ### Developed by [Angad Singh](https://www.github.com/angads25) ([@angads25](https://www.twitter.com/angads25)) @@ -8,15 +31,25 @@ Android Library for Custom Switches. [![API](https://img.shields.io/badge/API-14%2B-brightgreen.svg?style=flat)](https://android-arsenal.com/api?level=14) [![Build Status](https://travis-ci.org/Angads25/android-toggle.svg?branch=release)](https://travis-ci.org/Angads25/android-toggle) ### Mentions: -[![Download](https://api.bintray.com/packages/angads25/maven/Toggle/images/download.svg)](https://bintray.com/angads25/maven/Toggle/_latestVersion) [![Maven Central](https://maven-badges.herokuapp.com/maven-central/com.github.angads25/toggle/badge.svg)](https://maven-badges.herokuapp.com/maven-central/com.github.angads25/toggle) +[![](https://jitpack.io/v/jozsefmezei/android-toggle.svg)](https://jitpack.io/#jozsefmezei/android-toggle) ### Read all about internal classes and functions in the [wiki](https://github.com/Angads25/android-toggle/wiki). ### Installation -* Library is also Available in MavenCentral, So just put this in your app dependencies to use it: +Add it in your root build.gradle at the end of repositories: +```gradle + allprojects { + repositories { + ... + maven { url 'https://jitpack.io' } + } + } +``` + +* Put this in your app dependencies: ```gradle - implementation 'com.github.angads25:toggle:1.1.0' + implementation 'com.github.jozsefmezei:android-toggle:1.1.1' ``` ### Usage @@ -51,7 +84,7 @@ Android Library for Custom Switches. * Labeled Switch | Designed by - [Shweta Gupta](https://dribbble.com/shwetagupta) -![Labeled Switch](https://raw.githubusercontent.com/Angads25/android-toggle/release/screenshots/version%201/LabeledSwitch.png) +![Labeled Switch](https://raw.githubusercontent.com/jozsefmezei/android-toggle/release/screenshots/version%201/LabeledSwitch.png) * Day Night Switch | Designed by - [Ramakrishna V](https://dribbble.com/RamakrishnaUX) @@ -70,4 +103,4 @@ Android Library for Custom Switches. distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and - limitations under the License. \ No newline at end of file + limitations under the License. diff --git a/app/src/main/java/com/github/angads25/toggledemo/LabeledSwitchActivity.java b/app/src/main/java/com/github/angads25/toggledemo/LabeledSwitchActivity.java index ce911c3..746103c 100755 --- a/app/src/main/java/com/github/angads25/toggledemo/LabeledSwitchActivity.java +++ b/app/src/main/java/com/github/angads25/toggledemo/LabeledSwitchActivity.java @@ -21,7 +21,11 @@ import android.os.Handler; import android.support.v4.content.res.ResourcesCompat; import android.support.v7.app.AppCompatActivity; +import android.util.Log; +import android.view.animation.BounceInterpolator; +import com.github.angads25.toggle.interfaces.OnAnimateListener; +import com.github.angads25.toggle.model.ToggleableView; import com.github.angads25.toggle.widget.LabeledSwitch; import java.util.Random; @@ -36,6 +40,8 @@ public class LabeledSwitchActivity extends AppCompatActivity { R.id.switch1, R.id.switch2, R.id.switch4, R.id.switch5, R.id.switch7, R.id.switch8, + R.id.switch9, R.id.switch10, R.id.switch12, + R.id.switch12, R.id.switch13 }; private LabeledSwitch[] labeledSwitches; @@ -76,6 +82,16 @@ public void run() { labeledSwitches[2].setTypeface(openSansBold); labeledSwitches[3].setTypeface(openSansBold); + labeledSwitches[10].setDuration(5111); + labeledSwitches[10].setInterpolator(new BounceInterpolator()); + labeledSwitches[10].setStartAnimationFromTouchPosition(false); + labeledSwitches[10].setInterruptAnimation(false); + labeledSwitches[10].setOnAnimateListener(new OnAnimateListener() { + @Override + public void onAnimate(ToggleableView toggleableView, float position) { + Log.d("Actual_position_percent", String.valueOf(position)); + } + }); } @Override diff --git a/app/src/main/res/layout/activity_labeled_switch.xml b/app/src/main/res/layout/activity_labeled_switch.xml index 4e71755..25427e3 100755 --- a/app/src/main/res/layout/activity_labeled_switch.xml +++ b/app/src/main/res/layout/activity_labeled_switch.xml @@ -147,4 +147,78 @@ app:textOff="STOP" app:colorBorder="@color/colorAccent" /> + + + + + + + + + + + + \ No newline at end of file diff --git a/screenshots/version 1/LabeledSwitch.png b/screenshots/version 1/LabeledSwitch.png old mode 100755 new mode 100644 index f3ad341..4f554bb Binary files a/screenshots/version 1/LabeledSwitch.png and b/screenshots/version 1/LabeledSwitch.png differ diff --git a/toggle/build.gradle b/toggle/build.gradle index 08f3f6c..c394054 100755 --- a/toggle/build.gradle +++ b/toggle/build.gradle @@ -13,7 +13,7 @@ ext { siteUrl = 'https://github.com/angads25/android-toggle' gitUrl = 'https://github.com/angads25/android-toggle.git' - libraryVersion = '1.1.0' + libraryVersion = '1.1.4' developerId = 'angads25' developerName = 'Angad Singh' @@ -30,8 +30,8 @@ android { defaultConfig { minSdkVersion 14 targetSdkVersion 28 - versionCode 1 - versionName "1.1.0" + versionCode 3 + versionName "1.1.4" } buildTypes { release { diff --git a/toggle/src/main/java/com/github/angads25/toggle/interfaces/OnAnimateListener.java b/toggle/src/main/java/com/github/angads25/toggle/interfaces/OnAnimateListener.java new file mode 100644 index 0000000..719f5b4 --- /dev/null +++ b/toggle/src/main/java/com/github/angads25/toggle/interfaces/OnAnimateListener.java @@ -0,0 +1,8 @@ +package com.github.angads25.toggle.interfaces; + +import com.github.angads25.toggle.model.ToggleableView; + +public interface OnAnimateListener { + + void onAnimate(ToggleableView toggleableView, float position); +} diff --git a/toggle/src/main/java/com/github/angads25/toggle/model/ToggleableView.java b/toggle/src/main/java/com/github/angads25/toggle/model/ToggleableView.java index 6b7047b..93a4681 100755 --- a/toggle/src/main/java/com/github/angads25/toggle/model/ToggleableView.java +++ b/toggle/src/main/java/com/github/angads25/toggle/model/ToggleableView.java @@ -21,6 +21,7 @@ import android.view.View; import android.view.ViewDebug; +import com.github.angads25.toggle.interfaces.OnAnimateListener; import com.github.angads25.toggle.interfaces.OnStateChangedListener; import com.github.angads25.toggle.interfaces.OnToggledListener; @@ -57,6 +58,13 @@ public class ToggleableView extends View { */ protected OnToggledListener onToggledListener; + /** + * Listener to inform user about toggle position. Position are based on percentage between 0 and 1. + * + * @see #setOnAnimateListener(OnToggledListener) + */ + protected OnAnimateListener onAnimateListener; + /** * Simple constructor to use when creating a switch from code. * @param context The Context the switch is running in, through which it can @@ -142,4 +150,14 @@ public void setOn(boolean on) { public void setOnToggledListener(OnToggledListener onToggledListener) { this.onToggledListener = onToggledListener; } + + /** + * Register a callback to be invoked when the toggle animate between start and end position. If this switch is not + * enabled, there won't be any event. + * + * @param onAnimateListener The callback that will run + */ + public void setOnAnimateListener(OnAnimateListener onAnimateListener) { + this.onAnimateListener = onAnimateListener; + } } diff --git a/toggle/src/main/java/com/github/angads25/toggle/widget/LabeledSwitch.java b/toggle/src/main/java/com/github/angads25/toggle/widget/LabeledSwitch.java index bc7daa9..67f9aae 100755 --- a/toggle/src/main/java/com/github/angads25/toggle/widget/LabeledSwitch.java +++ b/toggle/src/main/java/com/github/angads25/toggle/widget/LabeledSwitch.java @@ -16,6 +16,7 @@ package com.github.angads25.toggle.widget; +import android.animation.Animator; import android.animation.ValueAnimator; import android.content.Context; import android.content.res.TypedArray; @@ -25,8 +26,10 @@ import android.graphics.RectF; import android.graphics.Typeface; import android.util.AttributeSet; +import android.util.Log; import android.view.MotionEvent; import android.view.animation.AccelerateDecelerateInterpolator; +import android.view.animation.Interpolator; import com.github.angads25.toggle.R; import com.github.angads25.toggle.model.ToggleableView; @@ -45,7 +48,8 @@ public class LabeledSwitch extends ToggleableView { private int colorBorder; private int colorDisabled; - private int textSize; + private int toggleColor = Integer.MIN_VALUE; + private int textColor = Integer.MIN_VALUE; private int outerRadii; private int thumbRadii; @@ -53,10 +57,17 @@ public class LabeledSwitch extends ToggleableView { private Paint paint; private long startTime; + private long duration; + private Interpolator interpolator = new AccelerateDecelerateInterpolator(); private String labelOn; private String labelOff; + private boolean textUpperCase; + private boolean textLowerCase; + + private int textSize; + private RectF thumbBounds; private RectF leftBgArc; @@ -70,6 +81,10 @@ public class LabeledSwitch extends ToggleableView { private float thumbOnCenterX; private float thumbOffCenterX; + protected boolean startAnimationFromTouchPosition = true; + protected boolean interruptAnimation = true; + protected boolean allowClick = true; + /** * Simple constructor to use when creating a switch from code. * @param context The Context the switch is running in, through which it can @@ -155,6 +170,10 @@ private void initProperties(AttributeSet attrs) { accentColor = getResources().getColor(R.color.colorAccent); } colorBorder = tarr.getColor(R.styleable.Toggle_colorBorder, accentColor); + } else if (attr == R.styleable.Toggle_colorText) { + textColor = tarr.getColor(R.styleable.Toggle_colorText, Integer.MIN_VALUE); + } else if (attr == R.styleable.Toggle_colorToggle) { + toggleColor = tarr.getColor(R.styleable.Toggle_colorToggle, Integer.MIN_VALUE); } else if (attr == R.styleable.Toggle_colorOn) { int accentColor; if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) { @@ -174,6 +193,10 @@ private void initProperties(AttributeSet attrs) { textSize = tarr.getDimensionPixelSize(R.styleable.Toggle_android_textSize, defaultTextSize); } else if(attr == R.styleable.Toggle_android_enabled) { enabled = tarr.getBoolean(R.styleable.Toggle_android_enabled, false); + } else if(attr == R.styleable.Toggle_textLowerCase) { + textLowerCase = tarr.getBoolean(R.styleable.Toggle_textLowerCase, false); + } else if(attr == R.styleable.Toggle_textUpperCase) { + textUpperCase = tarr.getBoolean(R.styleable.Toggle_textUpperCase, false); } } } @@ -230,58 +253,70 @@ private void initProperties(AttributeSet attrs) { if(isOn) { int alpha = (int)((((width >>> 1) - thumbBounds.centerX()) / ((width >>> 1) - thumbOffCenterX)) * 255); alpha = (alpha < 0 ? 0 : (alpha > 255 ? 255 : alpha)); - int onColor = Color.argb(alpha, Color.red(colorOn), Color.green(colorOn), Color.blue(colorOn)); + int onColor = textColor > Integer.MIN_VALUE ? Color.argb(alpha, Color.red(textColor), Color.green(textColor), Color.blue(textColor)) : + Color.argb(alpha, Color.red(colorOn), Color.green(colorOn), Color.blue(colorOn)); paint.setColor(onColor); float centerX = (width - padding - ((padding + (padding >>> 1)) + (thumbRadii << 1))) >>> 1; - canvas.drawText(labelOff, (padding + (padding >>> 1)) + (thumbRadii << 1) + centerX - (paint.measureText(labelOff) / 2), (height >>> 1) + textCenter, paint); + String text = textUpperCase ? labelOff.toUpperCase() : textLowerCase ? labelOff.toLowerCase() : labelOff; + canvas.drawText(text, (padding + (padding >>> 1)) + (thumbRadii << 1) + centerX - (paint.measureText(labelOff) / 2), (height >>> 1) + textCenter, paint); alpha = (int)(((thumbBounds.centerX() - (width >>> 1)) / (thumbOnCenterX - (width >>> 1))) * 255); alpha = (alpha < 0 ? 0 : (alpha > 255 ? 255 : alpha)); - int offColor = Color.argb(alpha, Color.red(colorOff), Color.green(colorOff), Color.blue(colorOff)); + int offColor = textColor > Integer.MIN_VALUE ? Color.argb(alpha, Color.red(textColor), Color.green(textColor), Color.blue(textColor)) : + Color.argb(alpha, Color.red(colorOff), Color.green(colorOff), Color.blue(colorOff)); paint.setColor(offColor); int maxSize = width - (padding << 1) - (thumbRadii << 1); centerX = (((padding >>> 1) + maxSize) - padding) >>> 1; - canvas.drawText(labelOn, padding + centerX - (paint.measureText(labelOn) / 2), (height >>> 1) + textCenter, paint); + text = textUpperCase ? labelOn.toUpperCase() : textLowerCase ? labelOn.toLowerCase() : labelOn; + canvas.drawText(text, padding + centerX - (paint.measureText(labelOn) / 2), (height >>> 1) + textCenter, paint); } else { int alpha = (int)(((thumbBounds.centerX() - (width >>> 1)) / (thumbOnCenterX - (width >>> 1))) * 255); alpha = (alpha < 0 ? 0 : (alpha > 255 ? 255 : alpha)); - int offColor = Color.argb(alpha, Color.red(colorOff), Color.green(colorOff), Color.blue(colorOff)); + int offColor = textColor > Integer.MIN_VALUE ? Color.argb(alpha, Color.red(textColor), Color.green(textColor), Color.blue(textColor)) : + Color.argb(alpha, Color.red(colorOff), Color.green(colorOff), Color.blue(colorOff)); paint.setColor(offColor); int maxSize = width - (padding << 1) - (thumbRadii << 1); float centerX = (((padding >>> 1) + maxSize) - padding) >>> 1; - canvas.drawText(labelOn, padding + centerX - (paint.measureText(labelOn) / 2), (height >>> 1) + textCenter, paint); + String text = textUpperCase ? labelOn.toUpperCase() : textLowerCase ? labelOn.toLowerCase() : labelOn; + canvas.drawText(text, padding + centerX - (paint.measureText(labelOn) / 2), (height >>> 1) + textCenter, paint); alpha = (int)((((width >>> 1) - thumbBounds.centerX()) / ((width >>> 1) - thumbOffCenterX)) * 255); alpha = (alpha < 0 ? 0 : (alpha > 255 ? 255 : alpha)); int onColor; if(isEnabled()) { - onColor = Color.argb(alpha, Color.red(colorOn), Color.green(colorOn), Color.blue(colorOn)); + onColor = textColor > Integer.MIN_VALUE ? Color.argb(alpha, Color.red(textColor), Color.green(textColor), Color.blue(textColor)) : + Color.argb(alpha, Color.red(colorOn), Color.green(colorOn), Color.blue(colorOn)); + } else { onColor = Color.argb(alpha, Color.red(colorDisabled), Color.green(colorDisabled), Color.blue(colorDisabled)); } paint.setColor(onColor); centerX = (width - padding - ((padding + (padding >>> 1)) + (thumbRadii << 1))) >>> 1; - canvas.drawText(labelOff, (padding + (padding >>> 1)) + (thumbRadii << 1) + centerX - (paint.measureText(labelOff) / 2), (height >>> 1) + textCenter, paint); + text = textUpperCase ? labelOff.toUpperCase() : textLowerCase ? labelOff.toLowerCase() : labelOff; + canvas.drawText(text, (padding + (padding >>> 1)) + (thumbRadii << 1) + centerX - (paint.measureText(labelOff) / 2), (height >>> 1) + textCenter, paint); } // Drawing Switch Thumb here { int alpha = (int) (((thumbBounds.centerX() - thumbOffCenterX) / (thumbOnCenterX - thumbOffCenterX)) * 255); alpha = (alpha < 0 ? 0 : (alpha > 255 ? 255 : alpha)); - int offColor = Color.argb(alpha, Color.red(colorOff), Color.green(colorOff), Color.blue(colorOff)); - paint.setColor(offColor); + int thumbColor = toggleColor > Integer.MIN_VALUE ? Color.argb(alpha, Color.red(toggleColor), Color.green(toggleColor), Color.blue(toggleColor)) : + Color.argb(alpha, Color.red(colorOff), Color.green(colorOff), Color.blue(colorOff)); + paint.setColor(thumbColor); canvas.drawCircle(thumbBounds.centerX(), thumbBounds.centerY(), thumbRadii, paint); alpha = (int) (((thumbOnCenterX - thumbBounds.centerX()) / (thumbOnCenterX - thumbOffCenterX)) * 255); alpha = (alpha < 0 ? 0 : (alpha > 255 ? 255 : alpha)); int onColor; if(isEnabled()) { - onColor = Color.argb(alpha, Color.red(colorOn), Color.green(colorOn), Color.blue(colorOn)); + onColor = textColor > Integer.MIN_VALUE ? Color.argb(alpha, Color.red(textColor), Color.green(textColor), Color.blue(textColor)) : + Color.argb(alpha, Color.red(colorOn), Color.green(colorOn), Color.blue(colorOn)); + } else { onColor = Color.argb(alpha, Color.red(colorDisabled), Color.green(colorDisabled), Color.blue(colorDisabled)); } @@ -350,25 +385,75 @@ private void initProperties(AttributeSet attrs) { */ @Override public final boolean performClick() { super.performClick(); + if(!allowClick) return false; if (isOn) { - ValueAnimator switchColor = ValueAnimator.ofFloat(width - padding - thumbRadii, padding); + float from = width - padding - thumbRadii; + ValueAnimator switchColor = ValueAnimator.ofFloat(from, padding); switchColor.addUpdateListener(animation -> { float value = (float) animation.getAnimatedValue(); + if (onAnimateListener != null){ + float position = (value - padding) / from; + if (position > 1) position = 1; + if (position < 0) position = 0; + onAnimateListener.onAnimate(this, position); + } thumbBounds.set(value, thumbBounds.top, value + thumbRadii, thumbBounds.bottom); invalidate(); }); - switchColor.setInterpolator(new AccelerateDecelerateInterpolator()); - switchColor.setDuration(250); + switchColor.addListener(new Animator.AnimatorListener() { + @Override + public void onAnimationStart(Animator animation) { + if(!interruptAnimation) allowClick = false; + } + + @Override + public void onAnimationEnd(Animator animation) { + allowClick = true; + } + + @Override + public void onAnimationCancel(Animator animation) {} + + @Override + public void onAnimationRepeat(Animator animation) {} + }); + switchColor.setInterpolator(interpolator); + switchColor.setDuration(duration); switchColor.start(); } else { - ValueAnimator switchColor = ValueAnimator.ofFloat(padding, width - padding - thumbRadii); + float to = width - padding - thumbRadii; + ValueAnimator switchColor = ValueAnimator.ofFloat(padding, to); switchColor.addUpdateListener(animation -> { float value = (float) animation.getAnimatedValue(); + if(onAnimateListener != null){ + float position = (value - padding) / to; + if (position > 1) position = 1; + if (position < 0) position = 0; + + onAnimateListener.onAnimate(this, position); + } thumbBounds.set(value, thumbBounds.top, value + thumbRadii, thumbBounds.bottom); invalidate(); }); - switchColor.setInterpolator(new AccelerateDecelerateInterpolator()); - switchColor.setDuration(250); + switchColor.addListener(new Animator.AnimatorListener() { + @Override + public void onAnimationStart(Animator animation) { + if(!interruptAnimation) allowClick = false; + } + + @Override + public void onAnimationEnd(Animator animation) { + allowClick = true; + } + + @Override + public void onAnimationCancel(Animator animation) {} + + @Override + public void onAnimationRepeat(Animator animation) {} + }); + switchColor.setInterpolator(interpolator); + switchColor.setDuration(duration); switchColor.start(); } isOn =! isOn; @@ -385,8 +470,9 @@ private void initProperties(AttributeSet attrs) { * @return True if the event was handled, false otherwise. */ @Override public final boolean onTouchEvent(MotionEvent event) { + if(!allowClick) return false; if(isEnabled()) { - float x = event.getX(); + float x = startAnimationFromTouchPosition ? event.getX() : thumbBounds.centerX(); switch (event.getAction()) { case MotionEvent.ACTION_DOWN: { startTime = System.currentTimeMillis(); @@ -412,22 +498,58 @@ private void initProperties(AttributeSet attrs) { ValueAnimator switchColor = ValueAnimator.ofFloat((x > (width - padding - thumbRadii) ? (width - padding - thumbRadii) : x), width - padding - thumbRadii); switchColor.addUpdateListener(animation -> { float value = (float) animation.getAnimatedValue(); + Log.d("Valuef", String.valueOf(value)); thumbBounds.set(value, thumbBounds.top, value + thumbRadii, thumbBounds.bottom); invalidate(); }); - switchColor.setInterpolator(new AccelerateDecelerateInterpolator()); - switchColor.setDuration(250); + switchColor.addListener(new Animator.AnimatorListener() { + @Override + public void onAnimationStart(Animator animation) { + if(!interruptAnimation) allowClick = false; + } + + @Override + public void onAnimationEnd(Animator animation) { + allowClick = true; + } + + @Override + public void onAnimationCancel(Animator animation) {} + + @Override + public void onAnimationRepeat(Animator animation) {} + }); + switchColor.setInterpolator(interpolator); + switchColor.setDuration(duration); switchColor.start(); isOn = true; } else { ValueAnimator switchColor = ValueAnimator.ofFloat((x < padding ? padding : x), padding); switchColor.addUpdateListener(animation -> { float value = (float) animation.getAnimatedValue(); + Log.d("Valuel", String.valueOf(value)); thumbBounds.set(value, thumbBounds.top, value + thumbRadii, thumbBounds.bottom); invalidate(); }); - switchColor.setInterpolator(new AccelerateDecelerateInterpolator()); - switchColor.setDuration(250); + switchColor.addListener(new Animator.AnimatorListener() { + @Override + public void onAnimationStart(Animator animation) { + if(!interruptAnimation) setEnabled(false); + } + + @Override + public void onAnimationEnd(Animator animation) { + setEnabled(true); + } + + @Override + public void onAnimationCancel(Animator animation) { } + + @Override + public void onAnimationRepeat(Animator animation) { } + }); + switchColor.setInterpolator(interpolator); + switchColor.setDuration(duration); switchColor.start(); isOn = false; } @@ -615,4 +737,78 @@ public void setTextSize(int textSize) { this.textSize = (int)(textSize * getResources().getDisplayMetrics().scaledDensity); invalidate(); } + + /** + *

Changes the toggle color.

+ * + * @param toggleColor the color. + */ + public void setToggleColor(int toggleColor) { + this.toggleColor = toggleColor; + } + + /** + *

Changes the label color.

+ * + * @param textColor the color. + */ + public void setTextColor(int textColor) { + this.textColor = textColor; + } + + /** + *

Changes the label case to upper.

+ * + * @param textUpperCase whether text upper case. + */ + public void setTextUpperCase(boolean textUpperCase) { + this.textUpperCase = textUpperCase; + } + + /** + *

Changes the label case to lower.

+ * + * @param textLowerCase whether text lower case. + */ + public void setTextLowerCase(boolean textLowerCase) { + this.textLowerCase = textLowerCase; + } + + /** + *

Start switch animation from start or from touch position. Default value is true.

+ * + * @param startAnimationFromTouchPosition Start from touch position if it is true. + */ + public void setStartAnimationFromTouchPosition(boolean startAnimationFromTouchPosition) { + this.startAnimationFromTouchPosition = startAnimationFromTouchPosition; + } + + public long getDuration() { + return duration; + } + + public void setDuration(long duration) { + this.duration = duration; + } + + public Interpolator getInterpolator() { + return interpolator; + } + + public void setInterpolator(Interpolator interpolator) { + this.interpolator = interpolator; + } + + public boolean isInterruptAnimation() { + return interruptAnimation; + } + + /** + *

Added option to skip clicks and touches during animation.

+ * + * @param interruptAnimation False means that clicks are not allowed during animation. + */ + public void setInterruptAnimation(boolean interruptAnimation) { + this.interruptAnimation = interruptAnimation; + } } diff --git a/toggle/src/main/res/values/attrs.xml b/toggle/src/main/res/values/attrs.xml index 82612f6..74b2f4a 100755 --- a/toggle/src/main/res/values/attrs.xml +++ b/toggle/src/main/res/values/attrs.xml @@ -19,6 +19,22 @@ name="colorOn" format="color"/> + + + + + + + +