From f0abe17f00090ee7ab5076284c4354bb56518e68 Mon Sep 17 00:00:00 2001 From: kyleduo Date: Tue, 24 May 2016 22:34:12 +0800 Subject: [PATCH 01/51] fix #49, update gradle version --- SwitchButton/build.gradle | 4 ++-- .../kyleduo/switchbutton/demo/MainActivity.java | 2 ++ .../gradle/wrapper/gradle-wrapper.properties | 4 ++-- .../com/kyleduo/switchbutton/SwitchButton.java | 16 ++++++++++------ 4 files changed, 16 insertions(+), 10 deletions(-) diff --git a/SwitchButton/build.gradle b/SwitchButton/build.gradle index e69203f..94f6077 100644 --- a/SwitchButton/build.gradle +++ b/SwitchButton/build.gradle @@ -5,8 +5,8 @@ buildscript { jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:1.1.2' - classpath 'com.github.dcendents:android-maven-plugin:1.2' + classpath 'com.android.tools.build:gradle:2.1.0' + classpath 'com.github.dcendents:android-maven-gradle-plugin:1.3' classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.0' // NOTE: Do not place your application dependencies here; they belong diff --git a/SwitchButton/demo/src/main/java/com/kyleduo/switchbutton/demo/MainActivity.java b/SwitchButton/demo/src/main/java/com/kyleduo/switchbutton/demo/MainActivity.java index 29c4487..1055229 100644 --- a/SwitchButton/demo/src/main/java/com/kyleduo/switchbutton/demo/MainActivity.java +++ b/SwitchButton/demo/src/main/java/com/kyleduo/switchbutton/demo/MainActivity.java @@ -2,8 +2,10 @@ import android.content.Intent; import android.net.Uri; +import android.os.Build; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; +import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.view.View; diff --git a/SwitchButton/gradle/wrapper/gradle-wrapper.properties b/SwitchButton/gradle/wrapper/gradle-wrapper.properties index 0c71e76..42dec09 100644 --- a/SwitchButton/gradle/wrapper/gradle-wrapper.properties +++ b/SwitchButton/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Wed Apr 10 15:27:10 PDT 2013 +#Tue May 24 21:48:46 CST 2016 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-2.2.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip diff --git a/SwitchButton/library/src/main/java/com/kyleduo/switchbutton/SwitchButton.java b/SwitchButton/library/src/main/java/com/kyleduo/switchbutton/SwitchButton.java index 0b045b3..2657e99 100644 --- a/SwitchButton/library/src/main/java/com/kyleduo/switchbutton/SwitchButton.java +++ b/SwitchButton/library/src/main/java/com/kyleduo/switchbutton/SwitchButton.java @@ -246,7 +246,7 @@ private int measureWidth(int widthMeasureSpec) { int widthMode = MeasureSpec.getMode(widthMeasureSpec); int measuredWidth; - int minWidth = (int) (mThumbSizeF.x * mBackMeasureRatio); + int minWidth = ceil(mThumbSizeF.x * mBackMeasureRatio); if (mIsBackUseDrawable) { minWidth = Math.max(minWidth, mBackDrawable.getMinimumWidth()); } @@ -259,7 +259,7 @@ private int measureWidth(int widthMeasureSpec) { minWidth += mTextWidth - left; } } - minWidth = Math.max(minWidth, (int) (minWidth + mThumbMargin.left + mThumbMargin.right)); + minWidth = Math.max(minWidth, ceil(minWidth + mThumbMargin.left + mThumbMargin.right)); minWidth = Math.max(minWidth, minWidth + getPaddingLeft() + getPaddingRight()); minWidth = Math.max(minWidth, getSuggestedMinimumWidth()); @@ -280,12 +280,12 @@ private int measureHeight(int heightMeasureSpec) { int heightSize = MeasureSpec.getSize(heightMeasureSpec); int measuredHeight; - int minHeight = (int) Math.max(mThumbSizeF.y, mThumbSizeF.y + mThumbMargin.top + mThumbMargin.right); + int minHeight = ceil(Math.max(mThumbSizeF.y, mThumbSizeF.y + mThumbMargin.top + mThumbMargin.right)); float onHeight = mOnLayout != null ? mOnLayout.getHeight() : 0; float offHeight = mOffLayout != null ? mOffLayout.getHeight() : 0; if (onHeight != 0 || offHeight != 0) { mTextHeight = Math.max(onHeight, offHeight); - minHeight = (int) Math.max(minHeight, mTextHeight); + minHeight = ceil(Math.max(minHeight, mTextHeight)); } minHeight = Math.max(minHeight, getSuggestedMinimumHeight()); minHeight = Math.max(minHeight, minHeight + getPaddingTop() + getPaddingBottom()); @@ -310,6 +310,10 @@ protected void onSizeChanged(int w, int h, int oldw, int oldh) { } } + private int ceil(double dimen) { + return (int) Math.ceil(dimen); + } + /** * set up the rect of back and thumb */ @@ -346,7 +350,7 @@ private void setup() { mBackRadius = Math.min(minBackRadius, mBackRadius); if (mBackDrawable != null) { - mBackDrawable.setBounds((int) mBackRectF.left, (int) mBackRectF.top, (int) mBackRectF.right, (int) mBackRectF.bottom); + mBackDrawable.setBounds((int) mBackRectF.left, (int) mBackRectF.top, ceil(mBackRectF.right), ceil(mBackRectF.bottom)); } if (mOnLayout != null) { @@ -424,7 +428,7 @@ protected void onDraw(Canvas canvas) { mPresentThumbRectF.set(mThumbRectF); mPresentThumbRectF.offset(mProcess * mSafeRectF.width(), 0); if (mIsThumbUseDrawable) { - mThumbDrawable.setBounds((int) mPresentThumbRectF.left, (int) mPresentThumbRectF.top, (int) mPresentThumbRectF.right, (int) mPresentThumbRectF.bottom); + mThumbDrawable.setBounds((int) mPresentThumbRectF.left, (int) mPresentThumbRectF.top, ceil(mPresentThumbRectF.right), ceil(mPresentThumbRectF.bottom)); mThumbDrawable.draw(canvas); } else { mPaint.setColor(mCurrThumbColor); From 9016d336ddf4dd67d72e38f25b0db3d544d47aee Mon Sep 17 00:00:00 2001 From: kyleduo Date: Tue, 24 May 2016 22:34:41 +0800 Subject: [PATCH 02/51] update --- .../main/java/com/kyleduo/switchbutton/demo/MainActivity.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/SwitchButton/demo/src/main/java/com/kyleduo/switchbutton/demo/MainActivity.java b/SwitchButton/demo/src/main/java/com/kyleduo/switchbutton/demo/MainActivity.java index 1055229..29c4487 100644 --- a/SwitchButton/demo/src/main/java/com/kyleduo/switchbutton/demo/MainActivity.java +++ b/SwitchButton/demo/src/main/java/com/kyleduo/switchbutton/demo/MainActivity.java @@ -2,10 +2,8 @@ import android.content.Intent; import android.net.Uri; -import android.os.Build; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; -import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.view.View; From a1d65f7ae1a71373a5230454d4fda1ae83601994 Mon Sep 17 00:00:00 2001 From: kyleduo Date: Thu, 2 Jun 2016 23:12:52 +0800 Subject: [PATCH 03/51] support no event operation --- .../switchbutton/demo/StyleActivity.java | 12 ++ .../switchbutton/demo/UseActivity.java | 59 ++++++--- .../src/main/res/layout/activity_style.xml | 30 ++++- .../demo/src/main/res/layout/activity_use.xml | 34 +++++ .../demo/src/main/res/values/strings.xml | 120 +++++++++--------- .../kyleduo/switchbutton/SwitchButton.java | 48 +++++++ 6 files changed, 225 insertions(+), 78 deletions(-) diff --git a/SwitchButton/demo/src/main/java/com/kyleduo/switchbutton/demo/StyleActivity.java b/SwitchButton/demo/src/main/java/com/kyleduo/switchbutton/demo/StyleActivity.java index cec8722..9e3acb7 100644 --- a/SwitchButton/demo/src/main/java/com/kyleduo/switchbutton/demo/StyleActivity.java +++ b/SwitchButton/demo/src/main/java/com/kyleduo/switchbutton/demo/StyleActivity.java @@ -16,6 +16,7 @@ protected void onCreate(Bundle savedInstanceState) { setContentView(R.layout.activity_style); SwitchButton disableSb = (SwitchButton) findViewById(R.id.sb_disable_control); + SwitchButton disableNoEventSb = (SwitchButton) findViewById(R.id.sb_disable_control_no_event); mFlymeSb = (SwitchButton) findViewById(R.id.sb_custom_flyme); mMiuiSb = (SwitchButton) findViewById(R.id.sb_custom_miui); mCustomSb = (SwitchButton) findViewById(R.id.sb_custom); @@ -32,6 +33,17 @@ public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { mSB.setEnabled(isChecked); } }); + disableNoEventSb.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + mFlymeSb.setEnabled(isChecked); + mMiuiSb.setEnabled(isChecked); + mCustomSb.setEnabled(isChecked); + mDefaultSb.setEnabled(isChecked); + mSB.setEnabled(isChecked); + } + }); + disableNoEventSb.setCheckedImmediatelyNoEvent(false); } } diff --git a/SwitchButton/demo/src/main/java/com/kyleduo/switchbutton/demo/UseActivity.java b/SwitchButton/demo/src/main/java/com/kyleduo/switchbutton/demo/UseActivity.java index 8534207..80024aa 100644 --- a/SwitchButton/demo/src/main/java/com/kyleduo/switchbutton/demo/UseActivity.java +++ b/SwitchButton/demo/src/main/java/com/kyleduo/switchbutton/demo/UseActivity.java @@ -7,6 +7,7 @@ import android.view.View; import android.widget.Button; import android.widget.CompoundButton; +import android.widget.LinearLayout; import android.widget.ProgressBar; import android.widget.TextView; import android.widget.Toast; @@ -17,7 +18,7 @@ public class UseActivity extends AppCompatActivity implements View.OnClickListen private SwitchButton mListenerSb, mLongSb, mToggleSb, mCheckedSb, mDelaySb, mForceOpenSb, mForceOpenControlSb; private ProgressBar mPb; - private Button mStartBt, mToggleAniBt, mToggleNotAniBt, mCheckedAniBt, mCheckNotAniBt; + private Button mStartBt; private TextView mListenerFinish; @Override @@ -27,6 +28,17 @@ protected void onCreate(Bundle savedInstanceState) { findView(); + LinearLayout toggleWrapper = (LinearLayout) findViewById(R.id.toggle_wrapper); + for (int i = 0; i < toggleWrapper.getChildCount(); i++) { + toggleWrapper.getChildAt(i).setOnClickListener(this); + } + + LinearLayout checkWrapper = (LinearLayout) findViewById(R.id.check_wrapper); + for (int i = 0; i < checkWrapper.getChildCount(); i++) { + checkWrapper.getChildAt(i).setOnClickListener(this); + } + + // work with listener mListenerSb.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @@ -84,20 +96,12 @@ public void onAnimationRepeat(Animator animation) { } }); - // toggle - mToggleAniBt.setOnClickListener(this); - mToggleNotAniBt.setOnClickListener(this); - - // checked - mCheckedAniBt.setOnClickListener(this); - mCheckNotAniBt.setOnClickListener(this); - // check in check mForceOpenSb.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if (mForceOpenControlSb.isChecked()) { - Toast.makeText(UseActivity.this, "Call mForceOpenSb.setChecked(true); in on CheckedChanged", Toast.LENGTH_SHORT).show(); + toast("Call mForceOpenSb.setChecked(true); in on CheckedChanged"); mForceOpenSb.setChecked(true); } } @@ -116,16 +120,26 @@ private void findView() { mPb.setMax(1000); mStartBt = (Button) findViewById(R.id.long_start); - mToggleAniBt = (Button) findViewById(R.id.toggle_ani); - mToggleNotAniBt = (Button) findViewById(R.id.toggle_not_ani); - mCheckedAniBt = (Button) findViewById(R.id.checked_ani); - mCheckNotAniBt = (Button) findViewById(R.id.checked_not_ani); mListenerFinish = (TextView) findViewById(R.id.listener_finish); mListenerFinish.setVisibility(mListenerSb.isChecked() ? View.VISIBLE : View.INVISIBLE); mForceOpenSb = (SwitchButton) findViewById(R.id.use_focus_open); mForceOpenControlSb = (SwitchButton) findViewById(R.id.use_focus_open_control); + + mToggleSb.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + toast("Toggle SwitchButton new check state: " + (isChecked ? "Checked" : "Unchecked")); + } + }); + + mCheckedSb.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + toast("Check SwitchButton new check state: " + (isChecked ? "Checked" : "Unchecked")); + } + }); } @Override @@ -135,18 +149,33 @@ public void onClick(View v) { case R.id.toggle_ani: mToggleSb.toggle(); break; + case R.id.toggle_ani_no_event: + mToggleSb.toggleNoEvent(); + break; case R.id.toggle_not_ani: mToggleSb.toggleImmediately(); break; + case R.id.toggle_not_ani_no_event: + mToggleSb.toggleImmediatelyNoEvent(); + break; case R.id.checked_ani: mCheckedSb.setChecked(!mCheckedSb.isChecked()); break; + case R.id.checked_ani_no_event: + mCheckedSb.setCheckedNoEvent(!mCheckedSb.isChecked()); + break; case R.id.checked_not_ani: mCheckedSb.setCheckedImmediately(!mCheckedSb.isChecked()); break; - + case R.id.checked_not_ani_no_event: + mCheckedSb.setCheckedImmediatelyNoEvent(!mCheckedSb.isChecked()); + break; default: break; } } + + private void toast(String text) { + Toast.makeText(UseActivity.this, text, Toast.LENGTH_SHORT).show(); + } } diff --git a/SwitchButton/demo/src/main/res/layout/activity_style.xml b/SwitchButton/demo/src/main/res/layout/activity_style.xml index 7efc46f..041cacd 100644 --- a/SwitchButton/demo/src/main/res/layout/activity_style.xml +++ b/SwitchButton/demo/src/main/res/layout/activity_style.xml @@ -249,13 +249,31 @@ android:layout_height="wrap_content" android:text="@string/style_disable_opt"/> - + android:orientation="horizontal"> + + + + + + + \ No newline at end of file diff --git a/SwitchButton/demo/src/main/res/layout/activity_use.xml b/SwitchButton/demo/src/main/res/layout/activity_use.xml index c2169e2..e6fd29d 100644 --- a/SwitchButton/demo/src/main/res/layout/activity_use.xml +++ b/SwitchButton/demo/src/main/res/layout/activity_use.xml @@ -172,6 +172,7 @@ android:focusable="false"/> +