diff --git a/README.md b/README.md
index 0c4e01f..273a262 100644
--- a/README.md
+++ b/README.md
@@ -61,6 +61,10 @@ dependencies {
* [JustifyTextView] 适用文字对齐,错乱修正等;原文地址:https://github.com/ufo22940268/android-justifiedtextview
* [PhotoViewPager] :可左右滑动照片查看器(案例:[使用:sample/activity/PhotoViewActivity])
* [RoundImage]:圆形ImageView控件,直接在布局中使用([使用:sample/res/layout/fragment_view.xml])
+* [RoundFrameLayout]: 可在布局中直接设置shape相关的属性(背景颜色、角度等)
+* [RoundLinearLayout]: 可在布局中直接设置shape相关的属性(背景颜色、角度等)
+* [RoundRelativeLayout]: 可在布局中直接设置shape相关的属性(背景颜色、角度等)
+* [RoundTextView]: 可在布局中直接设置shape相关的属性(背景颜色、角度等)
* [SuperTextView]:超酷炫的TextView,可以设置出各种特效文字(原文地址:http://www.jianshu.com/p/1b91e11e441d)
* [TabRadioButton] :可设置图片尺寸的RadioButton,适用于图文结合的RadioButton
@@ -212,6 +216,10 @@ dependencies {
[JustifyTextView]:https://github.com/SibreiaDante/SiberiaDanteLib/blob/master/siberiadante/src/main/java/com/siberiadante/lib/widget/JustifyTextView.java
[PhotoViewPager]:https://github.com/SibreiaDante/SiberiaDanteLib/blob/master/siberiadante/src/main/java/com/siberiadante/lib/widget/PhotoViewPager.java
[RoundImage]:https://github.com/SibreiaDante/SiberiaDanteLib/blob/master/siberiadante/src/main/java/com/siberiadante/lib/widget/RoundImage.java
+[RoundFrameLayout]:https://github.com/SibreiaDante/SiberiaDanteLib/blob/master/siberiadante/src/main/java/com/siberiadante/lib/widget/RoundFrameLayout.java
+[RoundLinearLayout]:https://github.com/SibreiaDante/SiberiaDanteLib/blob/master/siberiadante/src/main/java/com/siberiadante/lib/widget/RoundLinearLayout.java
+[RoundRelativeLayout]:https://github.com/SibreiaDante/SiberiaDanteLib/blob/master/siberiadante/src/main/java/com/siberiadante/lib/widget/RoundRelativeLayout.java
+[RoundTextView]:https://github.com/SibreiaDante/SiberiaDanteLib/blob/master/siberiadante/src/main/java/com/siberiadante/lib/widget/RoundTextView.java
[SuperTextView]:https://github.com/SibreiaDante/SiberiaDanteLib/blob/master/siberiadante/src/main/java/com/siberiadante/lib/widget/SuperTextView.java
[TabRadioButton]:https://github.com/SibreiaDante/SiberiaDanteLib/blob/master/siberiadante/src/main/java/com/siberiadante/lib/widget/TabRadioButton.java
diff --git a/gradle.properties b/gradle.properties
index aac7c9b..2722788 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -1,17 +1,16 @@
# Project-wide Gradle settings.
-
# IDE (e.g. Android Studio) users:
# Gradle settings configured through the IDE *will override*
# any settings specified in this file.
-
# For more details on how to configure your build environment visit
# http://www.gradle.org/docs/current/userguide/build_environment.html
-
# Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings.
org.gradle.jvmargs=-Xmx1536m
-
# When configured, Gradle will run in incubating parallel mode.
# This option should only be used with decoupled projects. More details, visit
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
# org.gradle.parallel=true
+
+#NDK汾˵ҪȻĿ
+android.useDeprecatedNdk=true
diff --git a/sample/src/main/AndroidManifest.xml b/sample/src/main/AndroidManifest.xml
index 4a8f5cc..bfeb9da 100644
--- a/sample/src/main/AndroidManifest.xml
+++ b/sample/src/main/AndroidManifest.xml
@@ -53,6 +53,7 @@
android:value="@integer/google_play_services_version" />
+
\ No newline at end of file
diff --git a/sample/src/main/java/com/sample/ui/activity/view/ShapeViewActivity.java b/sample/src/main/java/com/sample/ui/activity/view/ShapeViewActivity.java
new file mode 100644
index 0000000..279e756
--- /dev/null
+++ b/sample/src/main/java/com/sample/ui/activity/view/ShapeViewActivity.java
@@ -0,0 +1,16 @@
+package com.sample.ui.activity.view;
+
+import android.support.v7.app.AppCompatActivity;
+import android.os.Bundle;
+
+import com.sample.R;
+import com.sample.ui.activity.BaseActivity;
+
+public class ShapeViewActivity extends BaseActivity {
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_shape_view);
+ }
+}
diff --git a/sample/src/main/java/com/sample/ui/fragment/ViewFragment.java b/sample/src/main/java/com/sample/ui/fragment/ViewFragment.java
index 6d9b42f..3c898ab 100644
--- a/sample/src/main/java/com/sample/ui/fragment/ViewFragment.java
+++ b/sample/src/main/java/com/sample/ui/fragment/ViewFragment.java
@@ -12,6 +12,7 @@
import com.sample.ui.activity.view.DialogActivity;
import com.sample.ui.activity.view.ImageSpanActivity;
import com.sample.ui.activity.view.QQStepViewActivity;
+import com.sample.util.JumpUtils;
import com.siberiadante.lib.util.ScreenUtil;
import com.siberiadante.lib.view.TitleBar;
@@ -37,8 +38,9 @@ public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,
@Override
protected void initView() {
layout.findViewById(R.id.btn_start_general_dialog_activity).setOnClickListener(this);
- layout.findViewById(R.id.btn_start_qq_exercise__activity).setOnClickListener(this);
- layout.findViewById(R.id.btn_start_image_span__activity).setOnClickListener(this);
+ layout.findViewById(R.id.btn_start_qq_exercise_activity).setOnClickListener(this);
+ layout.findViewById(R.id.btn_start_image_span_activity).setOnClickListener(this);
+ layout.findViewById(R.id.btn_start_shape_view_activity).setOnClickListener(this);
TitleBar titleBar = ((TitleBar) layout.findViewById(R.id.titleBar));
initTitleBar(titleBar);
}
@@ -63,15 +65,17 @@ public void onClick(View view) {
Intent intent = null;
switch (view.getId()) {
case R.id.btn_start_general_dialog_activity:
- intent = new Intent(getActivity(), DialogActivity.class);
+ JumpUtils.goToDialogActivity(getActivity());
break;
- case R.id.btn_start_qq_exercise__activity:
- intent = new Intent(getActivity(), QQStepViewActivity.class);
+ case R.id.btn_start_qq_exercise_activity:
+ JumpUtils.goToQQStepViewActivity(getActivity());
break;
- case R.id.btn_start_image_span__activity:
- intent = new Intent(getActivity(), ImageSpanActivity.class);
+ case R.id.btn_start_image_span_activity:
+ JumpUtils.goToImageSpanActivity(getActivity());
+ break;
+ case R.id.btn_start_shape_view_activity:
+ JumpUtils.goToShapeViewActivity(getActivity());
break;
}
- startActivity(intent);
}
}
diff --git a/sample/src/main/java/com/sample/util/JumpUtils.java b/sample/src/main/java/com/sample/util/JumpUtils.java
new file mode 100644
index 0000000..7012d66
--- /dev/null
+++ b/sample/src/main/java/com/sample/util/JumpUtils.java
@@ -0,0 +1,42 @@
+package com.sample.util;
+
+import android.app.Activity;
+import android.content.Intent;
+
+import com.sample.ui.activity.view.DialogActivity;
+import com.sample.ui.activity.view.ImageSpanActivity;
+import com.sample.ui.activity.view.QQStepViewActivity;
+import com.sample.ui.activity.view.ShapeViewActivity;
+
+/**
+ * @Created SiberiaDante
+ * @Describe:
+ * @Time: 2017/9/4
+ * @Email: 994537867@qq.com
+ * @GitHub: https://github.com/SiberiaDante
+ */
+
+public class JumpUtils {
+
+ private static Intent intent;
+
+ public static void goToDialogActivity(Activity activity) {
+ intent = new Intent(activity, DialogActivity.class);
+ activity.startActivity(intent);
+ }
+
+ public static void goToQQStepViewActivity(Activity activity) {
+ intent = new Intent(activity, QQStepViewActivity.class);
+ activity.startActivity(intent);
+ }
+
+ public static void goToImageSpanActivity(Activity activity) {
+ intent = new Intent(activity, ImageSpanActivity.class);
+ activity.startActivity(intent);
+ }
+
+ public static void goToShapeViewActivity(Activity activity) {
+ intent = new Intent(activity, ShapeViewActivity.class);
+ activity.startActivity(intent);
+ }
+}
diff --git a/sample/src/main/res/layout/activity_main.xml b/sample/src/main/res/layout/activity_main.xml
index 8a92726..63c81cf 100644
--- a/sample/src/main/res/layout/activity_main.xml
+++ b/sample/src/main/res/layout/activity_main.xml
@@ -35,12 +35,14 @@
android:text="组件"
dante:drawableSize="25dp"
dante:drawableTop="@drawable/checked_home_two" />
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/sample/src/main/res/layout/fragment_view.xml b/sample/src/main/res/layout/fragment_view.xml
index e4d1b18..9df43f2 100644
--- a/sample/src/main/res/layout/fragment_view.xml
+++ b/sample/src/main/res/layout/fragment_view.xml
@@ -34,14 +34,18 @@
android:text="各种Dialog" />
+
\ No newline at end of file
diff --git a/siberiadante/src/main/java/com/siberiadante/lib/util/IntentUtil.java b/siberiadante/src/main/java/com/siberiadante/lib/util/IntentUtil.java
index 063d547..71dee1b 100644
--- a/siberiadante/src/main/java/com/siberiadante/lib/util/IntentUtil.java
+++ b/siberiadante/src/main/java/com/siberiadante/lib/util/IntentUtil.java
@@ -1,5 +1,6 @@
package com.siberiadante.lib.util;
+import android.app.Activity;
import android.content.ComponentName;
import android.content.Intent;
import android.net.Uri;
@@ -13,6 +14,8 @@
import java.io.File;
+import static android.icu.lang.UCharacter.GraphemeClusterBreak.T;
+
/**
* Created by SiberiaDante on 2017/5/15.
*/
diff --git a/siberiadante/src/main/java/com/siberiadante/lib/widget/RoundFrameLayout.java b/siberiadante/src/main/java/com/siberiadante/lib/widget/RoundFrameLayout.java
new file mode 100644
index 0000000..c95c0f8
--- /dev/null
+++ b/siberiadante/src/main/java/com/siberiadante/lib/widget/RoundFrameLayout.java
@@ -0,0 +1,54 @@
+package com.siberiadante.lib.widget;
+
+import android.content.Context;
+import android.util.AttributeSet;
+import android.widget.FrameLayout;
+import android.widget.RelativeLayout;
+
+/**
+ * @Created SiberiaDante
+ * @Describe: 简化FrameLayout shape 画背景
+ * @Time: 2017/9/4
+ * @Email: 994537867@qq.com
+ * @GitHub: https://github.com/SiberiaDante
+ */
+
+public class RoundFrameLayout extends FrameLayout {
+
+ private RoundViewAttr roundViewAttr;
+
+ public RoundFrameLayout(Context context) {
+ this(context, null);
+ }
+
+ public RoundFrameLayout(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ roundViewAttr = new RoundViewAttr(this, context, attrs);
+
+ }
+
+ public RoundViewAttr getRoundViewAttr() {
+ return roundViewAttr;
+ }
+
+ @Override
+ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+ if (roundViewAttr.isWidthHeightEqual() && getWidth() > 0 && getHeight() > 0) {
+ int max = Math.max(getWidth(), getHeight());
+ int measureSpec = MeasureSpec.makeMeasureSpec(max, MeasureSpec.EXACTLY);
+ super.onMeasure(measureSpec, measureSpec);
+ return;
+ }
+ super.onMeasure(widthMeasureSpec, heightMeasureSpec);
+ }
+
+ @Override
+ protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
+ super.onLayout(changed, left, top, right, bottom);
+ if (roundViewAttr.isRadiusHalfHeight()) {
+ roundViewAttr.setCornerRadius(getHeight() / 2);
+ } else {
+ roundViewAttr.setBgSelector();
+ }
+ }
+}
diff --git a/siberiadante/src/main/java/com/siberiadante/lib/widget/RoundLinearLayout.java b/siberiadante/src/main/java/com/siberiadante/lib/widget/RoundLinearLayout.java
new file mode 100644
index 0000000..85670ac
--- /dev/null
+++ b/siberiadante/src/main/java/com/siberiadante/lib/widget/RoundLinearLayout.java
@@ -0,0 +1,54 @@
+package com.siberiadante.lib.widget;
+
+import android.content.Context;
+import android.util.AttributeSet;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+
+/**
+ * @Created SiberiaDante
+ * @Describe: 简化LinearLayout shape 画背景
+ * @Time: 2017/9/4
+ * @Email: 994537867@qq.com
+ * @GitHub: https://github.com/SiberiaDante
+ */
+
+public class RoundLinearLayout extends LinearLayout {
+
+ private RoundViewAttr roundViewAttr;
+
+ public RoundLinearLayout(Context context) {
+ this(context, null);
+ }
+
+ public RoundLinearLayout(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ roundViewAttr = new RoundViewAttr(this, context, attrs);
+
+ }
+
+ public RoundViewAttr getRoundViewAttr() {
+ return roundViewAttr;
+ }
+
+ @Override
+ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+ if (roundViewAttr.isWidthHeightEqual() && getWidth() > 0 && getHeight() > 0) {
+ int max = Math.max(getWidth(), getHeight());
+ int measureSpec = MeasureSpec.makeMeasureSpec(max, MeasureSpec.EXACTLY);
+ super.onMeasure(measureSpec, measureSpec);
+ return;
+ }
+ super.onMeasure(widthMeasureSpec, heightMeasureSpec);
+ }
+
+ @Override
+ protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
+ super.onLayout(changed, left, top, right, bottom);
+ if (roundViewAttr.isRadiusHalfHeight()) {
+ roundViewAttr.setCornerRadius(getHeight() / 2);
+ } else {
+ roundViewAttr.setBgSelector();
+ }
+ }
+}
diff --git a/siberiadante/src/main/java/com/siberiadante/lib/widget/RoundRelativeLayout.java b/siberiadante/src/main/java/com/siberiadante/lib/widget/RoundRelativeLayout.java
new file mode 100644
index 0000000..f699095
--- /dev/null
+++ b/siberiadante/src/main/java/com/siberiadante/lib/widget/RoundRelativeLayout.java
@@ -0,0 +1,54 @@
+package com.siberiadante.lib.widget;
+
+import android.content.Context;
+import android.util.AttributeSet;
+import android.widget.LinearLayout;
+import android.widget.RelativeLayout;
+
+/**
+ * @Created SiberiaDante
+ * @Describe: 简化RelativeLayout shape 画背景
+ * @Time: 2017/9/4
+ * @Email: 994537867@qq.com
+ * @GitHub: https://github.com/SiberiaDante
+ */
+
+public class RoundRelativeLayout extends RelativeLayout {
+
+ private RoundViewAttr roundViewAttr;
+
+ public RoundRelativeLayout(Context context) {
+ this(context, null);
+ }
+
+ public RoundRelativeLayout(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ roundViewAttr = new RoundViewAttr(this, context, attrs);
+
+ }
+
+ public RoundViewAttr getRoundViewAttr() {
+ return roundViewAttr;
+ }
+
+ @Override
+ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+ if (roundViewAttr.isWidthHeightEqual() && getWidth() > 0 && getHeight() > 0) {
+ int max = Math.max(getWidth(), getHeight());
+ int measureSpec = MeasureSpec.makeMeasureSpec(max, MeasureSpec.EXACTLY);
+ super.onMeasure(measureSpec, measureSpec);
+ return;
+ }
+ super.onMeasure(widthMeasureSpec, heightMeasureSpec);
+ }
+
+ @Override
+ protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
+ super.onLayout(changed, left, top, right, bottom);
+ if (roundViewAttr.isRadiusHalfHeight()) {
+ roundViewAttr.setCornerRadius(getHeight() / 2);
+ } else {
+ roundViewAttr.setBgSelector();
+ }
+ }
+}
diff --git a/siberiadante/src/main/java/com/siberiadante/lib/widget/RoundTextView.java b/siberiadante/src/main/java/com/siberiadante/lib/widget/RoundTextView.java
new file mode 100644
index 0000000..5599146
--- /dev/null
+++ b/siberiadante/src/main/java/com/siberiadante/lib/widget/RoundTextView.java
@@ -0,0 +1,56 @@
+package com.siberiadante.lib.widget;
+
+import android.content.Context;
+import android.util.AttributeSet;
+import android.widget.TextView;
+
+/**
+ * @Created SiberiaDante
+ * @Describe: 简化TextView shape 画背景
+ * @Time: 2017/9/4
+ * @Email: 994537867@qq.com
+ * @GitHub: https://github.com/SiberiaDante
+ */
+
+public class RoundTextView extends TextView {
+
+ private RoundViewAttr roundViewAttr;
+
+ public RoundTextView(Context context) {
+ this(context, null);
+ }
+
+ public RoundTextView(Context context, AttributeSet attrs) {
+ this(context, attrs, 0);
+ }
+
+ public RoundTextView(Context context, AttributeSet attrs, int defStyleAttr) {
+ super(context, attrs, defStyleAttr);
+ roundViewAttr = new RoundViewAttr(this, context, attrs);
+ }
+
+ public RoundViewAttr getRoundViewAttr() {
+ return roundViewAttr;
+ }
+
+ @Override
+ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+ if (roundViewAttr.isWidthHeightEqual() && getWidth() > 0 && getHeight() > 0) {
+ int max = Math.max(getWidth(), getHeight());
+ int measureSpec = MeasureSpec.makeMeasureSpec(max, MeasureSpec.EXACTLY);
+ super.onMeasure(measureSpec, measureSpec);
+ return;
+ }
+ super.onMeasure(widthMeasureSpec, heightMeasureSpec);
+ }
+
+ @Override
+ protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
+ super.onLayout(changed, left, top, right, bottom);
+ if (roundViewAttr.isRadiusHalfHeight()) {
+ roundViewAttr.setCornerRadius(getHeight() / 2);
+ } else {
+ roundViewAttr.setBgSelector();
+ }
+ }
+}
diff --git a/siberiadante/src/main/java/com/siberiadante/lib/widget/RoundViewAttr.java b/siberiadante/src/main/java/com/siberiadante/lib/widget/RoundViewAttr.java
new file mode 100644
index 0000000..b7e7a6d
--- /dev/null
+++ b/siberiadante/src/main/java/com/siberiadante/lib/widget/RoundViewAttr.java
@@ -0,0 +1,275 @@
+package com.siberiadante.lib.widget;
+
+import android.annotation.TargetApi;
+import android.content.Context;
+import android.content.res.ColorStateList;
+import android.content.res.TypedArray;
+import android.graphics.Color;
+import android.graphics.drawable.GradientDrawable;
+import android.graphics.drawable.RippleDrawable;
+import android.graphics.drawable.StateListDrawable;
+import android.os.Build;
+import android.util.AttributeSet;
+import android.view.View;
+import android.widget.TextView;
+
+import com.siberiadante.lib.R;
+
+/**
+ * @Created SiberiaDante
+ * @Describe: @{Link https://github.com/H07000223/FlycoRoundView}
+ * @Time: 2017/9/4
+ * @Email: 994537867@qq.com
+ * @GitHub: https://github.com/SiberiaDante
+ */
+
+public class RoundViewAttr {
+ private View view;
+ private Context context;
+ private GradientDrawable gd_background = new GradientDrawable();
+ private GradientDrawable gd_background_press = new GradientDrawable();
+ private int backgroundColor;
+ private int backgroundPressColor;
+ private int cornerRadius;
+ private int cornerRadius_TL;
+ private int cornerRadius_TR;
+ private int cornerRadius_BL;
+ private int cornerRadius_BR;
+ private int strokeWidth;
+ private int strokeColor;
+ private int strokePressColor;
+ private int textPressColor;
+ private boolean isRadiusHalfHeight;
+ private boolean isWidthHeightEqual;
+ private boolean isRippleEnable;
+ private float[] radiusArr = new float[8];
+
+ public RoundViewAttr(View view, Context context, AttributeSet attrs) {
+ this.view = view;
+ this.context = context;
+ obtainAttributes(context, attrs);
+ }
+
+ private void obtainAttributes(Context context, AttributeSet attrs) {
+ TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.RoundView);
+ backgroundColor = ta.getColor(R.styleable.RoundView_r_backgroundColor, Color.TRANSPARENT);
+ backgroundPressColor = ta.getColor(R.styleable.RoundView_r_backgroundPressColor, Integer.MAX_VALUE);
+ cornerRadius = ta.getDimensionPixelSize(R.styleable.RoundView_r_cornerRadius, 0);
+ strokeWidth = ta.getDimensionPixelSize(R.styleable.RoundView_r_strokeWidth, 0);
+ strokeColor = ta.getColor(R.styleable.RoundView_r_strokeColor, Color.TRANSPARENT);
+ strokePressColor = ta.getColor(R.styleable.RoundView_r_strokePressColor, Integer.MAX_VALUE);
+ textPressColor = ta.getColor(R.styleable.RoundView_r_textPressColor, Integer.MAX_VALUE);
+ isRadiusHalfHeight = ta.getBoolean(R.styleable.RoundView_r_isRadiusHalfHeight, false);
+ isWidthHeightEqual = ta.getBoolean(R.styleable.RoundView_r_isWidthHeightEqual, false);
+ cornerRadius_TL = ta.getDimensionPixelSize(R.styleable.RoundView_r_cornerRadius_TL, 0);
+ cornerRadius_TR = ta.getDimensionPixelSize(R.styleable.RoundView_r_cornerRadius_TR, 0);
+ cornerRadius_BL = ta.getDimensionPixelSize(R.styleable.RoundView_r_cornerRadius_BL, 0);
+ cornerRadius_BR = ta.getDimensionPixelSize(R.styleable.RoundView_r_cornerRadius_BR, 0);
+ isRippleEnable = ta.getBoolean(R.styleable.RoundView_r_isRippleEnable, true);
+
+ ta.recycle();
+ }
+
+ public void setBackgroundColor(int backgroundColor) {
+ this.backgroundColor = backgroundColor;
+ setBgSelector();
+ }
+
+ public void setBackgroundPressColor(int backgroundPressColor) {
+ this.backgroundPressColor = backgroundPressColor;
+ setBgSelector();
+ }
+
+ public void setCornerRadius(int cornerRadius) {
+ this.cornerRadius = dp2px(cornerRadius);
+ setBgSelector();
+ }
+
+ public void setStrokeWidth(int strokeWidth) {
+ this.strokeWidth = dp2px(strokeWidth);
+ setBgSelector();
+ }
+
+ public void setStrokeColor(int strokeColor) {
+ this.strokeColor = strokeColor;
+ setBgSelector();
+ }
+
+ public void setStrokePressColor(int strokePressColor) {
+ this.strokePressColor = strokePressColor;
+ setBgSelector();
+ }
+
+ public void setTextPressColor(int textPressColor) {
+ this.textPressColor = textPressColor;
+ setBgSelector();
+ }
+
+ public void setIsRadiusHalfHeight(boolean isRadiusHalfHeight) {
+ this.isRadiusHalfHeight = isRadiusHalfHeight;
+ setBgSelector();
+ }
+
+ public void setIsWidthHeightEqual(boolean isWidthHeightEqual) {
+ this.isWidthHeightEqual = isWidthHeightEqual;
+ setBgSelector();
+ }
+
+ public void setCornerRadius_TL(int cornerRadius_TL) {
+ this.cornerRadius_TL = cornerRadius_TL;
+ setBgSelector();
+ }
+
+ public void setCornerRadius_TR(int cornerRadius_TR) {
+ this.cornerRadius_TR = cornerRadius_TR;
+ setBgSelector();
+ }
+
+ public void setCornerRadius_BL(int cornerRadius_BL) {
+ this.cornerRadius_BL = cornerRadius_BL;
+ setBgSelector();
+ }
+
+ public void setCornerRadius_BR(int cornerRadius_BR) {
+ this.cornerRadius_BR = cornerRadius_BR;
+ setBgSelector();
+ }
+
+ public int getBackgroundColor() {
+ return backgroundColor;
+ }
+
+ public int getBackgroundPressColor() {
+ return backgroundPressColor;
+ }
+
+ public int getCornerRadius() {
+ return cornerRadius;
+ }
+
+ public int getStrokeWidth() {
+ return strokeWidth;
+ }
+
+ public int getStrokeColor() {
+ return strokeColor;
+ }
+
+ public int getStrokePressColor() {
+ return strokePressColor;
+ }
+
+ public int getTextPressColor() {
+ return textPressColor;
+ }
+
+ public boolean isRadiusHalfHeight() {
+ return isRadiusHalfHeight;
+ }
+
+ public boolean isWidthHeightEqual() {
+ return isWidthHeightEqual;
+ }
+
+ public int getCornerRadius_TL() {
+ return cornerRadius_TL;
+ }
+
+ public int getCornerRadius_TR() {
+ return cornerRadius_TR;
+ }
+
+ public int getCornerRadius_BL() {
+ return cornerRadius_BL;
+ }
+
+ public int getCornerRadius_BR() {
+ return cornerRadius_BR;
+ }
+
+ protected int dp2px(float dp) {
+ final float scale = context.getResources().getDisplayMetrics().density;
+ return (int) (dp * scale + 0.5f);
+ }
+
+ protected int sp2px(float sp) {
+ final float scale = this.context.getResources().getDisplayMetrics().scaledDensity;
+ return (int) (sp * scale + 0.5f);
+ }
+
+ private void setDrawable(GradientDrawable gd, int color, int strokeColor) {
+ gd.setColor(color);
+
+ if (cornerRadius_TL > 0 || cornerRadius_TR > 0 || cornerRadius_BR > 0 || cornerRadius_BL > 0) {
+ /**The corners are ordered top-left, top-right, bottom-right, bottom-left*/
+ radiusArr[0] = cornerRadius_TL;
+ radiusArr[1] = cornerRadius_TL;
+ radiusArr[2] = cornerRadius_TR;
+ radiusArr[3] = cornerRadius_TR;
+ radiusArr[4] = cornerRadius_BR;
+ radiusArr[5] = cornerRadius_BR;
+ radiusArr[6] = cornerRadius_BL;
+ radiusArr[7] = cornerRadius_BL;
+ gd.setCornerRadii(radiusArr);
+ } else {
+ gd.setCornerRadius(cornerRadius);
+ }
+
+ gd.setStroke(strokeWidth, strokeColor);
+ }
+
+ public void setBgSelector() {
+ StateListDrawable bg = new StateListDrawable();
+
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP && isRippleEnable) {
+ setDrawable(gd_background, backgroundColor, strokeColor);
+ RippleDrawable rippleDrawable = new RippleDrawable(
+ getPressedColorSelector(backgroundColor, backgroundPressColor), gd_background, null);
+ view.setBackground(rippleDrawable);
+ } else {
+ setDrawable(gd_background, backgroundColor, strokeColor);
+ bg.addState(new int[]{-android.R.attr.state_pressed}, gd_background);
+ if (backgroundPressColor != Integer.MAX_VALUE || strokePressColor != Integer.MAX_VALUE) {
+ setDrawable(gd_background_press, backgroundPressColor == Integer.MAX_VALUE ? backgroundColor : backgroundPressColor,
+ strokePressColor == Integer.MAX_VALUE ? strokeColor : strokePressColor);
+ bg.addState(new int[]{android.R.attr.state_pressed}, gd_background_press);
+ }
+
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {//16
+ view.setBackground(bg);
+ } else {
+ //noinspection deprecation
+ view.setBackgroundDrawable(bg);
+ }
+ }
+
+ if (view instanceof TextView) {
+ if (textPressColor != Integer.MAX_VALUE) {
+ ColorStateList textColors = ((TextView) view).getTextColors();
+// Log.d("AAA", textColors.getColorForState(new int[]{-android.R.attr.state_pressed}, -1) + "");
+ ColorStateList colorStateList = new ColorStateList(
+ new int[][]{new int[]{-android.R.attr.state_pressed}, new int[]{android.R.attr.state_pressed}},
+ new int[]{textColors.getDefaultColor(), textPressColor});
+ ((TextView) view).setTextColor(colorStateList);
+ }
+ }
+ }
+
+ @TargetApi(Build.VERSION_CODES.HONEYCOMB)
+ private ColorStateList getPressedColorSelector(int normalColor, int pressedColor) {
+ return new ColorStateList(
+ new int[][]{
+ new int[]{android.R.attr.state_pressed},
+ new int[]{android.R.attr.state_focused},
+ new int[]{android.R.attr.state_activated},
+ new int[]{}
+ },
+ new int[]{
+ pressedColor,
+ pressedColor,
+ pressedColor,
+ normalColor
+ }
+ );
+ }
+}
diff --git a/siberiadante/src/main/java/com/siberiadante/lib/widget/SuperTextView.java b/siberiadante/src/main/java/com/siberiadante/lib/widget/SuperTextView.java
index 16692a2..7efc283 100644
--- a/siberiadante/src/main/java/com/siberiadante/lib/widget/SuperTextView.java
+++ b/siberiadante/src/main/java/com/siberiadante/lib/widget/SuperTextView.java
@@ -21,7 +21,7 @@
/**
* @Created SiberiaDante
- * @Describe: 原文地址:{@Link http://www.jianshu.com/p/1b91e11e441d}
+ * @Describe: 原文地址:@{Link http://www.jianshu.com/p/1b91e11e441d}
* @Time: 2017/7/20
* @Email: 994537867@qq.com
* @GitHub: https://github.com/SiberiaDante
diff --git a/siberiadante/src/main/java/com/siberiadante/lib/widget/TabRadioButton.java b/siberiadante/src/main/java/com/siberiadante/lib/widget/TabRadioButton.java
index 6c2f7e7..d3e53d3 100644
--- a/siberiadante/src/main/java/com/siberiadante/lib/widget/TabRadioButton.java
+++ b/siberiadante/src/main/java/com/siberiadante/lib/widget/TabRadioButton.java
@@ -40,26 +40,26 @@ public TabRadioButton(Context context, AttributeSet attrs, int defStyle) {
// TODO Auto-generated constructor stub
Drawable drawableLeft = null, drawableTop = null, drawableRight = null, drawableBottom = null;
TypedArray a = context.obtainStyledAttributes(attrs,
- R.styleable.MyRadioButton);
+ R.styleable.TabRadioButton);
int n = a.getIndexCount();
for (int i = 0; i < n; i++) {
int attr = a.getIndex(i);
Log.i("MyRadioButton", "attr:" + attr);
- if (attr == R.styleable.MyRadioButton_drawableSize) {
- mDrawableSize = a.getDimensionPixelSize(R.styleable.MyRadioButton_drawableSize, 50);
+ if (attr == R.styleable.TabRadioButton_drawableSize) {
+ mDrawableSize = a.getDimensionPixelSize(R.styleable.TabRadioButton_drawableSize, 50);
Log.i("MyRadioButton", "mDrawableSize:" + mDrawableSize);
}
- if (attr == R.styleable.MyRadioButton_drawableTop) {
+ if (attr == R.styleable.TabRadioButton_drawableTop) {
drawableTop = a.getDrawable(attr);
}
- if (attr == R.styleable.MyRadioButton_drawableBottom) {
+ if (attr == R.styleable.TabRadioButton_drawableBottom) {
drawableRight = a.getDrawable(attr);
}
- if (attr == R.styleable.MyRadioButton_drawableRight) {
+ if (attr == R.styleable.TabRadioButton_drawableRight) {
drawableBottom = a.getDrawable(attr);
}
- if (attr == R.styleable.MyRadioButton_drawableLeft) {
+ if (attr == R.styleable.TabRadioButton_drawableLeft) {
drawableLeft = a.getDrawable(attr);
}
}
diff --git a/siberiadante/src/main/res/values/attrs.xml b/siberiadante/src/main/res/values/attrs.xml
index be6670c..3b5a982 100644
--- a/siberiadante/src/main/res/values/attrs.xml
+++ b/siberiadante/src/main/res/values/attrs.xml
@@ -1,64 +1,121 @@
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
-
-
+
+
-
-
-
-
+
+
+
+
-
+
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file