diff --git a/.gitignore b/.gitignore index 682cdc4..01d9632 100644 --- a/.gitignore +++ b/.gitignore @@ -12,3 +12,4 @@ /captures .externalNativeBuild .idea/ +/17_constraintlayout/images \ No newline at end of file diff --git a/17_constraintlayout/.gitignore b/17_constraintlayout/.gitignore new file mode 100644 index 0000000..796b96d --- /dev/null +++ b/17_constraintlayout/.gitignore @@ -0,0 +1 @@ +/build diff --git a/17_constraintlayout/build.gradle b/17_constraintlayout/build.gradle new file mode 100644 index 0000000..06b0431 --- /dev/null +++ b/17_constraintlayout/build.gradle @@ -0,0 +1,37 @@ +apply plugin: 'com.android.application' +apply plugin: 'kotlin-android' + +android { + compileSdkVersion 28 + + + defaultConfig { + applicationId "com.hencoder.a19_constraintlayout" + minSdkVersion 18 + targetSdkVersion 28 + versionCode 1 + versionName "1.0" + + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" + + } + + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' + } + } + +} + +dependencies { + implementation fileTree(dir: 'libs', include: ['*.jar']) + implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" + implementation 'androidx.appcompat:appcompat:1.0.2' + implementation 'androidx.core:core-ktx:1.0.1' + implementation 'androidx.constraintlayout:constraintlayout:2.0.0-alpha5' + testImplementation 'junit:junit:4.12' + androidTestImplementation 'androidx.test.ext:junit:1.1.0' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1' +} diff --git a/17_constraintlayout/proguard-rules.pro b/17_constraintlayout/proguard-rules.pro new file mode 100644 index 0000000..f1b4245 --- /dev/null +++ b/17_constraintlayout/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/17_constraintlayout/src/androidTest/java/com/hencoder/a19_constraintlayout/ExampleInstrumentedTest.kt b/17_constraintlayout/src/androidTest/java/com/hencoder/a19_constraintlayout/ExampleInstrumentedTest.kt new file mode 100644 index 0000000..8c65672 --- /dev/null +++ b/17_constraintlayout/src/androidTest/java/com/hencoder/a19_constraintlayout/ExampleInstrumentedTest.kt @@ -0,0 +1,24 @@ +package com.hencoder.a19_constraintlayout + +import androidx.test.platform.app.InstrumentationRegistry +import androidx.test.ext.junit.runners.AndroidJUnit4 + +import org.junit.Test +import org.junit.runner.RunWith + +import org.junit.Assert.* + +/** + * Instrumented test, which will execute on an Android device. + * + * See [testing documentation](http://d.android.com/tools/testing). + */ +@RunWith(AndroidJUnit4::class) +class ExampleInstrumentedTest { + @Test + fun useAppContext() { + // Context of the app under test. + val appContext = InstrumentationRegistry.getInstrumentation().targetContext + assertEquals("com.hencoder.a19_constraintlayout", appContext.packageName) + } +} diff --git a/17_constraintlayout/src/main/AndroidManifest.xml b/17_constraintlayout/src/main/AndroidManifest.xml new file mode 100644 index 0000000..e92ef6b --- /dev/null +++ b/17_constraintlayout/src/main/AndroidManifest.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/17_constraintlayout/src/main/java/com/hencoder/a19_constraintlayout/CircularPositioning.kt b/17_constraintlayout/src/main/java/com/hencoder/a19_constraintlayout/CircularPositioning.kt new file mode 100644 index 0000000..d1e0789 --- /dev/null +++ b/17_constraintlayout/src/main/java/com/hencoder/a19_constraintlayout/CircularPositioning.kt @@ -0,0 +1,49 @@ +package com.hencoder.a19_constraintlayout + +import android.animation.ValueAnimator +import android.animation.ValueAnimator.INFINITE +import androidx.appcompat.app.AppCompatActivity +import android.os.Bundle +import android.view.View +import android.view.animation.LinearInterpolator +import androidx.constraintlayout.widget.ConstraintLayout + +class CircularPositioning : AppCompatActivity() { + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_circular_positioning) + + val earth = findViewById(R.id.earth) + val moon = findViewById(R.id.moon) + val sun = findViewById(R.id.sun) + + val earthAnimator = ValueAnimator.ofFloat(0f, 1f).apply { + duration = 10000L + repeatCount = INFINITE + interpolator = LinearInterpolator() + } + + val moonAnimator = ValueAnimator.ofFloat(0f, 1f).apply { + duration = 2000L + repeatCount = INFINITE + interpolator = LinearInterpolator() + } + + earthAnimator.addUpdateListener { + val params = earth.layoutParams as ConstraintLayout.LayoutParams + params.circleAngle = 45 + it.animatedFraction * 360 + moon.requestLayout() + } + moonAnimator.addUpdateListener { + val params = moon.layoutParams as ConstraintLayout.LayoutParams + params.circleAngle = 270 + it.animatedFraction * 360 + moon.requestLayout() + } + + sun.setOnClickListener { + earthAnimator.start() + moonAnimator.start() + } + } +} diff --git a/17_constraintlayout/src/main/java/com/hencoder/a19_constraintlayout/CircularReveal.kt b/17_constraintlayout/src/main/java/com/hencoder/a19_constraintlayout/CircularReveal.kt new file mode 100644 index 0000000..3944642 --- /dev/null +++ b/17_constraintlayout/src/main/java/com/hencoder/a19_constraintlayout/CircularReveal.kt @@ -0,0 +1,12 @@ +package com.hencoder.a19_constraintlayout + +import androidx.appcompat.app.AppCompatActivity +import android.os.Bundle + +class CircularReveal : AppCompatActivity() { + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_circular_reveal) + } +} diff --git a/17_constraintlayout/src/main/java/com/hencoder/a19_constraintlayout/CircularRevealHelper.kt b/17_constraintlayout/src/main/java/com/hencoder/a19_constraintlayout/CircularRevealHelper.kt new file mode 100644 index 0000000..5cb0eac --- /dev/null +++ b/17_constraintlayout/src/main/java/com/hencoder/a19_constraintlayout/CircularRevealHelper.kt @@ -0,0 +1,27 @@ +package com.hencoder.a19_constraintlayout + +import android.content.Context +import android.os.Build +import android.util.AttributeSet +import android.view.View +import android.view.ViewAnimationUtils +import androidx.constraintlayout.widget.ConstraintHelper +import androidx.constraintlayout.widget.ConstraintLayout + +class CircularRevealHelper(context: Context, attrs: AttributeSet) : + ConstraintHelper(context, attrs) { + + override fun updatePostLayout(container: ConstraintLayout?) { + super.updatePostLayout(container) + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) return + + for (referencedId in referencedIds) { + val view = container!!.getViewById(referencedId) + val radius = Math.hypot(view.width.toDouble(), view.height.toDouble()).toInt() + + ViewAnimationUtils.createCircularReveal(view, 0, 0, 0f, radius.toFloat()) + .setDuration(2000L) + .start() + } + } +} diff --git a/17_constraintlayout/src/main/java/com/hencoder/a19_constraintlayout/ConstraintLayoutSample.kt b/17_constraintlayout/src/main/java/com/hencoder/a19_constraintlayout/ConstraintLayoutSample.kt new file mode 100644 index 0000000..13b4ed4 --- /dev/null +++ b/17_constraintlayout/src/main/java/com/hencoder/a19_constraintlayout/ConstraintLayoutSample.kt @@ -0,0 +1,12 @@ +package com.hencoder.a19_constraintlayout + +import androidx.appcompat.app.AppCompatActivity +import android.os.Bundle + +class ConstraintLayoutSample : AppCompatActivity() { + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_constraint_layout_sample) + } +} diff --git a/17_constraintlayout/src/main/java/com/hencoder/a19_constraintlayout/ConstraintSetActivity.kt b/17_constraintlayout/src/main/java/com/hencoder/a19_constraintlayout/ConstraintSetActivity.kt new file mode 100644 index 0000000..05eec6f --- /dev/null +++ b/17_constraintlayout/src/main/java/com/hencoder/a19_constraintlayout/ConstraintSetActivity.kt @@ -0,0 +1,27 @@ +package com.hencoder.a19_constraintlayout + +import androidx.appcompat.app.AppCompatActivity +import android.os.Bundle +import android.transition.TransitionManager +import android.view.View +import androidx.constraintlayout.widget.ConstraintLayout +import androidx.constraintlayout.widget.ConstraintSet + +class ConstraintSetActivity : AppCompatActivity() { + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_constraint_start) + } + + + fun onClick(view: View) { + val constraintLayout = view as ConstraintLayout + TransitionManager.beginDelayedTransition(constraintLayout) + + val constraintSet = ConstraintSet().apply { + clone(this@ConstraintSetActivity, R.layout.activity_constraint_end) + } + constraintSet.applyTo(constraintLayout) + } +} diff --git a/17_constraintlayout/src/main/java/com/hencoder/a19_constraintlayout/DimensionRatio.kt b/17_constraintlayout/src/main/java/com/hencoder/a19_constraintlayout/DimensionRatio.kt new file mode 100644 index 0000000..2b83b8e --- /dev/null +++ b/17_constraintlayout/src/main/java/com/hencoder/a19_constraintlayout/DimensionRatio.kt @@ -0,0 +1,12 @@ +package com.hencoder.a19_constraintlayout + +import androidx.appcompat.app.AppCompatActivity +import android.os.Bundle + +class DimensionRatio : AppCompatActivity() { + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_dimension_ratio) + } +} diff --git a/17_constraintlayout/src/main/java/com/hencoder/a19_constraintlayout/FlowActivity.kt b/17_constraintlayout/src/main/java/com/hencoder/a19_constraintlayout/FlowActivity.kt new file mode 100644 index 0000000..53e7fd4 --- /dev/null +++ b/17_constraintlayout/src/main/java/com/hencoder/a19_constraintlayout/FlowActivity.kt @@ -0,0 +1,16 @@ +package com.hencoder.a19_constraintlayout + +import androidx.appcompat.app.AppCompatActivity +import android.os.Bundle +import android.view.View +import androidx.constraintlayout.helper.widget.Flow +import androidx.constraintlayout.helper.widget.Flow.VERTICAL +import androidx.constraintlayout.helper.widget.Flow.WRAP_NONE + +class FlowActivity : AppCompatActivity() { + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_flow) + } +} diff --git a/17_constraintlayout/src/main/java/com/hencoder/a19_constraintlayout/GuideLineActivity.kt b/17_constraintlayout/src/main/java/com/hencoder/a19_constraintlayout/GuideLineActivity.kt new file mode 100644 index 0000000..12b0452 --- /dev/null +++ b/17_constraintlayout/src/main/java/com/hencoder/a19_constraintlayout/GuideLineActivity.kt @@ -0,0 +1,12 @@ +package com.hencoder.a19_constraintlayout + +import androidx.appcompat.app.AppCompatActivity +import android.os.Bundle + +class GuideLineActivity : AppCompatActivity() { + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_guide_line) + } +} diff --git a/17_constraintlayout/src/main/java/com/hencoder/a19_constraintlayout/Linear.kt b/17_constraintlayout/src/main/java/com/hencoder/a19_constraintlayout/Linear.kt new file mode 100644 index 0000000..8d418fe --- /dev/null +++ b/17_constraintlayout/src/main/java/com/hencoder/a19_constraintlayout/Linear.kt @@ -0,0 +1,35 @@ +package com.hencoder.a19_constraintlayout + +import android.content.Context +import android.util.AttributeSet + +import androidx.constraintlayout.widget.ConstraintLayout +import androidx.constraintlayout.widget.ConstraintSet +import androidx.constraintlayout.widget.VirtualLayout + + +class Linear(context: Context, attrs: AttributeSet) : VirtualLayout(context, attrs) { + + private val constraintSet: ConstraintSet by lazy { + ConstraintSet().apply { + isForceId = false + } + } + + override fun updatePreLayout(container: ConstraintLayout) { + super.updatePreLayout(container) + constraintSet.clone(container) + + val viewIds = referencedIds + for (i in 1 until mCount) { + + val current = viewIds[i] + val before = viewIds[i - 1] + + constraintSet.connect(current, ConstraintSet.START, before, ConstraintSet.START) + constraintSet.connect(current, ConstraintSet.TOP, before, ConstraintSet.BOTTOM) + + constraintSet.applyTo(container) + } + } +} diff --git a/17_constraintlayout/src/main/java/com/hencoder/a19_constraintlayout/LinearActivity.kt b/17_constraintlayout/src/main/java/com/hencoder/a19_constraintlayout/LinearActivity.kt new file mode 100644 index 0000000..edd86e7 --- /dev/null +++ b/17_constraintlayout/src/main/java/com/hencoder/a19_constraintlayout/LinearActivity.kt @@ -0,0 +1,12 @@ +package com.hencoder.a19_constraintlayout + +import androidx.appcompat.app.AppCompatActivity +import android.os.Bundle + +class LinearActivity : AppCompatActivity() { + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_linear) + } +} diff --git a/17_constraintlayout/src/main/java/com/hencoder/a19_constraintlayout/MainActivity.kt b/17_constraintlayout/src/main/java/com/hencoder/a19_constraintlayout/MainActivity.kt new file mode 100644 index 0000000..5fd0c56 --- /dev/null +++ b/17_constraintlayout/src/main/java/com/hencoder/a19_constraintlayout/MainActivity.kt @@ -0,0 +1,49 @@ +package com.hencoder.a19_constraintlayout + +import android.content.Intent +import androidx.appcompat.app.AppCompatActivity +import android.os.Bundle +import android.transition.TransitionManager +import android.view.View +import android.view.ViewGroup +import android.widget.Button +import androidx.constraintlayout.widget.ConstraintLayout +import androidx.constraintlayout.widget.ConstraintSet +import android.content.pm.ActivityInfo +import android.content.pm.PackageManager +import android.content.pm.PackageInfo +import android.widget.LinearLayout +import androidx.core.content.ContextCompat.startActivity + + +class MainActivity : AppCompatActivity() { + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_main) + + val linearLayout = findViewById(R.id.root) + + packageManager.getPackageInfo( + packageName, PackageManager.GET_ACTIVITIES).activities.forEach { activity -> + if (activity.name == this::class.java.name) { + return@forEach + } + + if (activity.name == ConstraintLayoutSample::class.java.name) { + return@forEach + } + + val clazz = Class.forName(activity.name) + + val button = Button(this).apply { + isAllCaps = false + text = clazz.simpleName + setOnClickListener { + startActivity(Intent(this@MainActivity, clazz)) + } + } + linearLayout.addView(button) + } + } +} diff --git a/17_constraintlayout/src/main/java/com/hencoder/a19_constraintlayout/PlaceHolder.kt b/17_constraintlayout/src/main/java/com/hencoder/a19_constraintlayout/PlaceHolder.kt new file mode 100644 index 0000000..2c68ac5 --- /dev/null +++ b/17_constraintlayout/src/main/java/com/hencoder/a19_constraintlayout/PlaceHolder.kt @@ -0,0 +1,23 @@ +package com.hencoder.a19_constraintlayout + +import androidx.appcompat.app.AppCompatActivity +import android.os.Bundle +import android.transition.TransitionManager +import android.view.View +import android.view.ViewGroup +import androidx.constraintlayout.widget.Placeholder + +class PlaceHolder : AppCompatActivity() { + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_place_holder) + } + + fun onClick(view: View) { + + TransitionManager.beginDelayedTransition(view.parent as ViewGroup) + + findViewById(R.id.placeholder).setContentId(view.id) + } +} diff --git a/17_constraintlayout/src/main/res/drawable-v24/ic_launcher_foreground.xml b/17_constraintlayout/src/main/res/drawable-v24/ic_launcher_foreground.xml new file mode 100644 index 0000000..ec20a5e --- /dev/null +++ b/17_constraintlayout/src/main/res/drawable-v24/ic_launcher_foreground.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + diff --git a/17_constraintlayout/src/main/res/drawable/earth.png b/17_constraintlayout/src/main/res/drawable/earth.png new file mode 100644 index 0000000..200a5f5 Binary files /dev/null and b/17_constraintlayout/src/main/res/drawable/earth.png differ diff --git a/17_constraintlayout/src/main/res/drawable/ic_favorite_black_24dp.xml b/17_constraintlayout/src/main/res/drawable/ic_favorite_black_24dp.xml new file mode 100755 index 0000000..7ba6d70 --- /dev/null +++ b/17_constraintlayout/src/main/res/drawable/ic_favorite_black_24dp.xml @@ -0,0 +1,9 @@ + + + diff --git a/17_constraintlayout/src/main/res/drawable/ic_launcher_background.xml b/17_constraintlayout/src/main/res/drawable/ic_launcher_background.xml new file mode 100644 index 0000000..0d025f9 --- /dev/null +++ b/17_constraintlayout/src/main/res/drawable/ic_launcher_background.xml @@ -0,0 +1,170 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/17_constraintlayout/src/main/res/drawable/ic_mail_black_24dp.xml b/17_constraintlayout/src/main/res/drawable/ic_mail_black_24dp.xml new file mode 100755 index 0000000..3ac8d83 --- /dev/null +++ b/17_constraintlayout/src/main/res/drawable/ic_mail_black_24dp.xml @@ -0,0 +1,4 @@ + + + diff --git a/17_constraintlayout/src/main/res/drawable/ic_play_circle_filled_black_24dp.xml b/17_constraintlayout/src/main/res/drawable/ic_play_circle_filled_black_24dp.xml new file mode 100755 index 0000000..82c0de4 --- /dev/null +++ b/17_constraintlayout/src/main/res/drawable/ic_play_circle_filled_black_24dp.xml @@ -0,0 +1,9 @@ + + + diff --git a/17_constraintlayout/src/main/res/drawable/ic_save_black_24dp.xml b/17_constraintlayout/src/main/res/drawable/ic_save_black_24dp.xml new file mode 100755 index 0000000..931e1a9 --- /dev/null +++ b/17_constraintlayout/src/main/res/drawable/ic_save_black_24dp.xml @@ -0,0 +1,9 @@ + + + diff --git a/17_constraintlayout/src/main/res/drawable/moon.png b/17_constraintlayout/src/main/res/drawable/moon.png new file mode 100644 index 0000000..b465372 Binary files /dev/null and b/17_constraintlayout/src/main/res/drawable/moon.png differ diff --git a/17_constraintlayout/src/main/res/drawable/qq.png b/17_constraintlayout/src/main/res/drawable/qq.png new file mode 100644 index 0000000..26a087c Binary files /dev/null and b/17_constraintlayout/src/main/res/drawable/qq.png differ diff --git a/17_constraintlayout/src/main/res/drawable/qzone.png b/17_constraintlayout/src/main/res/drawable/qzone.png new file mode 100644 index 0000000..75dca94 Binary files /dev/null and b/17_constraintlayout/src/main/res/drawable/qzone.png differ diff --git a/17_constraintlayout/src/main/res/drawable/sun.png b/17_constraintlayout/src/main/res/drawable/sun.png new file mode 100644 index 0000000..1c4425b Binary files /dev/null and b/17_constraintlayout/src/main/res/drawable/sun.png differ diff --git a/17_constraintlayout/src/main/res/drawable/twitter.png b/17_constraintlayout/src/main/res/drawable/twitter.png new file mode 100644 index 0000000..47c5956 Binary files /dev/null and b/17_constraintlayout/src/main/res/drawable/twitter.png differ diff --git a/17_constraintlayout/src/main/res/drawable/wechat.png b/17_constraintlayout/src/main/res/drawable/wechat.png new file mode 100644 index 0000000..7385b85 Binary files /dev/null and b/17_constraintlayout/src/main/res/drawable/wechat.png differ diff --git a/17_constraintlayout/src/main/res/drawable/wechat_friend.png b/17_constraintlayout/src/main/res/drawable/wechat_friend.png new file mode 100644 index 0000000..84f14a9 Binary files /dev/null and b/17_constraintlayout/src/main/res/drawable/wechat_friend.png differ diff --git a/17_constraintlayout/src/main/res/drawable/weibo.png b/17_constraintlayout/src/main/res/drawable/weibo.png new file mode 100644 index 0000000..996e8cb Binary files /dev/null and b/17_constraintlayout/src/main/res/drawable/weibo.png differ diff --git a/17_constraintlayout/src/main/res/layout/activity_circular_positioning.xml b/17_constraintlayout/src/main/res/layout/activity_circular_positioning.xml new file mode 100644 index 0000000..a140e7b --- /dev/null +++ b/17_constraintlayout/src/main/res/layout/activity_circular_positioning.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/17_constraintlayout/src/main/res/layout/activity_circular_reveal.xml b/17_constraintlayout/src/main/res/layout/activity_circular_reveal.xml new file mode 100644 index 0000000..9a78a50 --- /dev/null +++ b/17_constraintlayout/src/main/res/layout/activity_circular_reveal.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/17_constraintlayout/src/main/res/layout/activity_constraint_end.xml b/17_constraintlayout/src/main/res/layout/activity_constraint_end.xml new file mode 100644 index 0000000..a001e84 --- /dev/null +++ b/17_constraintlayout/src/main/res/layout/activity_constraint_end.xml @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/17_constraintlayout/src/main/res/layout/activity_constraint_layout_sample.xml b/17_constraintlayout/src/main/res/layout/activity_constraint_layout_sample.xml new file mode 100644 index 0000000..d791d7a --- /dev/null +++ b/17_constraintlayout/src/main/res/layout/activity_constraint_layout_sample.xml @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/17_constraintlayout/src/main/res/layout/activity_constraint_start.xml b/17_constraintlayout/src/main/res/layout/activity_constraint_start.xml new file mode 100644 index 0000000..c3f7b64 --- /dev/null +++ b/17_constraintlayout/src/main/res/layout/activity_constraint_start.xml @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/17_constraintlayout/src/main/res/layout/activity_dimension_ratio.xml b/17_constraintlayout/src/main/res/layout/activity_dimension_ratio.xml new file mode 100644 index 0000000..da2f70f --- /dev/null +++ b/17_constraintlayout/src/main/res/layout/activity_dimension_ratio.xml @@ -0,0 +1,22 @@ + + + + + + + + \ No newline at end of file diff --git a/17_constraintlayout/src/main/res/layout/activity_flow.xml b/17_constraintlayout/src/main/res/layout/activity_flow.xml new file mode 100644 index 0000000..e8ae52e --- /dev/null +++ b/17_constraintlayout/src/main/res/layout/activity_flow.xml @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/17_constraintlayout/src/main/res/layout/activity_guide_line.xml b/17_constraintlayout/src/main/res/layout/activity_guide_line.xml new file mode 100644 index 0000000..36f3886 --- /dev/null +++ b/17_constraintlayout/src/main/res/layout/activity_guide_line.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/17_constraintlayout/src/main/res/layout/activity_linear.xml b/17_constraintlayout/src/main/res/layout/activity_linear.xml new file mode 100644 index 0000000..ba969c5 --- /dev/null +++ b/17_constraintlayout/src/main/res/layout/activity_linear.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/17_constraintlayout/src/main/res/layout/activity_main.xml b/17_constraintlayout/src/main/res/layout/activity_main.xml new file mode 100644 index 0000000..195d2c2 --- /dev/null +++ b/17_constraintlayout/src/main/res/layout/activity_main.xml @@ -0,0 +1,11 @@ + + + + \ No newline at end of file diff --git a/17_constraintlayout/src/main/res/layout/activity_place_holder.xml b/17_constraintlayout/src/main/res/layout/activity_place_holder.xml new file mode 100644 index 0000000..0abe8dd --- /dev/null +++ b/17_constraintlayout/src/main/res/layout/activity_place_holder.xml @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/17_constraintlayout/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/17_constraintlayout/src/main/res/mipmap-anydpi-v26/ic_launcher.xml new file mode 100644 index 0000000..eca70cf --- /dev/null +++ b/17_constraintlayout/src/main/res/mipmap-anydpi-v26/ic_launcher.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/17_constraintlayout/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/17_constraintlayout/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml new file mode 100644 index 0000000..eca70cf --- /dev/null +++ b/17_constraintlayout/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/17_constraintlayout/src/main/res/mipmap-hdpi/ic_launcher.png b/17_constraintlayout/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000..898f3ed Binary files /dev/null and b/17_constraintlayout/src/main/res/mipmap-hdpi/ic_launcher.png differ diff --git a/17_constraintlayout/src/main/res/mipmap-hdpi/ic_launcher_round.png b/17_constraintlayout/src/main/res/mipmap-hdpi/ic_launcher_round.png new file mode 100644 index 0000000..dffca36 Binary files /dev/null and b/17_constraintlayout/src/main/res/mipmap-hdpi/ic_launcher_round.png differ diff --git a/17_constraintlayout/src/main/res/mipmap-mdpi/ic_launcher.png b/17_constraintlayout/src/main/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000..64ba76f Binary files /dev/null and b/17_constraintlayout/src/main/res/mipmap-mdpi/ic_launcher.png differ diff --git a/17_constraintlayout/src/main/res/mipmap-mdpi/ic_launcher_round.png b/17_constraintlayout/src/main/res/mipmap-mdpi/ic_launcher_round.png new file mode 100644 index 0000000..dae5e08 Binary files /dev/null and b/17_constraintlayout/src/main/res/mipmap-mdpi/ic_launcher_round.png differ diff --git a/17_constraintlayout/src/main/res/mipmap-xhdpi/ic_launcher.png b/17_constraintlayout/src/main/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 0000000..e5ed465 Binary files /dev/null and b/17_constraintlayout/src/main/res/mipmap-xhdpi/ic_launcher.png differ diff --git a/17_constraintlayout/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/17_constraintlayout/src/main/res/mipmap-xhdpi/ic_launcher_round.png new file mode 100644 index 0000000..14ed0af Binary files /dev/null and b/17_constraintlayout/src/main/res/mipmap-xhdpi/ic_launcher_round.png differ diff --git a/17_constraintlayout/src/main/res/mipmap-xxhdpi/ic_launcher.png b/17_constraintlayout/src/main/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000..b0907ca Binary files /dev/null and b/17_constraintlayout/src/main/res/mipmap-xxhdpi/ic_launcher.png differ diff --git a/17_constraintlayout/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/17_constraintlayout/src/main/res/mipmap-xxhdpi/ic_launcher_round.png new file mode 100644 index 0000000..d8ae031 Binary files /dev/null and b/17_constraintlayout/src/main/res/mipmap-xxhdpi/ic_launcher_round.png differ diff --git a/17_constraintlayout/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/17_constraintlayout/src/main/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 0000000..2c18de9 Binary files /dev/null and b/17_constraintlayout/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ diff --git a/17_constraintlayout/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/17_constraintlayout/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png new file mode 100644 index 0000000..beed3cd Binary files /dev/null and b/17_constraintlayout/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png differ diff --git a/17_constraintlayout/src/main/res/values/attrs.xml b/17_constraintlayout/src/main/res/values/attrs.xml new file mode 100644 index 0000000..514af56 --- /dev/null +++ b/17_constraintlayout/src/main/res/values/attrs.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/17_constraintlayout/src/main/res/values/colors.xml b/17_constraintlayout/src/main/res/values/colors.xml new file mode 100644 index 0000000..69b2233 --- /dev/null +++ b/17_constraintlayout/src/main/res/values/colors.xml @@ -0,0 +1,6 @@ + + + #008577 + #00574B + #D81B60 + diff --git a/17_constraintlayout/src/main/res/values/strings.xml b/17_constraintlayout/src/main/res/values/strings.xml new file mode 100644 index 0000000..3b8529f --- /dev/null +++ b/17_constraintlayout/src/main/res/values/strings.xml @@ -0,0 +1,3 @@ + + 19_constraintlayout + diff --git a/17_constraintlayout/src/main/res/values/styles.xml b/17_constraintlayout/src/main/res/values/styles.xml new file mode 100644 index 0000000..5885930 --- /dev/null +++ b/17_constraintlayout/src/main/res/values/styles.xml @@ -0,0 +1,11 @@ + + + + + + diff --git a/17_constraintlayout/src/test/java/com/hencoder/a19_constraintlayout/ExampleUnitTest.kt b/17_constraintlayout/src/test/java/com/hencoder/a19_constraintlayout/ExampleUnitTest.kt new file mode 100644 index 0000000..9254831 --- /dev/null +++ b/17_constraintlayout/src/test/java/com/hencoder/a19_constraintlayout/ExampleUnitTest.kt @@ -0,0 +1,17 @@ +package com.hencoder.a19_constraintlayout + +import org.junit.Test + +import org.junit.Assert.* + +/** + * Example local unit test, which will execute on the development machine (host). + * + * See [testing documentation](http://d.android.com/tools/testing). + */ +class ExampleUnitTest { + @Test + fun addition_isCorrect() { + assertEquals(4, 2 + 2) + } +} diff --git a/settings.gradle b/settings.gradle index 0b9f00d..725a620 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1 +1,11 @@ -include ':07_kotlin_lesson', ':07_kotlin_app', ':07_kotlin_base', ':09_drawing', ':10_text_and_transformation', ':11_animation', ':12_bitmap_drawable', ':13_layout', ':14_touch', ':15_scalableimageview' +include ':07_kotlin_lesson', + ':07_kotlin_app', + ':07_kotlin_base', + ':09_drawing', + ':10_text_and_transformation', + ':11_animation', + ':12_bitmap_drawable', + ':13_layout', + ':14_touch', + ':15_scalableimageview', + ':17_constraintlayout'