diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..39fb081 --- /dev/null +++ b/.gitignore @@ -0,0 +1,9 @@ +*.iml +.gradle +/local.properties +/.idea/workspace.xml +/.idea/libraries +.DS_Store +/build +/captures +.externalNativeBuild diff --git a/.idea/dictionaries/cxzheng.xml b/.idea/dictionaries/cxzheng.xml new file mode 100644 index 0000000..3095241 --- /dev/null +++ b/.idea/dictionaries/cxzheng.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/.idea/encodings.xml b/.idea/encodings.xml new file mode 100644 index 0000000..97626ba --- /dev/null +++ b/.idea/encodings.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/gradle.xml b/.idea/gradle.xml new file mode 100644 index 0000000..66e2f6f --- /dev/null +++ b/.idea/gradle.xml @@ -0,0 +1,19 @@ + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..d6a0222 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,211 @@ + + + + + + + + + + + + + + + Abstraction issuesJava + + + Android + + + Android > Lint > Correctness + + + Android > Lint > Correctness > Messages + + + Android > Lint > Internationalization > Bidirectional Text + + + Android > Lint > Performance + + + Android > Lint > Security + + + Android > Lint > Usability + + + Assignment issuesGroovy + + + Assignment issuesJava + + + Class structureJava + + + Code style issuesJava + + + Concurrency annotation issuesJava + + + Control FlowGroovy + + + Control flow issuesJava + + + CorrectnessLintAndroid + + + Data flow issuesJava + + + Declaration redundancyJava + + + Dependency issuesJava + + + Encapsulation issuesJava + + + Error handlingGroovy + + + Error handlingJava + + + General + + + Groovy + + + Initialization issuesJava + + + Internationalization issuesJava + + + JUnit issuesJava + + + Java + + + LintAndroid + + + Logging issuesJava + + + Memory issuesJava + + + Method MetricsGroovy + + + Modularization issuesJava + + + Naming ConventionsGroovy + + + Naming conventionsJava + + + Packaging issuesJava + + + Pattern Validation + + + Performance issuesJava + + + Portability issuesJava + + + Potentially confusing code constructsGroovy + + + Probable bugsGroovy + + + Probable bugsJava + + + Resource management issuesJava + + + Security issuesJava + + + Serialization issuesJava + + + TestNGJava + + + Threading issuesGroovy + + + Threading issuesJava + + + Visibility issuesJava + + + + + Android + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..b8779f2 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/.idea/runConfigurations.xml b/.idea/runConfigurations.xml new file mode 100644 index 0000000..7f68460 --- /dev/null +++ b/.idea/runConfigurations.xml @@ -0,0 +1,12 @@ + + + + + + \ No newline at end of file diff --git a/app/.gitignore b/app/.gitignore new file mode 100644 index 0000000..796b96d --- /dev/null +++ b/app/.gitignore @@ -0,0 +1 @@ +/build diff --git a/app/build.gradle b/app/build.gradle new file mode 100644 index 0000000..fc13e42 --- /dev/null +++ b/app/build.gradle @@ -0,0 +1,29 @@ +apply plugin: 'com.android.application' + +android { + compileSdkVersion 26 + defaultConfig { + applicationId "cn.davidsu.shadowhelper" + minSdkVersion 15 + targetSdkVersion 26 + versionCode 1 + versionName "1.0" + testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" + } + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + } + } +} + +dependencies { + implementation fileTree(dir: 'libs', include: ['*.jar']) + implementation 'com.android.support:appcompat-v7:26.1.0' + implementation 'com.android.support.constraint:constraint-layout:1.1.0' + testImplementation 'junit:junit:4.12' + androidTestImplementation 'com.android.support.test:runner:1.0.2' + androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' + compile project(path: ':library') +} diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro new file mode 100644 index 0000000..f1b4245 --- /dev/null +++ b/app/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile diff --git a/app/src/androidTest/java/cn/davidsu/shadowhelper/ExampleInstrumentedTest.java b/app/src/androidTest/java/cn/davidsu/shadowhelper/ExampleInstrumentedTest.java new file mode 100644 index 0000000..73293d8 --- /dev/null +++ b/app/src/androidTest/java/cn/davidsu/shadowhelper/ExampleInstrumentedTest.java @@ -0,0 +1,26 @@ +package cn.davidsu.shadowhelper; + +import android.content.Context; +import android.support.test.InstrumentationRegistry; +import android.support.test.runner.AndroidJUnit4; + +import org.junit.Test; +import org.junit.runner.RunWith; + +import static org.junit.Assert.*; + +/** + * Instrumented test, which will execute on an Android device. + * + * @see Testing documentation + */ +@RunWith(AndroidJUnit4.class) +public class ExampleInstrumentedTest { + @Test + public void useAppContext() throws Exception { + // Context of the app under test. + Context appContext = InstrumentationRegistry.getTargetContext(); + + assertEquals("cn.davidsu.shadowhelper", appContext.getPackageName()); + } +} diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..4c868b5 --- /dev/null +++ b/app/src/main/AndroidManifest.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/cn/davidsu/shadowhelper/MainActivity.java b/app/src/main/java/cn/davidsu/shadowhelper/MainActivity.java new file mode 100644 index 0000000..9fd94a5 --- /dev/null +++ b/app/src/main/java/cn/davidsu/shadowhelper/MainActivity.java @@ -0,0 +1,121 @@ +package cn.davidsu.shadowhelper; + +import android.graphics.Color; +import android.support.v7.app.AppCompatActivity; +import android.os.Bundle; +import android.view.View; +import android.widget.Button; +import android.widget.EditText; +import android.widget.TextView; +import android.widget.Toast; + +import cn.davidsu.library.ShadowConfig; +import cn.davidsu.library.ShadowHelper; + +public class MainActivity extends AppCompatActivity { + + private EditText etColor; + private EditText etRadius; + private EditText etShadowColor; + private EditText etOffsetX; + private EditText etOffsetY; + private Button btnDone; + + private int[] mColor; + private int mRadius; + private int mShadowColor; + private int mOffsetX; + private int mOffsetY; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_main); + + mColor = new int[]{Color.parseColor("#ffa726")}; + mRadius = Util.dp2px(this, 30); + mShadowColor = Color.parseColor("#ffa726"); + mOffsetX = Util.dp2px(this, 2); + mOffsetY = Util.dp2px(this, 2); + + bindViews(); + initView(); + setShadow(); + } + + + private void bindViews() { + etColor = findViewById(R.id.et_color); + etRadius = findViewById(R.id.et_radius); + etShadowColor = findViewById(R.id.et_shadowcolor); + etOffsetX = findViewById(R.id.et_offsetX); + etOffsetY = findViewById(R.id.et_offsetY); + btnDone = findViewById(R.id.btn_done); + + btnDone.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + setShadow(); + } + }); + + } + + private void initView() { + etColor.setText("#ffa726"); + etRadius.setText("30"); + etShadowColor.setText("#ffa726"); + etOffsetX.setText("2"); + etOffsetY.setText("2"); + } + + private void setShadow() { + + initData(); + + TextView textView1 = findViewById(R.id.tv_1); + ShadowConfig.Builder config = new ShadowConfig.Builder() + .setColor(mColor[0]) + .setShadowColor(mShadowColor) + .setGradientColorArray(mColor) + .setRadius(mRadius) + .setOffsetX(mOffsetX) + .setOffsetY(mOffsetY); + ShadowHelper.setShadowBgForView(textView1, config); + } + + + private void initData() { + try { + if (!Util.emptyOrNull(etColor.getText().toString())) { + String[] colors = etColor.getText().toString().split(","); + mColor = new int[colors.length]; + for (int i = 0; i < colors.length; i++) { + mColor[i] = Color.parseColor(colors[i]); + } + } + + if (!Util.emptyOrNull(etShadowColor.getText().toString())) { + mShadowColor = Color.parseColor(etShadowColor.getText().toString()); + } + } catch (Exception e) { + Toast.makeText(this, e + "", Toast.LENGTH_SHORT).show(); + mColor = new int[]{Color.parseColor("#ffa726")}; + mShadowColor = Color.parseColor("#ffa726"); + } + + if (!Util.emptyOrNull(etRadius.getText().toString())) { + mRadius = Util.dp2px(this, Integer.valueOf(etRadius.getText().toString())); + } + + if (!Util.emptyOrNull(etOffsetX.getText().toString())) { + mOffsetX = Util.dp2px(this, Integer.valueOf(etOffsetX.getText().toString())); + } + + if (!Util.emptyOrNull(etOffsetY.getText().toString())) { + mOffsetY = Util.dp2px(this, Integer.valueOf(etOffsetY.getText().toString())); + } + + + } +} diff --git a/app/src/main/java/cn/davidsu/shadowhelper/Util.java b/app/src/main/java/cn/davidsu/shadowhelper/Util.java new file mode 100644 index 0000000..8b5ff34 --- /dev/null +++ b/app/src/main/java/cn/davidsu/shadowhelper/Util.java @@ -0,0 +1,24 @@ +package cn.davidsu.shadowhelper; + +import android.content.Context; +import android.util.TypedValue; + +/** + * Created by cxzheng on 2018/4/29. + */ + +public class Util { + + public static int dp2px(Context context, float dpValue) { + return (int) getRawSize(context, 1, dpValue); + } + + + public static float getRawSize(Context context, int unit, float size) { + return TypedValue.applyDimension(unit, size, context.getResources().getDisplayMetrics()); + } + + public static boolean emptyOrNull(String str) { + return str == null || str.length() == 0; + } +} diff --git a/app/src/main/res/drawable-v24/ic_launcher_foreground.xml b/app/src/main/res/drawable-v24/ic_launcher_foreground.xml new file mode 100644 index 0000000..c7bd21d --- /dev/null +++ b/app/src/main/res/drawable-v24/ic_launcher_foreground.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + diff --git a/app/src/main/res/drawable/ic_launcher_background.xml b/app/src/main/res/drawable/ic_launcher_background.xml new file mode 100644 index 0000000..d5fccc5 --- /dev/null +++ b/app/src/main/res/drawable/ic_launcher_background.xml @@ -0,0 +1,170 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml new file mode 100644 index 0000000..5a21554 --- /dev/null +++ b/app/src/main/res/layout/activity_main.xml @@ -0,0 +1,119 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +