├── app ├── .gitignore ├── src │ ├── main │ │ ├── res │ │ │ ├── values │ │ │ │ ├── strings.xml │ │ │ │ ├── dimens.xml │ │ │ │ ├── styles.xml │ │ │ │ └── colors.xml │ │ │ ├── mipmap-hdpi │ │ │ │ └── ic_launcher.png │ │ │ ├── mipmap-mdpi │ │ │ │ └── ic_launcher.png │ │ │ ├── mipmap-xhdpi │ │ │ │ └── ic_launcher.png │ │ │ ├── mipmap-xxhdpi │ │ │ │ └── ic_launcher.png │ │ │ ├── mipmap-xxxhdpi │ │ │ │ └── ic_launcher.png │ │ │ ├── animator │ │ │ │ ├── value.xml │ │ │ │ ├── alpha.xml │ │ │ │ ├── scale.xml │ │ │ │ ├── rotate.xml │ │ │ │ ├── translate.xml │ │ │ │ └── zuhe.xml │ │ │ ├── anim │ │ │ │ ├── rotate.xml │ │ │ │ ├── alpha.xml │ │ │ │ ├── traslate.xml │ │ │ │ ├── scale.xml │ │ │ │ └── all.xml │ │ │ ├── values-w820dp │ │ │ │ └── dimens.xml │ │ │ └── layout │ │ │ │ ├── activity_xml.xml │ │ │ │ ├── activity_xmlanimator.xml │ │ │ │ ├── activity_main.xml │ │ │ │ ├── activity_code.xml │ │ │ │ └── activity_object_anim.xml │ │ ├── AndroidManifest.xml │ │ └── java │ │ │ └── com │ │ │ └── husy │ │ │ └── androidallanimation │ │ │ ├── MainActivity.java │ │ │ ├── XmlViewActivity.java │ │ │ ├── XMLAnimatorActivity.java │ │ │ ├── CodeObjectAnimActivity.java │ │ │ └── CodeViewAnimation.java │ ├── test │ │ └── java │ │ │ └── com │ │ │ └── husy │ │ │ └── androidallanimation │ │ │ └── ExampleUnitTest.java │ └── androidTest │ │ └── java │ │ └── com │ │ └── husy │ │ └── androidallanimation │ │ └── ApplicationTest.java ├── proguard-rules.pro ├── build.gradle └── app.iml ├── .idea ├── .name ├── copyright │ └── profiles_settings.xml ├── dictionaries │ └── 15361.xml ├── encodings.xml ├── vcs.xml ├── modules.xml ├── runConfigurations.xml ├── gradle.xml ├── compiler.xml └── misc.xml ├── settings.gradle ├── result.gif ├── .gitignore ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradle.properties ├── AndroidAllAnimation.iml ├── README.md ├── gradlew.bat └── gradlew /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /.idea/.name: -------------------------------------------------------------------------------- 1 | AndroidAllAnimation -------------------------------------------------------------------------------- /settings.gradle: -------------------------------------------------------------------------------- 1 | include ':app' 2 | -------------------------------------------------------------------------------- /result.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/longyinzaitian/AndroidAllAnimation/HEAD/result.gif -------------------------------------------------------------------------------- /.idea/copyright/profiles_settings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /.idea/dictionaries/15361.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .gradle 2 | /local.properties 3 | /.idea/workspace.xml 4 | /.idea/libraries 5 | .DS_Store 6 | /build 7 | /captures 8 | -------------------------------------------------------------------------------- /app/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | AndroidAllAnimation 3 | 4 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/longyinzaitian/AndroidAllAnimation/HEAD/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/longyinzaitian/AndroidAllAnimation/HEAD/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/longyinzaitian/AndroidAllAnimation/HEAD/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/longyinzaitian/AndroidAllAnimation/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/longyinzaitian/AndroidAllAnimation/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/longyinzaitian/AndroidAllAnimation/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /.idea/encodings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/values/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 16dp 4 | 16dp 5 | 6 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Tue Oct 20 10:15:40 CST 2015 2 | distributionBase=GRADLE_USER_HOME 3 | distributionPath=wrapper/dists 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | distributionUrl=https\://services.gradle.org/distributions/gradle-2.4-all.zip 7 | -------------------------------------------------------------------------------- /app/src/main/res/animator/value.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/animator/alpha.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/animator/scale.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/anim/rotate.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/anim/alpha.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/values-w820dp/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 64dp 6 | 7 | -------------------------------------------------------------------------------- /.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/anim/traslate.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/animator/rotate.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/test/java/com/husy/androidallanimation/ExampleUnitTest.java: -------------------------------------------------------------------------------- 1 | package com.husy.androidallanimation; 2 | 3 | import org.junit.Test; 4 | 5 | import static org.junit.Assert.*; 6 | 7 | /** 8 | * To work on unit tests, switch the Test Artifact in the Build Variants view. 9 | */ 10 | public class ExampleUnitTest { 11 | @Test 12 | public void addition_isCorrect() throws Exception { 13 | assertEquals(4, 2 + 2); 14 | } 15 | } -------------------------------------------------------------------------------- /app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/androidTest/java/com/husy/androidallanimation/ApplicationTest.java: -------------------------------------------------------------------------------- 1 | package com.husy.androidallanimation; 2 | 3 | import android.app.Application; 4 | import android.test.ApplicationTestCase; 5 | 6 | /** 7 | * Testing Fundamentals 8 | */ 9 | public class ApplicationTest extends ApplicationTestCase { 10 | public ApplicationTest() { 11 | super(Application.class); 12 | } 13 | } -------------------------------------------------------------------------------- /app/src/main/res/anim/scale.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 14 | -------------------------------------------------------------------------------- /.idea/runConfigurations.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_xml.xml: -------------------------------------------------------------------------------- 1 | 2 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_xmlanimator.xml: -------------------------------------------------------------------------------- 1 | 2 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /.idea/gradle.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 17 | 18 | -------------------------------------------------------------------------------- /app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # By default, the flags in this file are appended to flags specified 3 | # in D:\AndroidStudioSDK/tools/proguard/proguard-android.txt 4 | # You can edit the include path and order by changing the proguardFiles 5 | # directive in build.gradle. 6 | # 7 | # For more details, see 8 | # http://developer.android.com/guide/developing/tools/proguard.html 9 | 10 | # Add any project specific keep options here: 11 | 12 | # If your project uses WebView with JS, uncomment the following 13 | # and specify the fully qualified class name to the JavaScript interface 14 | # class: 15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 16 | # public *; 17 | #} 18 | -------------------------------------------------------------------------------- /.idea/compiler.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /app/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'com.android.application' 2 | 3 | android { 4 | compileSdkVersion 23 5 | buildToolsVersion "23.0.1" 6 | 7 | defaultConfig { 8 | applicationId "com.husy.androidallanimation" 9 | minSdkVersion 11 10 | targetSdkVersion 23 11 | versionCode 1 12 | versionName "1.0" 13 | } 14 | buildTypes { 15 | release { 16 | minifyEnabled false 17 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 18 | } 19 | } 20 | } 21 | 22 | dependencies { 23 | compile fileTree(dir: 'libs', include: ['*.jar']) 24 | testCompile 'junit:junit:4.12' 25 | compile 'com.android.support:appcompat-v7:23.1.0' 26 | compile 'com.jakewharton:butterknife:7.0.1' 27 | } 28 | -------------------------------------------------------------------------------- /app/src/main/res/animator/translate.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 12 | 13 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /gradle.properties: -------------------------------------------------------------------------------- 1 | # Project-wide Gradle settings. 2 | 3 | # IDE (e.g. Android Studio) users: 4 | # Gradle settings configured through the IDE *will override* 5 | # any settings specified in this file. 6 | 7 | # For more details on how to configure your build environment visit 8 | # http://www.gradle.org/docs/current/userguide/build_environment.html 9 | 10 | # Specifies the JVM arguments used for the daemon process. 11 | # The setting is particularly useful for tweaking memory settings. 12 | # Default value: -Xmx10248m -XX:MaxPermSize=256m 13 | # org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 14 | 15 | # When configured, Gradle will run in incubating parallel mode. 16 | # This option should only be used with decoupled projects. More details, visit 17 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects 18 | # org.gradle.parallel=true -------------------------------------------------------------------------------- /app/src/main/res/animator/zuhe.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 10 | 11 | 12 | 19 | 20 | 21 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /AndroidAllAnimation.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /app/src/main/res/anim/all.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 10 | 21 | 29 | -------------------------------------------------------------------------------- /app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # AndroidAllAnimation 2 | 安卓视图动画和属性动画集锦 3 | 4 | ![image](https://github.com/longyinzaitian/AndroidAllAnimation/blob/master/result.gif) 5 | 6 | 效果图中展示的是视图动画和属性动画 7 | 8 | 两种动画都分为代码控制和XML控制视图动画的效果。 9 | 10 | 代码控制视图动画 11 | XML控制视图动画 12 | 代码控制属性动画 13 | XML控制属性动画 14 | 总共这四部分。 15 | 16 | 每一部分都有旋转、缩放、平移、透明度、组合等几个部分。 17 | 非常适合初学者对于视图动画和属性动画的用法的掌握。 18 | 19 | 欢迎访问我的[博客](http://blog.csdn.net/u010156024/article/details/49281789)! 20 | 有什么问题,欢迎留言评论!【握手~】 21 | 欢迎关注[我的github](https://github.com/longyinzaitian)! 22 | Follow me! 23 | 24 | 另外,关于android动画部分,我的另一个 25 | [帧动画和布局动画](https://github.com/longyinzaitian/FrameAndLayoutAnimation)的小项目也给出了较为详细的用法。欢迎访问。 26 | 27 | License 28 | 29 | Copyright 2015 Héctor de Isidro - hrules6872 30 | 31 | Licensed under the Apache License, Version 2.0 (the "License"); 32 | you may not use this file except in compliance with the License. 33 | You may obtain a copy of the License at 34 | 35 | http://www.apache.org/licenses/LICENSE-2.0 36 | 37 | Unless required by applicable law or agreed to in writing, software 38 | distributed under the License is distributed on an "AS IS" BASIS, 39 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 40 | See the License for the specific language governing permissions and 41 | limitations under the License. 42 | -------------------------------------------------------------------------------- /app/src/main/java/com/husy/androidallanimation/MainActivity.java: -------------------------------------------------------------------------------- 1 | package com.husy.androidallanimation; 2 | 3 | import android.content.Intent; 4 | import android.os.Bundle; 5 | import android.support.v7.app.AppCompatActivity; 6 | import android.view.View; 7 | import android.widget.TextView; 8 | 9 | import butterknife.Bind; 10 | import butterknife.ButterKnife; 11 | import butterknife.OnClick; 12 | 13 | public class MainActivity extends AppCompatActivity { 14 | 15 | @Bind(R.id.code_animation) 16 | TextView codeAnimation; 17 | @Bind(R.id.xml_animation) 18 | TextView xmlAnimation; 19 | @Bind(R.id.object_animator) 20 | TextView objectAnimator; 21 | @Bind(R.id.xml_object_animator) 22 | TextView XMLObjectAnimator; 23 | 24 | @Override 25 | protected void onCreate(Bundle savedInstanceState) { 26 | super.onCreate(savedInstanceState); 27 | setContentView(R.layout.activity_main); 28 | ButterKnife.bind(this); 29 | } 30 | 31 | @OnClick({R.id.code_animation, R.id.xml_animation, 32 | R.id.object_animator,R.id.xml_object_animator}) 33 | public void onclick(View v) { 34 | switch (v.getId()) { 35 | case R.id.code_animation: 36 | startActivity(new Intent(MainActivity.this 37 | , CodeViewAnimation.class)); 38 | break; 39 | case R.id.xml_animation: 40 | startActivity(new Intent(MainActivity.this, 41 | XmlViewActivity.class)); 42 | break; 43 | case R.id.object_animator: 44 | startActivity(new Intent(MainActivity.this, 45 | CodeObjectAnimActivity.class)); 46 | break; 47 | case R.id.xml_object_animator: 48 | startActivity(new Intent(MainActivity.this, 49 | XMLAnimatorActivity.class)); 50 | break; 51 | } 52 | } 53 | 54 | @Override 55 | protected void onDestroy() { 56 | super.onDestroy(); 57 | ButterKnife.unbind(this); 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_main.xml: -------------------------------------------------------------------------------- 1 | 2 | 14 | 24 | 34 | 44 | 54 | 55 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_code.xml: -------------------------------------------------------------------------------- 1 | 2 | 14 | 15 | 23 | 32 | 41 | 50 | 59 | 60 | -------------------------------------------------------------------------------- /gradlew.bat: -------------------------------------------------------------------------------- 1 | @if "%DEBUG%" == "" @echo off 2 | @rem ########################################################################## 3 | @rem 4 | @rem Gradle startup script for Windows 5 | @rem 6 | @rem ########################################################################## 7 | 8 | @rem Set local scope for the variables with windows NT shell 9 | if "%OS%"=="Windows_NT" setlocal 10 | 11 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. 12 | set DEFAULT_JVM_OPTS= 13 | 14 | set DIRNAME=%~dp0 15 | if "%DIRNAME%" == "" set DIRNAME=. 16 | set APP_BASE_NAME=%~n0 17 | set APP_HOME=%DIRNAME% 18 | 19 | @rem Find java.exe 20 | if defined JAVA_HOME goto findJavaFromJavaHome 21 | 22 | set JAVA_EXE=java.exe 23 | %JAVA_EXE% -version >NUL 2>&1 24 | if "%ERRORLEVEL%" == "0" goto init 25 | 26 | echo. 27 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 28 | echo. 29 | echo Please set the JAVA_HOME variable in your environment to match the 30 | echo location of your Java installation. 31 | 32 | goto fail 33 | 34 | :findJavaFromJavaHome 35 | set JAVA_HOME=%JAVA_HOME:"=% 36 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe 37 | 38 | if exist "%JAVA_EXE%" goto init 39 | 40 | echo. 41 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 42 | echo. 43 | echo Please set the JAVA_HOME variable in your environment to match the 44 | echo location of your Java installation. 45 | 46 | goto fail 47 | 48 | :init 49 | @rem Get command-line arguments, handling Windowz variants 50 | 51 | if not "%OS%" == "Windows_NT" goto win9xME_args 52 | if "%@eval[2+2]" == "4" goto 4NT_args 53 | 54 | :win9xME_args 55 | @rem Slurp the command line arguments. 56 | set CMD_LINE_ARGS= 57 | set _SKIP=2 58 | 59 | :win9xME_args_slurp 60 | if "x%~1" == "x" goto execute 61 | 62 | set CMD_LINE_ARGS=%* 63 | goto execute 64 | 65 | :4NT_args 66 | @rem Get arguments from the 4NT Shell from JP Software 67 | set CMD_LINE_ARGS=%$ 68 | 69 | :execute 70 | @rem Setup the command line 71 | 72 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar 73 | 74 | @rem Execute Gradle 75 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% 76 | 77 | :end 78 | @rem End local scope for the variables with windows NT shell 79 | if "%ERRORLEVEL%"=="0" goto mainEnd 80 | 81 | :fail 82 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of 83 | rem the _cmd.exe /c_ return code! 84 | if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 85 | exit /b 1 86 | 87 | :mainEnd 88 | if "%OS%"=="Windows_NT" endlocal 89 | 90 | :omega 91 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_object_anim.xml: -------------------------------------------------------------------------------- 1 | 2 | 14 | 22 | 31 | 40 | 49 | 58 | 67 | 68 | -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 19 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 51 | 52 | 53 | 54 | 55 | 56 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 72 | 73 | 74 | 75 | 76 | 77 | -------------------------------------------------------------------------------- /app/src/main/java/com/husy/androidallanimation/XmlViewActivity.java: -------------------------------------------------------------------------------- 1 | package com.husy.androidallanimation; 2 | 3 | import android.os.Bundle; 4 | import android.support.v7.app.AppCompatActivity; 5 | import android.view.View; 6 | import android.view.animation.Animation; 7 | import android.view.animation.AnimationUtils; 8 | import android.widget.TextView; 9 | import android.widget.Toast; 10 | 11 | import butterknife.Bind; 12 | import butterknife.ButterKnife; 13 | import butterknife.OnClick; 14 | 15 | public class XmlViewActivity extends AppCompatActivity { 16 | 17 | @Bind(R.id.alpha) 18 | TextView alpha; 19 | @Bind(R.id.scale) 20 | TextView scale; 21 | @Bind(R.id.traslate) 22 | TextView traslate; 23 | @Bind(R.id.rotate) 24 | TextView rotate; 25 | @Bind(R.id.all_ani) 26 | TextView allAni; 27 | 28 | @Override 29 | protected void onCreate(Bundle savedInstanceState) { 30 | super.onCreate(savedInstanceState); 31 | setContentView(R.layout.activity_code); 32 | ButterKnife.bind(this); 33 | } 34 | 35 | @OnClick({R.id.alpha, R.id.scale, R.id.traslate, R.id.rotate, R.id.all_ani}) 36 | public void onclick(View v) { 37 | switch (v.getId()) { 38 | case R.id.alpha: 39 | Animation alpha_animation = AnimationUtils 40 | .loadAnimation(XmlViewActivity.this, R.anim.alpha); 41 | alpha.startAnimation(alpha_animation); 42 | break; 43 | case R.id.scale: 44 | Animation scale_animation = AnimationUtils 45 | .loadAnimation(XmlViewActivity.this, R.anim.scale); 46 | scale.startAnimation(scale_animation); 47 | break; 48 | case R.id.traslate: 49 | Animation traslate_animation = AnimationUtils 50 | .loadAnimation(XmlViewActivity.this, R.anim.traslate); 51 | traslate.startAnimation(traslate_animation); 52 | break; 53 | case R.id.rotate: 54 | Animation rotate_animation = AnimationUtils 55 | .loadAnimation(XmlViewActivity.this, R.anim.rotate); 56 | rotate.startAnimation(rotate_animation); 57 | break; 58 | case R.id.all_ani: 59 | Animation all_animation = AnimationUtils 60 | .loadAnimation(XmlViewActivity.this,R.anim.all); 61 | allAni.startAnimation(all_animation); 62 | all_animation.setAnimationListener(new Animation.AnimationListener() { 63 | @Override 64 | public void onAnimationStart(Animation animation) { 65 | Toast.makeText(XmlViewActivity.this, "开始啦。", Toast.LENGTH_SHORT).show(); 66 | } 67 | 68 | @Override 69 | public void onAnimationEnd(Animation animation) { 70 | Toast.makeText(XmlViewActivity.this,"结束啦。。。。。。",Toast.LENGTH_SHORT).show(); 71 | } 72 | 73 | @Override 74 | public void onAnimationRepeat(Animation animation) { 75 | 76 | } 77 | }); 78 | break; 79 | } 80 | } 81 | 82 | @Override 83 | protected void onDestroy() { 84 | super.onDestroy(); 85 | ButterKnife.unbind(this); 86 | } 87 | } 88 | -------------------------------------------------------------------------------- /app/src/main/java/com/husy/androidallanimation/XMLAnimatorActivity.java: -------------------------------------------------------------------------------- 1 | package com.husy.androidallanimation; 2 | 3 | import android.animation.Animator; 4 | import android.animation.AnimatorInflater; 5 | import android.animation.ValueAnimator; 6 | import android.os.Bundle; 7 | import android.support.v7.app.AppCompatActivity; 8 | import android.view.View; 9 | import android.widget.TextView; 10 | 11 | import butterknife.Bind; 12 | import butterknife.ButterKnife; 13 | import butterknife.OnClick; 14 | 15 | public class XMLAnimatorActivity extends AppCompatActivity { 16 | 17 | @Bind(R.id.traslate) 18 | TextView traslate; 19 | @Bind(R.id.rotate) 20 | TextView rotate; 21 | @Bind(R.id.alpha) 22 | TextView alpha; 23 | @Bind(R.id.scale) 24 | TextView scale; 25 | @Bind(R.id.zuhe1) 26 | TextView zuhe; 27 | @Bind(R.id.zuhe2) 28 | TextView value; 29 | 30 | @Override 31 | protected void onCreate(Bundle savedInstanceState) { 32 | super.onCreate(savedInstanceState); 33 | setContentView(R.layout.activity_object_anim); 34 | ButterKnife.bind(this); 35 | } 36 | @OnClick({R.id.traslate,R.id.rotate,R.id.alpha, 37 | R.id.scale,R.id.zuhe2,R.id.zuhe1}) 38 | public void onclick(View v){ 39 | switch (v.getId()){ 40 | case R.id.traslate: 41 | Animator tra = AnimatorInflater 42 | .loadAnimator(XMLAnimatorActivity.this, 43 | R.animator.translate); 44 | tra.setTarget(traslate); 45 | tra.start(); 46 | break; 47 | case R.id.rotate: 48 | Animator rota = AnimatorInflater 49 | .loadAnimator(XMLAnimatorActivity.this, 50 | R.animator.rotate); 51 | rota.setTarget(rotate); 52 | rota.start(); 53 | break; 54 | case R.id.alpha: 55 | Animator alph = AnimatorInflater 56 | .loadAnimator(XMLAnimatorActivity.this, 57 | R.animator.alpha); 58 | alph.setTarget(alpha); 59 | alph.start(); 60 | break; 61 | case R.id.scale: 62 | Animator sca = AnimatorInflater 63 | .loadAnimator(XMLAnimatorActivity.this, 64 | R.animator.scale); 65 | sca.setTarget(scale); 66 | sca.start(); 67 | break; 68 | case R.id.zuhe1: 69 | Animator zuhea = AnimatorInflater 70 | .loadAnimator(XMLAnimatorActivity.this, 71 | R.animator.zuhe); 72 | zuhea.setTarget(zuhe); 73 | zuhea.start(); 74 | break; 75 | case R.id.zuhe2: 76 | ValueAnimator valuea = (ValueAnimator)AnimatorInflater 77 | .loadAnimator(XMLAnimatorActivity.this, 78 | R.animator.value); 79 | valuea.setTarget(value); 80 | valuea.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { 81 | @Override 82 | public void onAnimationUpdate(ValueAnimator animation) { 83 | value.setText(""+animation.getAnimatedValue()); 84 | } 85 | }); 86 | valuea.start(); 87 | break; 88 | } 89 | } 90 | @Override 91 | protected void onDestroy() { 92 | super.onDestroy(); 93 | ButterKnife.unbind(this); 94 | } 95 | } 96 | -------------------------------------------------------------------------------- /app/src/main/java/com/husy/androidallanimation/CodeObjectAnimActivity.java: -------------------------------------------------------------------------------- 1 | package com.husy.androidallanimation; 2 | 3 | import android.animation.Animator; 4 | import android.animation.ObjectAnimator; 5 | import android.animation.PropertyValuesHolder; 6 | import android.animation.ValueAnimator; 7 | import android.os.Bundle; 8 | import android.support.v7.app.AppCompatActivity; 9 | import android.view.View; 10 | import android.widget.TextView; 11 | import android.widget.Toast; 12 | 13 | import butterknife.Bind; 14 | import butterknife.ButterKnife; 15 | import butterknife.OnClick; 16 | 17 | public class CodeObjectAnimActivity extends AppCompatActivity { 18 | 19 | @Bind(R.id.traslate) 20 | TextView traslate; 21 | @Bind(R.id.rotate) 22 | TextView rotate; 23 | @Bind(R.id.alpha) 24 | TextView alpha; 25 | @Bind(R.id.zuhe1) 26 | TextView zuhe1; 27 | @Bind(R.id.zuhe2) 28 | TextView value; 29 | @Bind(R.id.scale) 30 | TextView scale; 31 | 32 | @Override 33 | protected void onCreate(Bundle savedInstanceState) { 34 | super.onCreate(savedInstanceState); 35 | setContentView(R.layout.activity_object_anim); 36 | ButterKnife.bind(this); 37 | 38 | } 39 | 40 | @OnClick({R.id.traslate, R.id.alpha, R.id.rotate,R.id.scale, R.id.zuhe1, R.id.zuhe2}) 41 | public void onclick(View v) { 42 | switch (v.getId()) { 43 | case R.id.traslate: 44 | ObjectAnimator translateA = 45 | ObjectAnimator.ofFloat(traslate, "translationX", 300, -200); 46 | translateA.setDuration(2000); 47 | translateA.setRepeatCount(1); 48 | translateA.addListener(new Animator.AnimatorListener() { 49 | @Override 50 | public void onAnimationStart(Animator animation) { 51 | Toast.makeText(CodeObjectAnimActivity.this, "开始啦", Toast.LENGTH_SHORT).show(); 52 | } 53 | 54 | @Override 55 | public void onAnimationEnd(Animator animation) { 56 | Toast.makeText(CodeObjectAnimActivity.this, "结束啦", Toast.LENGTH_SHORT).show(); 57 | } 58 | 59 | @Override 60 | public void onAnimationCancel(Animator animation) { 61 | 62 | } 63 | 64 | @Override 65 | public void onAnimationRepeat(Animator animation) { 66 | 67 | } 68 | }); 69 | translateA.start(); 70 | break; 71 | case R.id.alpha: 72 | ObjectAnimator alphaA = 73 | ObjectAnimator.ofFloat(alpha, "alpha", 0.2f, 1); 74 | alphaA.setDuration(3000); 75 | alphaA.start(); 76 | break; 77 | case R.id.rotate: 78 | ObjectAnimator rotateA = 79 | ObjectAnimator.ofFloat(rotate, "rotation", 20, 180); 80 | rotateA.setDuration(3000); 81 | rotateA.start(); 82 | break; 83 | case R.id.scale: 84 | ObjectAnimator scaleA = 85 | ObjectAnimator.ofFloat(scale,"scaleX",0.2f,1); 86 | scaleA.start(); 87 | break; 88 | case R.id.zuhe1: 89 | PropertyValuesHolder tx = 90 | PropertyValuesHolder.ofFloat("translationX", 300, -200); 91 | PropertyValuesHolder ty = 92 | PropertyValuesHolder.ofFloat("translationY", 50, -10); 93 | PropertyValuesHolder sx = 94 | PropertyValuesHolder.ofFloat("scaleX", 0.1f, 1); 95 | ObjectAnimator.ofPropertyValuesHolder(zuhe1, tx, ty, sx) 96 | .setDuration(3000).start(); 97 | 98 | break; 99 | case R.id.zuhe2: 100 | final ValueAnimator valueAnimator = ValueAnimator 101 | .ofInt(20, 100); 102 | valueAnimator.setDuration(5000); 103 | valueAnimator.setTarget(value); 104 | valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { 105 | @Override 106 | public void onAnimationUpdate(ValueAnimator animation) { 107 | value.setText(""+(int)animation.getAnimatedValue()); 108 | } 109 | }); 110 | valueAnimator.start(); 111 | break; 112 | } 113 | } 114 | 115 | @Override 116 | protected void onDestroy() { 117 | super.onDestroy(); 118 | ButterKnife.unbind(this); 119 | } 120 | } 121 | -------------------------------------------------------------------------------- /gradlew: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | ############################################################################## 4 | ## 5 | ## Gradle start up script for UN*X 6 | ## 7 | ############################################################################## 8 | 9 | # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. 10 | DEFAULT_JVM_OPTS="" 11 | 12 | APP_NAME="Gradle" 13 | APP_BASE_NAME=`basename "$0"` 14 | 15 | # Use the maximum available, or set MAX_FD != -1 to use that value. 16 | MAX_FD="maximum" 17 | 18 | warn ( ) { 19 | echo "$*" 20 | } 21 | 22 | die ( ) { 23 | echo 24 | echo "$*" 25 | echo 26 | exit 1 27 | } 28 | 29 | # OS specific support (must be 'true' or 'false'). 30 | cygwin=false 31 | msys=false 32 | darwin=false 33 | case "`uname`" in 34 | CYGWIN* ) 35 | cygwin=true 36 | ;; 37 | Darwin* ) 38 | darwin=true 39 | ;; 40 | MINGW* ) 41 | msys=true 42 | ;; 43 | esac 44 | 45 | # For Cygwin, ensure paths are in UNIX format before anything is touched. 46 | if $cygwin ; then 47 | [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"` 48 | fi 49 | 50 | # Attempt to set APP_HOME 51 | # Resolve links: $0 may be a link 52 | PRG="$0" 53 | # Need this for relative symlinks. 54 | while [ -h "$PRG" ] ; do 55 | ls=`ls -ld "$PRG"` 56 | link=`expr "$ls" : '.*-> \(.*\)$'` 57 | if expr "$link" : '/.*' > /dev/null; then 58 | PRG="$link" 59 | else 60 | PRG=`dirname "$PRG"`"/$link" 61 | fi 62 | done 63 | SAVED="`pwd`" 64 | cd "`dirname \"$PRG\"`/" >&- 65 | APP_HOME="`pwd -P`" 66 | cd "$SAVED" >&- 67 | 68 | CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar 69 | 70 | # Determine the Java command to use to start the JVM. 71 | if [ -n "$JAVA_HOME" ] ; then 72 | if [ -x "$JAVA_HOME/jre/sh/java" ] ; then 73 | # IBM's JDK on AIX uses strange locations for the executables 74 | JAVACMD="$JAVA_HOME/jre/sh/java" 75 | else 76 | JAVACMD="$JAVA_HOME/bin/java" 77 | fi 78 | if [ ! -x "$JAVACMD" ] ; then 79 | die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME 80 | 81 | Please set the JAVA_HOME variable in your environment to match the 82 | location of your Java installation." 83 | fi 84 | else 85 | JAVACMD="java" 86 | which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 87 | 88 | Please set the JAVA_HOME variable in your environment to match the 89 | location of your Java installation." 90 | fi 91 | 92 | # Increase the maximum file descriptors if we can. 93 | if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then 94 | MAX_FD_LIMIT=`ulimit -H -n` 95 | if [ $? -eq 0 ] ; then 96 | if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then 97 | MAX_FD="$MAX_FD_LIMIT" 98 | fi 99 | ulimit -n $MAX_FD 100 | if [ $? -ne 0 ] ; then 101 | warn "Could not set maximum file descriptor limit: $MAX_FD" 102 | fi 103 | else 104 | warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" 105 | fi 106 | fi 107 | 108 | # For Darwin, add options to specify how the application appears in the dock 109 | if $darwin; then 110 | GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" 111 | fi 112 | 113 | # For Cygwin, switch paths to Windows format before running java 114 | if $cygwin ; then 115 | APP_HOME=`cygpath --path --mixed "$APP_HOME"` 116 | CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` 117 | 118 | # We build the pattern for arguments to be converted via cygpath 119 | ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` 120 | SEP="" 121 | for dir in $ROOTDIRSRAW ; do 122 | ROOTDIRS="$ROOTDIRS$SEP$dir" 123 | SEP="|" 124 | done 125 | OURCYGPATTERN="(^($ROOTDIRS))" 126 | # Add a user-defined pattern to the cygpath arguments 127 | if [ "$GRADLE_CYGPATTERN" != "" ] ; then 128 | OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" 129 | fi 130 | # Now convert the arguments - kludge to limit ourselves to /bin/sh 131 | i=0 132 | for arg in "$@" ; do 133 | CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` 134 | CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option 135 | 136 | if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition 137 | eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` 138 | else 139 | eval `echo args$i`="\"$arg\"" 140 | fi 141 | i=$((i+1)) 142 | done 143 | case $i in 144 | (0) set -- ;; 145 | (1) set -- "$args0" ;; 146 | (2) set -- "$args0" "$args1" ;; 147 | (3) set -- "$args0" "$args1" "$args2" ;; 148 | (4) set -- "$args0" "$args1" "$args2" "$args3" ;; 149 | (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; 150 | (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; 151 | (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; 152 | (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; 153 | (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; 154 | esac 155 | fi 156 | 157 | # Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules 158 | function splitJvmOpts() { 159 | JVM_OPTS=("$@") 160 | } 161 | eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS 162 | JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" 163 | 164 | exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" 165 | -------------------------------------------------------------------------------- /app/src/main/java/com/husy/androidallanimation/CodeViewAnimation.java: -------------------------------------------------------------------------------- 1 | package com.husy.androidallanimation; 2 | 3 | import android.os.Bundle; 4 | import android.support.v7.app.AppCompatActivity; 5 | import android.util.Log; 6 | import android.view.View; 7 | import android.view.animation.AccelerateDecelerateInterpolator; 8 | import android.view.animation.AccelerateInterpolator; 9 | import android.view.animation.AlphaAnimation; 10 | import android.view.animation.Animation; 11 | import android.view.animation.AnimationSet; 12 | import android.view.animation.RotateAnimation; 13 | import android.view.animation.ScaleAnimation; 14 | import android.view.animation.TranslateAnimation; 15 | import android.widget.TextView; 16 | import android.widget.Toast; 17 | 18 | import butterknife.Bind; 19 | import butterknife.ButterKnife; 20 | import butterknife.OnClick; 21 | 22 | public class CodeViewAnimation extends AppCompatActivity implements View.OnClickListener { 23 | 24 | @Bind(R.id.alpha) 25 | TextView alpha; 26 | @Bind(R.id.scale) 27 | TextView scale; 28 | @Bind(R.id.traslate) 29 | TextView traslate; 30 | @Bind(R.id.rotate) 31 | TextView rotate; 32 | @Bind(R.id.all_ani) 33 | TextView allAni; 34 | 35 | @Override 36 | protected void onCreate(Bundle savedInstanceState) { 37 | super.onCreate(savedInstanceState); 38 | setContentView(R.layout.activity_code); 39 | ButterKnife.bind(this); 40 | 41 | } 42 | 43 | @OnClick({R.id.alpha, R.id.scale, R.id.traslate, R.id.rotate,R.id.all_ani}) 44 | public void onClick(View v) { 45 | Log.i("dd", "onclick"); 46 | switch (v.getId()) { 47 | case R.id.alpha: 48 | AlphaAnimation alphaAnimation = new AlphaAnimation(0.2f, 1); 49 | alphaAnimation.setDuration(3000); 50 | //加减速差值器 51 | alphaAnimation.setInterpolator(new AccelerateDecelerateInterpolator()); 52 | alpha.startAnimation(alphaAnimation); 53 | break; 54 | case R.id.rotate: 55 | //不指定中心,则默认组件原点为中心 56 | // RotateAnimation rotateAnimation = new RotateAnimation(0,360); 57 | //指定中心。 58 | // RotateAnimation rotateAnimation = new RotateAnimation(0,360,rotate.getWidth()/2,rotate.getHeight()/2); 59 | //指定旋转中心的类型 60 | RotateAnimation rotateAnimation = new RotateAnimation(0, 360, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); 61 | rotateAnimation.setDuration(2000); 62 | //加速差值器 63 | rotateAnimation.setInterpolator(new AccelerateInterpolator()); 64 | rotate.startAnimation(rotateAnimation); 65 | break; 66 | case R.id.traslate: 67 | TranslateAnimation translateAnimation = new TranslateAnimation(30, 90, 30, 90); 68 | translateAnimation.setDuration(2000); 69 | traslate.startAnimation(translateAnimation); 70 | break; 71 | case R.id.scale: 72 | //默认组件原点为中心 73 | // ScaleAnimation scaleAnimation = new ScaleAnimation(0.2f,1,0.2f,1); 74 | 75 | //指定为组件的中心 76 | ScaleAnimation scaleAnimation = new ScaleAnimation(0.2f, 1, 0.2f, 1, scale.getWidth() / 2, scale.getHeight() / 2); 77 | scaleAnimation.setDuration(2000); 78 | scaleAnimation.setAnimationListener(new Animation.AnimationListener() { 79 | @Override 80 | public void onAnimationStart(Animation animation) { 81 | Toast.makeText(CodeViewAnimation.this,"开始啦。",Toast.LENGTH_SHORT).show(); 82 | } 83 | 84 | @Override 85 | public void onAnimationEnd(Animation animation) { 86 | Toast.makeText(CodeViewAnimation.this,"结束啦。",Toast.LENGTH_SHORT).show(); 87 | } 88 | 89 | @Override 90 | public void onAnimationRepeat(Animation animation) { 91 | 92 | } 93 | }); 94 | scale.startAnimation(scaleAnimation); 95 | break; 96 | case R.id.all_ani: 97 | Log.i("dd", "allani"); 98 | AlphaAnimation alphaAnimation1 = new AlphaAnimation(0.3f,1f); 99 | alphaAnimation1.setDuration(2000); 100 | ScaleAnimation scaleAnimation1 = new ScaleAnimation(0,1,0,1,allAni.getWidth()/2,allAni.getHeight()/2); 101 | scaleAnimation1.setDuration(2000); 102 | RotateAnimation rotateAnimation1 = new RotateAnimation(0,360,allAni.getWidth()/2,allAni.getHeight()/2); 103 | rotateAnimation1.setDuration(2000); 104 | AnimationSet set = new AnimationSet(true); 105 | set.addAnimation(alphaAnimation1); 106 | set.addAnimation(scaleAnimation1); 107 | set.addAnimation(rotateAnimation1); 108 | set.setFillEnabled(true); 109 | set.setDuration(2000); 110 | set.setRepeatCount(0); 111 | allAni.startAnimation(set); 112 | set.setAnimationListener(new Animation.AnimationListener() { 113 | @Override 114 | public void onAnimationStart(Animation animation) { 115 | Toast.makeText(CodeViewAnimation.this,"开始啦。",Toast.LENGTH_SHORT).show(); 116 | } 117 | 118 | @Override 119 | public void onAnimationEnd(Animation animation) { 120 | Toast.makeText(CodeViewAnimation.this,"结束啦。.。。",Toast.LENGTH_SHORT).show(); 121 | } 122 | 123 | @Override 124 | public void onAnimationRepeat(Animation animation) { 125 | 126 | } 127 | }); 128 | break; 129 | } 130 | } 131 | 132 | @Override 133 | protected void onDestroy() { 134 | super.onDestroy(); 135 | ButterKnife.unbind(this); 136 | } 137 | } 138 | -------------------------------------------------------------------------------- /app/app.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 8 | 9 | 10 | 11 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | -------------------------------------------------------------------------------- /app/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #3F51B5 4 | #303F9F 5 | #FF4081 6 | #ffffffff 7 | 8 | 9 | 10 | 11 | #fffff6 12 | 13 | 14 | 15 | 16 | #ffffe0 17 | 18 | 19 | 20 | 21 | #ffff00 22 | 23 | 24 | 25 | 26 | #fffafa 27 | 28 | 29 | 30 | 31 | #fffaf0 32 | 33 | 34 | 35 | 36 | #fffacd 37 | 38 | 39 | 40 | 41 | #fff8dc 42 | 43 | 44 | 45 | 46 | #fff5ee 47 | 48 | 49 | 50 | 51 | #fff0f5 52 | 53 | 54 | 55 | 56 | #ffefd5 57 | 58 | 59 | 60 | 61 | #ffebcd 62 | 63 | 64 | 65 | 66 | #ffe4e1 67 | 68 | 69 | 70 | 71 | #ffe4c4 72 | 73 | 74 | 75 | 76 | #ffe4b5 77 | 78 | 79 | 80 | 81 | #ffdead 82 | 83 | 84 | 85 | 86 | #ffdab9 87 | 88 | 89 | 90 | 91 | #ffd700 92 | 93 | 94 | 95 | 96 | #ffc0cb 97 | 98 | 99 | 100 | 101 | #ffb6c1 102 | 103 | 104 | 105 | 106 | #ffa500 107 | 108 | 109 | 110 | 111 | #ffa07a 112 | 113 | 114 | 115 | 116 | #ff8c00 117 | 118 | 119 | 120 | 121 | #ff7f50 122 | 123 | 124 | 125 | 126 | #ff69b4 127 | 128 | 129 | 130 | 131 | #ff6347 132 | 133 | 134 | 135 | 136 | #ff4500 137 | 138 | 139 | 140 | 141 | #ff1493 142 | 143 | 144 | 145 | 146 | #ff00ff 147 | 148 | 149 | 150 | 151 | #ff00ff 152 | 153 | 154 | 155 | 156 | #ff0000 157 | 158 | 159 | 160 | 161 | #fdf5e6 162 | 163 | 164 | 165 | 166 | #fafad2 167 | 168 | 169 | 170 | 171 | #faf0e6 172 | 173 | 174 | 175 | 176 | #faebd7 177 | 178 | 179 | 180 | 181 | #fa8072 182 | 183 | 184 | 185 | 186 | #f8f8ff 187 | 188 | 189 | 190 | 191 | #f5fffa 192 | 193 | 194 | 195 | 196 | #f5f5f5 197 | 198 | 199 | 200 | 201 | #f5f5dc 202 | 203 | 204 | 205 | 206 | #f5deb3 207 | 208 | 209 | 210 | 211 | #f4a460 212 | 213 | 214 | 215 | 216 | #f0ffff 217 | 218 | 219 | 220 | 221 | #f0fff0 222 | 223 | 224 | 225 | 226 | #f0f8ff 227 | 228 | 229 | 230 | 231 | #f0e68c 232 | 233 | 234 | 235 | 236 | #f08080 237 | 238 | 239 | 240 | 241 | #eee8aa 242 | 243 | 244 | 245 | 246 | #ee82ee 247 | 248 | 249 | 250 | 251 | #e9967a 252 | 253 | 254 | 255 | 256 | #e6e6fa 257 | 258 | 259 | 260 | 261 | #e0ffff 262 | 263 | 264 | 265 | 266 | #deb887 267 | 268 | 269 | 270 | 271 | #dda0dd 272 | 273 | 274 | 275 | 276 | #dcdcdc 277 | 278 | 279 | 280 | 281 | #dc143c 282 | 283 | 284 | 285 | 286 | #db7093 287 | 288 | 289 | 290 | 291 | #daa520 292 | 293 | 294 | 295 | 296 | #da70d6 297 | 298 | 299 | 300 | 301 | #d8bfd8 302 | 303 | 304 | 305 | 306 | #d3d3d3 307 | 308 | 309 | 310 | 311 | #d3d3d3 312 | 313 | 314 | 315 | 316 | #d2b48c 317 | 318 | 319 | 320 | 321 | #d2691e 322 | 323 | 324 | 325 | 326 | #cd853f 327 | 328 | 329 | 330 | 331 | #cd5c5c 332 | 333 | 334 | 335 | 336 | #c71585 337 | 338 | 339 | 340 | 341 | #c0c0c0 342 | 343 | 344 | 345 | 346 | #bdb76b 347 | 348 | 349 | 350 | 351 | #bc8f8f 352 | 353 | 354 | 355 | 356 | #ba55d3 357 | 358 | 359 | 360 | 361 | #b8860b 362 | 363 | 364 | 365 | 366 | #b22222 367 | 368 | 369 | 370 | 371 | #b0e0e6 372 | 373 | 374 | 375 | 376 | #b0c4de 377 | 378 | 379 | 380 | 381 | #afeeee 382 | 383 | 384 | 385 | 386 | #adff2f 387 | 388 | 389 | 390 | 391 | #add8e6 392 | 393 | 394 | 395 | 396 | #a9a9a9 397 | 398 | 399 | 400 | 401 | #a9a9a9 402 | 403 | 404 | 405 | 406 | #a52a2a 407 | 408 | 409 | 410 | 411 | #a0522d 412 | 413 | 414 | 415 | 416 | #9932cc 417 | 418 | 419 | 420 | 421 | #98fb98 422 | 423 | 424 | 425 | 426 | #9400d3 427 | 428 | 429 | 430 | 431 | #9370db 432 | 433 | 434 | 435 | 436 | #90ee90 437 | 438 | 439 | 440 | 441 | #8fbc8f 442 | 443 | 444 | 445 | 446 | #8b4513 447 | 448 | 449 | 450 | 451 | #8b008b 452 | 453 | 454 | 455 | 456 | #8b0000 457 | 458 | 459 | 460 | 461 | #8a2be2 462 | 463 | 464 | 465 | 466 | #87cefa 467 | 468 | 469 | 470 | 471 | #87ceeb 472 | 473 | 474 | 475 | 476 | #EBEBEB 477 | 478 | 479 | 480 | 481 | #ff808080 482 | 483 | 484 | 485 | 486 | #808000 487 | 488 | 489 | 490 | 491 | #800080 492 | 493 | 494 | 495 | 496 | #800000 497 | 498 | 499 | 500 | 501 | #7fffd4 502 | 503 | 504 | 505 | 506 | #7fff00 507 | 508 | 509 | 510 | 511 | #7cfc00 512 | 513 | 514 | 515 | 516 | #7b68ee 517 | 518 | 519 | 520 | 521 | #778899 522 | 523 | 524 | 525 | 526 | #778899 527 | 528 | 529 | 530 | 531 | #708090 532 | 533 | 534 | 535 | 536 | #708090 537 | 538 | 539 | 540 | 541 | #6b8e23 542 | 543 | 544 | 545 | 546 | #6a5acd 547 | 548 | 549 | 550 | 551 | #696969 552 | 553 | 554 | 555 | 556 | #696969 557 | 558 | 559 | 560 | 561 | #66cdaa 562 | 563 | 564 | 565 | 566 | #6495ed 567 | 568 | 569 | 570 | 571 | #5f9ea0 572 | 573 | 574 | 575 | 576 | #556b2f 577 | 578 | 579 | 580 | 581 | #4b0082 582 | 583 | 584 | 585 | 586 | #48d1cc 587 | 588 | 589 | 590 | 591 | #483d8b 592 | 593 | 594 | 595 | 596 | #4682b4 597 | 598 | 599 | 600 | 601 | #4169e1 602 | 603 | 604 | 605 | 606 | #40e0d0 607 | 608 | 609 | 610 | 611 | #3cb371 612 | 613 | 614 | 615 | 616 | #32cd32 617 | 618 | 619 | 620 | 621 | #CCCCCC 622 | 623 | 624 | 625 | 626 | #2f4f4f 627 | 628 | 629 | 630 | 631 | #2e8b57 632 | 633 | 634 | 635 | 636 | #228b22 637 | 638 | 639 | 640 | 641 | #20b2aa 642 | 643 | 644 | 645 | 646 | #1e90ff 647 | 648 | 649 | 650 | 651 | #191970 652 | 653 | 654 | 655 | 656 | #00ffff 657 | 658 | 659 | 660 | 661 | #00ffff 662 | 663 | 664 | 665 | 666 | #00ff7f 667 | 668 | 669 | 670 | 671 | #00ff00 672 | 673 | 674 | 675 | 676 | #00fa9a 677 | 678 | 679 | 680 | 681 | #00ced1 682 | 683 | 684 | 685 | 686 | #00bfff 687 | 688 | 689 | 690 | 691 | #008b8b 692 | 693 | 694 | 695 | 696 | #008080 697 | 698 | 699 | 700 | 701 | #008000 702 | 703 | 704 | 705 | 706 | #006400 707 | 708 | 709 | 710 | 711 | #0000ff 712 | 713 | 714 | 715 | 716 | #0000cd 717 | 718 | 719 | 720 | 721 | #00008b 722 | 723 | 724 | 725 | 726 | #000080 727 | 728 | 729 | 730 | 731 | #000000 732 | 733 | 734 | 735 | 736 | #ff3e3e3e 737 | 738 | #00b8ee 739 | 740 | 741 | 742 | 743 | #ff495a 744 | 745 | 746 | 747 | 748 | #f56252 749 | 750 | 751 | 752 | 753 | #fa7868 754 | 755 | 756 | 757 | 758 | #8862b6 759 | 760 | 761 | 762 | 763 | #9d79c1 764 | 765 | 766 | 767 | 768 | #d18a26 769 | 770 | 771 | 772 | 773 | #f8aa3a 774 | 775 | 776 | 777 | 778 | #5eb59d 779 | 780 | 781 | 782 | 783 | #85d0bc 784 | 785 | 786 | 787 | 788 | #dddddd 789 | 790 | 791 | 792 | 793 | #b5b4b4 794 | 795 | 796 | 797 | 798 | #ff00ddff 799 | 800 | #ff99cc00 801 | 802 | #ffffbb33 803 | 804 | #ffff4444 805 | 806 | 807 | 808 | 809 | #4ebcd3 810 | 811 | #00acff 812 | 813 | #46678d 814 | 815 | #d33f3f 816 | 817 | #DA5A4D 818 | 819 | #ffffff 820 | 821 | #00acff 822 | 823 | #2d2f31 824 | 825 | #161718 826 | 827 | #2ea7e0 828 | 829 | #fcfcfc 830 | 831 | #B6DA53 832 | 833 | #d4d4d4 834 | 835 | #FF09D7E5 836 | 837 | #F6EBE6 838 | 839 | #2D2F31 840 | 841 | #ffffff 842 | 843 | #f7f8f8 844 | 845 | #b5b5b6 846 | 847 | #68C270 848 | 849 | #6FCD78 850 | 851 | #c0c0c0 852 | 853 | #b5b5b6 854 | 855 | #666667 856 | 857 | #1e90ff 858 | 859 | #0066FF 860 | 861 | 862 | 863 | 864 | #b5b5b6 865 | 866 | #666667 867 | 868 | #1Affffff 869 | 870 | #80000000 871 | 872 | #bababa 873 | 874 | #FF000000 875 | 876 | #4ebcd3 877 | 878 | #2dafa3 879 | 880 | #ff1FBAF3 881 | 882 | --------------------------------------------------------------------------------