├── .gitignore
├── .gitignore.bak
├── .idea
├── codeStyles
│ └── Project.xml
├── gradle.xml
├── misc.xml
├── modules.xml
├── runConfigurations.xml
└── vcs.xml
├── LICENSE
├── README.md
├── app
├── .gitignore
├── build.gradle
├── proguard-rules.pro
└── src
│ ├── androidTest
│ └── java
│ │ └── hewking
│ │ └── github
│ │ └── customviewdemo
│ │ └── ApplicationTest.java
│ ├── main
│ ├── AndroidManifest.xml
│ ├── java
│ │ └── com
│ │ │ └── hewking
│ │ │ ├── MainActivity.java
│ │ │ ├── ViewEx.kt
│ │ │ └── widget
│ │ │ ├── CircleImageView.kt
│ │ │ ├── TanTanRippleView.kt
│ │ │ └── TideRippleView.kt
│ └── res
│ │ ├── layout
│ │ ├── activity_dbtest.xml
│ │ ├── activity_main.xml
│ │ ├── activity_retrofit.xml
│ │ ├── content_main.xml
│ │ └── retrofit.xml
│ │ ├── menu
│ │ └── menu_main.xml
│ │ ├── mipmap-hdpi
│ │ ├── ic_launcher.png
│ │ └── nice_girl.jpg
│ │ ├── mipmap-mdpi
│ │ └── ic_launcher.png
│ │ ├── mipmap-xhdpi
│ │ └── ic_launcher.png
│ │ ├── mipmap-xxhdpi
│ │ ├── ic_launcher.png
│ │ └── user.png
│ │ ├── mipmap-xxxhdpi
│ │ └── ic_launcher.png
│ │ ├── values-1280x672
│ │ └── dimens.xml
│ │ ├── values-1280x720
│ │ └── dimens.xml
│ │ ├── values-1920x1080
│ │ └── dimens.xml
│ │ ├── values-nodpi
│ │ └── dimens.xml
│ │ ├── values-v21
│ │ └── styles.xml
│ │ ├── values-w820dp
│ │ └── dimens.xml
│ │ └── values
│ │ ├── attrs.xml
│ │ ├── colors.xml
│ │ ├── dimens.xml
│ │ ├── strings.xml
│ │ └── styles.xml
│ └── test
│ └── java
│ └── hewking
│ └── github
│ └── customviewdemo
│ └── ExampleUnitTest.java
├── art
└── 20190407_090017.gif
├── build.gradle
├── gradle.properties
├── gradle
└── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
└── settings.gradle
/.gitignore:
--------------------------------------------------------------------------------
1 | *.iml
2 | .gradle
3 | /local.properties
4 | /.idea/workspace.xml
5 | /.idea/libraries
6 | .DS_Store
7 | /build
8 | /captures
9 |
10 |
11 |
12 | # Built application files
13 | *.apk
14 | *.ap_
15 |
16 | # Files for the ART/Dalvik VM
17 | *.dex
18 |
19 | # Java class files
20 | *.class
21 |
22 | # Generated files
23 | bin/
24 | gen/
25 | out/
26 |
27 | # Gradle files
28 | .gradle/
29 | build/
30 |
31 | # Local configuration file (sdk path, etc)
32 | local.properties
33 |
34 | # Proguard folder generated by Eclipse
35 | proguard/
36 |
37 | # Log Files
38 | *.log
39 |
40 | # Android Studio Navigation editor temp files
41 | .navigation/
42 |
43 | # Android Studio captures folder
44 | captures/
45 |
46 | # Intellij
47 | *.iml
48 | .idea/workspace.xml
49 | .idea/libraries
50 |
51 | # Keystore files
52 | *.jks
53 |
54 | # External native build folder generated in Android Studio 2.2 and later
55 | .externalNativeBuild
56 |
--------------------------------------------------------------------------------
/.gitignore.bak:
--------------------------------------------------------------------------------
1 | *.iml
2 | .gradle
3 | /local.properties
4 | /.idea/workspace.xml
5 | /.idea/libraries
6 | .DS_Store
7 | /build
8 | /captures
9 |
--------------------------------------------------------------------------------
/.idea/codeStyles/Project.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
--------------------------------------------------------------------------------
/.idea/gradle.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
11 |
12 |
--------------------------------------------------------------------------------
/.idea/misc.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/.idea/modules.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/.idea/runConfigurations.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/.idea/vcs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2016 hewking
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | > 闲着也是闲着的时候,打开探探划一划,挺多男同胞会这样吧。这不,我也是这样,看到首页探探的效果还是挺吸引人的。之前仿照实现了一个,效果还差一点,正好今天没事完善一下,写下来,希望看到能有收获。
2 |
3 | ##### 实现的效果
4 | 首先看看实现后的效果,先不多说。当然跟探探的原版还是有差距的,没有在细节上面优化的更多。不过花时间调一调还是可以的,现在的效果可以看到,我在下面加了帧数的显示,在真机上显示还是很流畅的,模拟器上由于性能不行还是有点卡。
5 |
6 | 
7 |
8 |
9 | ##### 实现的分析
10 | 通过效果图可以看到,整体的实现可以分为以下四步:
11 | 1. 波纹涟漪的效果
12 | 2. 渐变扫描的效果和中间的镂空
13 | 3. 旋转
14 | 4. 点击头像的动画
15 |
16 | 把以上步骤分别加以实现,就可以做到了。具体实现方法也不止一种,我这里选择的实现还算是简单易懂,易于实现的。以下分解各个步骤,并对关键的细节详加解释。
17 |
18 | ##### 如何实现
19 | 因为有头像,并且涉及到加载网络图片。理论上来说我们可以直接继承ImageView来实现,可是这样太复杂了,是不可取的。所以头像跟我们现在所要实现效果是分开的。然后在跟头像组合在一起,这里可以使自定义一个ViewGroup把两者结合,我这里图省事,这里就没有去做了,而是直接在使用的时候,在布局里面组合在一起。
20 |
21 | 1. 所以第一步先不考虑头像而是实现TanTanRippleView.接下来看水波纹的实现:
22 | 我们需要的是,波纹是动态添加的,通过点击头像添加,所以需要暴露接口。并且波纹是有渐变的,越到边缘透明度越低,直到消失。每一个波纹都是一个圆,透明度通过改变Paint的颜色即可,透明度跟圆的半径也是有规律可循的。所以我这里把每个波纹做了封装。
23 | ```
24 | inner class RippleCircle {
25 | // 4s * 60 frms = 240
26 | private val slice = 150
27 | var startRadius = 0f
28 | var endRadius = 0f
29 | var cx = 0f
30 | var cy = 0f
31 |
32 | private var progress = 0
33 |
34 | fun draw(canvas: Canvas) {
35 | if (progress >= slice) {
36 | // remove
37 | post {
38 | rippleCircles.remove(this)
39 | }
40 | return
41 | }
42 | progress++
43 | ripplePaint.alpha = (1 - progress.div(slice * 1.0f)).times(255).toInt()
44 | val radis = startRadius + (endRadius - startRadius).div(slice).times(progress)
45 | canvas.drawCircle(cx, cy, radis, ripplePaint)
46 | }
47 | }
48 | ```
49 | 看到以上代码可能对slice这个属性有疑惑,这是定义波纹持续时间的,如果60帧每秒,那么持续4s,总共是240帧。这里默认取150帧,所以在60帧持续的时间是2.5s.透明度和半径都跟slice有关:
50 | ```
51 | ripplePaint.alpha = (1 - progress.div(slice * 1.0f)).times(255).toInt()
52 | val radis = startRadius + (endRadius - startRadius).div(slice).times(progress)
53 | ```
54 | 随着时间的增长,透明度越低,半径越大。
55 |
56 | 怎么使用封装的RippleCircle。我们的要求是可以动态添加,并且消失之后需要移除,所以通过ArrayList来作为容器。但这里涉及到对集合的添加和删除操作,如果同时进行会发生异常。解决如下,使用CopyOnWriteArrayList,并且移除通过:
57 | ```
58 | post {
59 | rippleCircles.remove(this)
60 | }
61 | ```
62 | 然后在onDraw中,值得一提的是为了防止被扫描的部分挡住,这里的代码需要写在onDraw方法的后部分。
63 | ```
64 | for (i in 0 until rippleCircles.size) {
65 | rippleCircles[i].draw(canvas)
66 | }
67 | ```
68 |
69 | 在startRipple()方法中添加RippleCircle:
70 | ```
71 | rippleCircles.add(RippleCircle().apply {
72 | cx = width.div(2).toFloat()
73 | cy = height.div(2).toFloat()
74 | val maxRadius = Math.min(width, height).div(2).toFloat()
75 | startRadius = maxRadius.div(3)
76 | endRadius = maxRadius
77 | })
78 | ```
79 | startRipple也是暴露出去调用添加波纹的方法。点击头像然后添加。涉及到自定义View当然测量是很关键的一部分。不过现在直接使用默认就可以,然后去宽高的最小值,除以2作为半径。在这里为什么startRadius要处以3呢,因为定义该大小作为波纹圆开始的半径。到这里第一步就算完成了。
80 |
81 | 2. 扫描的效果是关键的部分,而且效率直接影响是否可用。仔细看效果,其实也是一个圆只不过添加了shader。所以重点就是shader的实现。android中默认提供了几种Shader给我们使用。SweepGradient就是我们需要的,扫描渐变。然后选择了之后,就是调整参数了,看一下SweepGradient的用法:
82 | 构造函数
83 | ```
84 | SweepGradient(float cx, float cy,
85 | @NonNull @ColorInt int colors[], @Nullable float positions[])
86 | ```
87 | 重点在于positions 的理解。按照文档解释以及代码。
88 | 比如跟colors 的值一一对应,还必须是单调递增的,防止出现严重异常。
89 | positions 对应每一个颜色的位置,当然是再圆的位置。顺时针,0为0°,0.5为180°,1为360°。
90 | 如果要像探探一样,最开始是一根线颜色很深。说明第一种颜色很深占比很小,第二种颜色浅占比很大,如下
91 | ```
92 | val colors = intArrayOf(getColor(R.color.pink_fa758a),getColor(R.color.pink_f5b8c2),getColor(R.color.top_background_color),getColor(R.color.white))
93 |
94 | SweepGradient(width.div(2).toFloat(), height.div(2).toFloat(), colors, floatArrayOf(0f,0.001f,0.9f,1f))
95 | ```
96 | 所以设置对了参数,整个扫描渐变的效果就差不多了。然后在对画笔设置shader,在drawCircle。
97 | ```
98 | backPaint.setShader(SweepGradient(width.div(2).toFloat(), height.div(2).toFloat(), colors, floatArrayOf(0f, 0.001f, 0.9f, 1f)))
99 | canvas.drawCircle(width.div(2).toFloat(), height.div(2).toFloat(), radius, backPaint)
100 |
101 | ```
102 | 当做完上面的操作之后,整个扫面的范围是整个圆,而需要的效果是中间有镂空的校园,这里又涉及到对xfermode的操作了。进行xfermode操作,必须要对canvas设置layer。如果不设置会有问题,镂空的校园是黑色的。详细的解释在我之间的文章中有[高仿QQ 发送图片高亮HaloProgressView](https://www.jianshu.com/p/0254501d744d)一文中做过阐述。setLayer需要设置范围,那么我们的范围就是覆盖整个大圆的矩形
103 | ```
104 | val rectF = RectF(width.div(2f) - radius
105 | , height.div(2f) - radius
106 | , width.div(2f) + radius
107 | , height.div(2f) + radius)
108 | val sc = canvas.saveLayer(rectF, backPaint, Canvas.ALL_SAVE_FLAG)
109 | ```
110 | 然后再drawCircle之后在设置xfermode
111 | ```
112 | backPaint.setXfermode(PorterDuffXfermode(PorterDuff.Mode.DST_OUT))
113 |
114 | ```
115 |
116 | 这里采取DST_OUT,为什么采用这种模式,在之前文章中可以详细查看[Paint Xfermode 详解](https://www.jianshu.com/p/19997b0b5b24).到这里扫描渐变和镂空都实现了,只差最后一步,转动起来。
117 | 转动直接通过canvas的rotate方法是很适合现在的场景。因为整个View都是圆。涉及到canvas操作,需要save,然后再restore
118 | ```
119 | canvas.save()
120 | canvas.rotate(sweepProgress.toFloat(), width.div(2f), height.div(2f))
121 | ...
122 | canvas.restore()
123 | ```
124 | 可以看到sweepProgress是转动的关键,通过动画控制是很方便的。
125 | ```
126 | private val renderAnimator by lazy {
127 | ValueAnimator.ofInt(0, 60)
128 | .apply {
129 | interpolator = LinearInterpolator()
130 | duration = 1000
131 | repeatMode = ValueAnimator.RESTART
132 | repeatCount = ValueAnimator.INFINITE
133 | addUpdateListener {
134 | postInvalidateOnAnimation()
135 | fps++
136 | sweepProgress++
137 |
138 | }
139 | addListener(object : AnimatorListenerAdapter() {
140 | override fun onAnimationRepeat(animation: Animator?) {
141 | super.onAnimationRepeat(animation)
142 | fps = 0
143 | }
144 |
145 | })
146 | }
147 | }
148 | ```
149 | 可以看到参数设置一秒60次执行。也就是60帧。再通过到了360°,置0即可。到这里已经完成了TanTanRippleView的实现。接着实现头像的动画。在头像的点击事件里面直接添加:
150 | ```
151 | ((TanTanRippleView)findViewById(R.id.ripple)).startRipple();
152 | AnimatorSet set = new AnimatorSet();
153 | set.setInterpolator(new BounceInterpolator());
154 | set.playTogether(
155 | ObjectAnimator.ofFloat(v,"scaleX",1.2f,0.8f,1f),
156 | ObjectAnimator.ofFloat(v,"scaleY",1.2f,0.8f,1f));
157 | set.setDuration(1100).start();
158 | ```
159 |
--------------------------------------------------------------------------------
/app/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/app/build.gradle:
--------------------------------------------------------------------------------
1 | apply plugin: 'com.android.application'
2 | apply plugin: 'kotlin-android'
3 | apply plugin: 'kotlin-android-extensions'
4 | apply plugin: 'kotlin-kapt'
5 |
6 | android {
7 | compileSdkVersion 23
8 | buildToolsVersion '28.0.3'
9 |
10 | defaultConfig {
11 | applicationId "hewking.github.customviewdemo"
12 | minSdkVersion 19
13 | targetSdkVersion 23
14 | versionCode 1
15 | versionName "1.0"
16 | }
17 | buildTypes {
18 | release {
19 | minifyEnabled false
20 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
21 | }
22 | }
23 | sourceSets {
24 | main.java.srcDirs += 'src/main/kotlin'
25 | }
26 | }
27 |
28 | dependencies {
29 | implementation fileTree(include: ['*.jar'], dir: 'libs')
30 | testImplementation 'junit:junit:4.12'
31 | implementation 'com.android.support:appcompat-v7:23.1.1'
32 | implementation 'com.android.support:design:23.1.1'
33 | api "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
34 |
35 | }
36 |
37 | repositories {
38 | mavenCentral()
39 | }
40 |
--------------------------------------------------------------------------------
/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 E:\android\eclispe_android\eclipse_en_32_4.4\sdk/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 |
--------------------------------------------------------------------------------
/app/src/androidTest/java/hewking/github/customviewdemo/ApplicationTest.java:
--------------------------------------------------------------------------------
1 | package hewking.github.customviewdemo;
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/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
8 |
14 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/app/src/main/java/com/hewking/MainActivity.java:
--------------------------------------------------------------------------------
1 | package com.hewking;
2 |
3 | import android.animation.AnimatorSet;
4 | import android.animation.ObjectAnimator;
5 | import android.app.Activity;
6 | import android.os.Bundle;
7 | import android.util.Log;
8 | import android.view.View;
9 | import android.view.animation.BounceInterpolator;
10 |
11 | import com.hewking.widget.TanTanRippleView;
12 |
13 | import hewking.github.customviewdemo.R;
14 |
15 | public class MainActivity extends Activity {
16 |
17 |
18 | @Override
19 | protected void onCreate(Bundle savedInstanceState) {
20 | super.onCreate(savedInstanceState);
21 | setContentView(R.layout.activity_main);
22 | final int i = 10;
23 | getWindow().getDecorView().setOnClickListener(new View.OnClickListener() {
24 | @Override
25 | public void onClick(View v) {
26 |
27 | }
28 | });
29 | initView();
30 | }
31 |
32 | private void initView() {
33 | findViewById(R.id.iv_avatar).setOnClickListener(new View.OnClickListener() {
34 | @Override
35 | public void onClick(View v) {
36 | ((TanTanRippleView)findViewById(R.id.ripple)).startRipple();
37 | AnimatorSet set = new AnimatorSet();
38 | set.setInterpolator(new BounceInterpolator());
39 | set.playTogether(
40 | ObjectAnimator.ofFloat(v,"scaleX",1.2f,0.8f,1f),
41 | ObjectAnimator.ofFloat(v,"scaleY",1.2f,0.8f,1f));
42 | set.setDuration(1100).start();
43 | }
44 | });
45 |
46 |
47 | }
48 |
49 |
50 | }
51 |
--------------------------------------------------------------------------------
/app/src/main/java/com/hewking/ViewEx.kt:
--------------------------------------------------------------------------------
1 | package com.hewking
2 |
3 | import android.support.annotation.ColorInt
4 | import android.support.annotation.ColorRes
5 | import android.support.v4.content.ContextCompat
6 | import android.view.View
7 |
8 | /**
9 | * 类的描述:
10 | * 创建人员:hewking
11 | * 创建时间:2018/12/27
12 | * 修改人员:hewking
13 | * 修改时间:2018/12/27
14 | * 修改备注:
15 | * Version: 1.0.0
16 | */
17 |
18 | fun View.dp2px(dp : Float) : Int{
19 | return (context.resources.displayMetrics.density * dp + 0.5).toInt()
20 | }
21 |
22 | @ColorInt
23 | fun View.getColor(@ColorRes resid: Int): Int {
24 | return ContextCompat.getColor(context, resid)
25 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/hewking/widget/CircleImageView.kt:
--------------------------------------------------------------------------------
1 | package com.hewking.widget
2 |
3 | import android.content.Context
4 | import android.graphics.Canvas
5 | import android.graphics.Color
6 | import android.graphics.Paint
7 | import android.graphics.Path
8 | import android.util.AttributeSet
9 | import android.widget.ImageView
10 | import com.hewking.dp2px
11 | import hewking.github.customviewdemo.R
12 |
13 | class CircleImageView(ctx : Context, attrs: AttributeSet) : ImageView(ctx,attrs) {
14 |
15 | private var borderWidth = dp2px(1f).toFloat()
16 |
17 | private val path by lazy {
18 | Path()
19 | }
20 |
21 | init {
22 | val typeArray = ctx.obtainStyledAttributes(attrs, R.styleable.CircleImageView)
23 | borderWidth = typeArray.getDimensionPixelSize(R.styleable.CircleImageView_c_border_width,borderWidth.toInt()).toFloat()
24 | typeArray.recycle()
25 | }
26 |
27 | private val mBorderPaint by lazy {
28 | Paint().apply{
29 | isAntiAlias = true
30 | style = Paint.Style.STROKE
31 | color = Color.WHITE
32 | strokeWidth = borderWidth
33 | }
34 | }
35 |
36 | override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
37 | super.onMeasure(widthMeasureSpec, heightMeasureSpec)
38 | val size = Math.min(getMeasuredWidth(),getMeasuredHeight())
39 | setMeasuredDimension(size,size)
40 | }
41 |
42 | override fun onDraw(canvas: Canvas?) {
43 | canvas?:return
44 | val radius = Math.min(width,height).div(2f)
45 | path.addCircle(width.div(2f),height.div(2f),radius,Path.Direction.CW)
46 | canvas.clipPath(path)
47 | canvas.drawCircle(width.div(2f),height.div(2f),radius,mBorderPaint)
48 | canvas.save()
49 | canvas.scale(0.9f,0.9f)
50 | super.onDraw(canvas)
51 | canvas.restore()
52 | }
53 |
54 | }
55 |
--------------------------------------------------------------------------------
/app/src/main/java/com/hewking/widget/TanTanRippleView.kt:
--------------------------------------------------------------------------------
1 | package com.hewking.widget
2 |
3 | import android.animation.Animator
4 | import android.animation.AnimatorListenerAdapter
5 | import android.animation.ValueAnimator
6 | import android.content.Context
7 | import android.graphics.*
8 | import android.support.v4.content.ContextCompat.getColor
9 | import android.util.AttributeSet
10 | import android.view.View
11 | import android.view.animation.LinearInterpolator
12 | import com.hewking.dp2px
13 | import com.hewking.getColor
14 | import hewking.github.customviewdemo.BuildConfig
15 | import hewking.github.customviewdemo.R
16 |
17 | import java.util.concurrent.CopyOnWriteArrayList
18 |
19 | /**
20 | * 项目名称:FlowChat
21 | * 类的描述:xfermode 的使用采用canvas.drawBitmap 的方式实现
22 | * 创建人员:hewking
23 | * 创建时间:2018/12/11 0011
24 | * 修改人员:hewking
25 | * 修改时间:2018/12/11 0011
26 | * 修改备注:
27 | * Version: 1.0.0
28 | */
29 | class TanTanRippleView(ctx: Context, attrs: AttributeSet) : View(ctx, attrs) {
30 |
31 | private var radiuls: Int = 0
32 |
33 | private val rippleCircles = CopyOnWriteArrayList()
34 |
35 | init {
36 |
37 | }
38 |
39 | private val ripplePaint by lazy {
40 | Paint().apply {
41 | style = Paint.Style.STROKE
42 | strokeWidth = dp2px(0.5f).toFloat()
43 | color = getColor(R.color.color_FF434343)
44 | isAntiAlias = true
45 | }
46 | }
47 |
48 | private val backPaint by lazy {
49 | Paint().apply {
50 | style = Paint.Style.FILL
51 | isAntiAlias = true
52 | strokeWidth = dp2px(0.5f).toFloat()
53 | }
54 | }
55 |
56 | private var sweepProgress = 0
57 | set(value) {
58 | if (value >= 360) {
59 | field = 0
60 | } else {
61 | field = value
62 | }
63 | }
64 | private var fps: Int = 0
65 | private var fpsPaint = Paint().apply {
66 | isAntiAlias = true
67 | style = Paint.Style.STROKE
68 | color = Color.GREEN
69 | textSize = dp2px(20f).toFloat()
70 | strokeWidth = dp2px(1f).toFloat()
71 | }
72 |
73 | private val renderAnimator by lazy {
74 | ValueAnimator.ofInt(0, 60)
75 | .apply {
76 | interpolator = LinearInterpolator()
77 | duration = 1000
78 | repeatMode = ValueAnimator.RESTART
79 | repeatCount = ValueAnimator.INFINITE
80 | addUpdateListener {
81 | postInvalidateOnAnimation()
82 | fps++
83 | sweepProgress++
84 |
85 | }
86 | addListener(object : AnimatorListenerAdapter() {
87 | override fun onAnimationRepeat(animation: Animator?) {
88 | super.onAnimationRepeat(animation)
89 | fps = 0
90 | }
91 |
92 | })
93 | }
94 | }
95 |
96 | override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
97 | super.onMeasure(widthMeasureSpec, heightMeasureSpec)
98 | val wMode = MeasureSpec.getMode(widthMeasureSpec)
99 | val wSize = MeasureSpec.getSize(widthMeasureSpec)
100 | val hMode = MeasureSpec.getMode(heightMeasureSpec)
101 | val hSize = MeasureSpec.getSize(heightMeasureSpec)
102 | val size = Math.min(wSize, hSize)
103 | if (wMode == MeasureSpec.AT_MOST || hMode == MeasureSpec.AT_MOST) {
104 | radiuls = size.div(2)
105 | }
106 | }
107 |
108 | var backCanvas: Canvas? = null
109 | var backBitmap: Bitmap? = null
110 |
111 | override fun onSizeChanged(w: Int, h: Int, oldw: Int, oldh: Int) {
112 | super.onSizeChanged(w, h, oldw, oldh)
113 | backBitmap?.recycle()
114 | if (w != 0 && h != 0) {
115 | backBitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888)
116 | backCanvas = Canvas(backBitmap)
117 | }
118 | }
119 |
120 | override fun onDraw(canvas: Canvas?) {
121 | canvas ?: return
122 |
123 | val maxRadius = Math.min(width, height).div(2).toFloat()
124 | val radius = maxRadius
125 | canvas.save()
126 | canvas.rotate(sweepProgress.toFloat(), width.div(2f), height.div(2f))
127 |
128 | val colors = intArrayOf(getColor(R.color.pink_fa758a), getColor(R.color.pink_f5b8c2), getColor(R.color.top_background_color), getColor(R.color.white))
129 | backPaint.setShader(SweepGradient(width.div(2).toFloat(), height.div(2).toFloat(), colors, floatArrayOf(0f, 0.001f, 0.9f, 1f)))
130 | val rectF = RectF(width.div(2f) - radius
131 | , height.div(2f) - radius
132 | , width.div(2f) + radius
133 | , height.div(2f) + radius)
134 | val sc = canvas.saveLayer(rectF, backPaint, Canvas.ALL_SAVE_FLAG)
135 | // canvas.drawBitmap(makeDst(), null,rectF, backPaint)
136 | canvas.drawCircle(width.div(2).toFloat(), height.div(2).toFloat(), radius, backPaint)
137 | backPaint.setXfermode(PorterDuffXfermode(PorterDuff.Mode.DST_OUT))
138 | // canvas.drawCircle(width.div(2f), height.div(2f), radius.div(3f), backPaint)
139 | /* rectF.apply {
140 | left = width.div(2f) - radius * 1f.div(3)
141 | top = height.div(2f) - radius * 1f.div(3)
142 | right = width.div(2f) + radius * 1f.div(3)
143 | bottom = height.div(2f) + radius * 1f.div(3)
144 | }
145 | canvas.drawBitmap(makeSrc(),null,rectF,backPaint)*/
146 | canvas.drawCircle(width.div(2f), height.div(2f), radius.div(3f), backPaint)
147 | backPaint.setXfermode(null)
148 | backPaint.setShader(null)
149 | canvas.restoreToCount(sc)
150 | canvas.restore()
151 |
152 | for (i in 0 until rippleCircles.size) {
153 | rippleCircles[i].draw(canvas)
154 | }
155 |
156 | if (BuildConfig.DEBUG) {
157 | canvas.drawText(fps.toString(), paddingStart.toFloat()
158 | , height - dp2px(10f).toFloat() - paddingBottom, fpsPaint)
159 | }
160 | }
161 |
162 | override fun onAttachedToWindow() {
163 | super.onAttachedToWindow()
164 | // start anim
165 | // startRipple()
166 | renderAnimator.start()
167 | }
168 |
169 | open fun startRipple() {
170 | val runnable = Runnable {
171 | rippleCircles.add(RippleCircle().apply {
172 | cx = width.div(2).toFloat()
173 | cy = height.div(2).toFloat()
174 | val maxRadius = Math.min(width, height).div(2).toFloat()
175 | startRadius = maxRadius.div(3)
176 | endRadius = maxRadius
177 | })
178 | // startRipple()
179 | }
180 | postOnAnimation(runnable)
181 | // postOnAnimationDelayed(runnable, 2000)
182 | }
183 |
184 | override fun onDetachedFromWindow() {
185 | super.onDetachedFromWindow()
186 | // end anim
187 | renderAnimator.end()
188 | backBitmap?.recycle()
189 | }
190 |
191 | inner class RippleCircle {
192 | // 4s * 60 frms = 240
193 | private val slice = 150
194 | var startRadius = 0f
195 | var endRadius = 0f
196 | var cx = 0f
197 | var cy = 0f
198 |
199 | private var progress = 0
200 |
201 | fun draw(canvas: Canvas) {
202 | if (progress >= slice) {
203 | // remove
204 | post {
205 | rippleCircles.remove(this)
206 | }
207 | return
208 | }
209 | progress++
210 | ripplePaint.alpha = (1 - progress.div(slice * 1.0f)).times(255).toInt()
211 | val radis = startRadius + (endRadius - startRadius).div(slice).times(progress)
212 | canvas.drawCircle(cx, cy, radis, ripplePaint)
213 | }
214 | }
215 |
216 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/hewking/widget/TideRippleView.kt:
--------------------------------------------------------------------------------
1 | package com.hewking.widget
2 |
3 | import android.animation.Animator
4 | import android.animation.AnimatorListenerAdapter
5 | import android.animation.ValueAnimator
6 | import android.content.Context
7 | import android.graphics.*
8 | import android.util.AttributeSet
9 | import android.view.View
10 | import android.view.animation.LinearInterpolator
11 | import com.hewking.dp2px
12 | import hewking.github.customviewdemo.BuildConfig
13 | import java.util.concurrent.CopyOnWriteArrayList
14 |
15 | /**
16 | * 项目名称:FlowChat
17 | * 类的描述:
18 | * 创建人员:hewking
19 | * 创建时间:2018/12/11 0011
20 | * 修改人员:hewking
21 | * 修改时间:2018/12/11 0011
22 | * 修改备注:
23 | * Version: 1.0.0
24 | */
25 | class TideRippleView(ctx: Context, attrs: AttributeSet) : View(ctx, attrs) {
26 |
27 | private var radiuls: Int = 0
28 |
29 | private val rippleCircles = CopyOnWriteArrayList()
30 |
31 | init {
32 |
33 | }
34 |
35 | private val ripplePaint by lazy {
36 | Paint().apply {
37 | style = Paint.Style.STROKE
38 | strokeWidth = dp2px(0.5f).toFloat()
39 | color = Color.BLUE
40 | isAntiAlias = true
41 | }
42 | }
43 |
44 | private val backPaint by lazy {
45 | Paint().apply {
46 | style= Paint.Style.FILL_AND_STROKE
47 | isAntiAlias = true
48 | strokeWidth = dp2px(0.5f).toFloat()
49 | }
50 | }
51 |
52 | private var sweepProgress = 0
53 | set(value) {
54 | if (value >= 360) {
55 | field = 0
56 | } else {
57 | field = value
58 | }
59 | }
60 | private var fps: Int = 0
61 | private var fpsPaint = Paint().apply {
62 | isAntiAlias = true
63 | style = Paint.Style.STROKE
64 | color = Color.GREEN
65 | textSize = dp2px(20f).toFloat()
66 | strokeWidth = dp2px(1f).toFloat()
67 | }
68 |
69 | private val renderAnimator by lazy {
70 | ValueAnimator.ofInt(0, 60)
71 | .apply {
72 | interpolator = LinearInterpolator()
73 | duration = 1000
74 | repeatMode = ValueAnimator.RESTART
75 | repeatCount = ValueAnimator.INFINITE
76 | addUpdateListener {
77 | postInvalidateOnAnimation()
78 | fps++
79 | sweepProgress ++
80 |
81 | }
82 | addListener(object : AnimatorListenerAdapter() {
83 | override fun onAnimationRepeat(animation: Animator?) {
84 | super.onAnimationRepeat(animation)
85 | fps = 0
86 | }
87 |
88 | })
89 | }
90 | }
91 |
92 | override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
93 | super.onMeasure(widthMeasureSpec, heightMeasureSpec)
94 | val wMode = MeasureSpec.getMode(widthMeasureSpec)
95 | val wSize = MeasureSpec.getSize(widthMeasureSpec)
96 | val hMode = MeasureSpec.getMode(heightMeasureSpec)
97 | val hSize = MeasureSpec.getSize(heightMeasureSpec)
98 | val size = Math.min(wSize, hSize)
99 | if (wMode == MeasureSpec.AT_MOST || hMode == MeasureSpec.AT_MOST) {
100 | radiuls = size.div(2)
101 | }
102 | }
103 |
104 | var backCanvas : Canvas? = null
105 | var backBitmap : Bitmap? = null
106 |
107 | override fun onSizeChanged(w: Int, h: Int, oldw: Int, oldh: Int) {
108 | super.onSizeChanged(w, h, oldw, oldh)
109 | backBitmap?.recycle()
110 | if (w != 0 && h != 0){
111 | backBitmap = Bitmap.createBitmap(w,h,Bitmap.Config.ARGB_8888)
112 | backCanvas = Canvas(backBitmap)
113 | }
114 | }
115 |
116 | override fun onDraw(canvas: Canvas?) {
117 | canvas ?: return
118 | canvas.save()
119 | // canvas.translate(width.div(2f),height.div(2f))
120 | /* rippleCircles.forEach {
121 | }*/
122 |
123 | for (i in 0 until rippleCircles.size) {
124 | rippleCircles[i].draw(canvas)
125 | }
126 | canvas.restore()
127 | backCanvas?.let {
128 | val maxRadius = Math.min(width, height).div(2).toFloat()
129 | val radius = maxRadius.div(2)
130 | it.save()
131 | // backPaint.color = Color.WHITE
132 | backPaint.setXfermode(PorterDuffXfermode(PorterDuff.Mode.CLEAR))
133 | it.drawPaint(backPaint)
134 | backPaint.setXfermode(null)
135 | it.rotate(sweepProgress.toFloat(),width.div(2f),height.div(2f))
136 | backPaint.setShader(SweepGradient(width.div(2).toFloat(),height.div(2).toFloat(),Color.RED,Color.WHITE))
137 | it.drawCircle(width.div(2).toFloat(),height.div(2).toFloat(),radius,backPaint)
138 | backPaint.setXfermode(PorterDuffXfermode(PorterDuff.Mode.SRC_OUT))
139 | // backPaint.color = Color.TRANSPARENT
140 | it.drawCircle(width.div(2f),height.div(2f),radius.div(3f),backPaint)
141 | it.restore()
142 | canvas.drawBitmap(backBitmap,0f,0f,null)
143 | }
144 |
145 |
146 | if (BuildConfig.DEBUG) {
147 | canvas.drawText(fps.toString(), paddingStart.toFloat()
148 | , height - dp2px(10f).toFloat() - paddingBottom, fpsPaint)
149 | }
150 | }
151 |
152 |
153 | override fun onAttachedToWindow() {
154 | super.onAttachedToWindow()
155 | // start anim
156 | startRipple()
157 | renderAnimator.start()
158 | }
159 |
160 | private fun startRipple() {
161 | val runnable = Runnable {
162 | rippleCircles.add(RippleCircle().apply {
163 | cx = width.div(2).toFloat()
164 | cy = height.div(2).toFloat()
165 | val maxRadius = Math.min(width, height).div(2).toFloat()
166 | startRadius = maxRadius.div(2)
167 | endRadius = maxRadius
168 | })
169 | startRipple()
170 | }
171 | postOnAnimationDelayed(runnable, 2000)
172 | }
173 |
174 | override fun onDetachedFromWindow() {
175 | super.onDetachedFromWindow()
176 | // end anim
177 | renderAnimator.end()
178 | backBitmap?.recycle()
179 | }
180 |
181 | inner class RippleCircle {
182 | // 4s * 60 frms = 240
183 | private val slice = 300
184 | var startRadius = 0f
185 | var endRadius = 0f
186 | var cx = 0f
187 | var cy = 0f
188 |
189 | private var progress = 0
190 |
191 | fun draw(canvas: Canvas) {
192 | if (progress >= slice) {
193 | // remove
194 | post {
195 | rippleCircles.remove(this)
196 | }
197 | return
198 | }
199 | progress++
200 | ripplePaint.alpha = (1 - progress.div(slice * 1.0f)).times(255).toInt()
201 | val radis = startRadius + (endRadius - startRadius).div(slice).times(progress)
202 | canvas.drawCircle(cx, cy, radis, ripplePaint)
203 | }
204 | }
205 |
206 | }
--------------------------------------------------------------------------------
/app/src/main/res/layout/activity_dbtest.xml:
--------------------------------------------------------------------------------
1 |
2 |
11 |
12 |
17 |
22 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/activity_main.xml:
--------------------------------------------------------------------------------
1 |
2 |
10 |
11 |
16 |
17 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/activity_retrofit.xml:
--------------------------------------------------------------------------------
1 |
2 |
11 |
12 |
20 |
27 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/content_main.xml:
--------------------------------------------------------------------------------
1 |
2 |
15 |
16 |
20 |
21 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/retrofit.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
11 |
12 |
18 |
19 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/menu_main.xml:
--------------------------------------------------------------------------------
1 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hewking/TanTanRippleView/ce91d8f71f47f31dd60226cfe65f145e39de8e0c/app/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/nice_girl.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hewking/TanTanRippleView/ce91d8f71f47f31dd60226cfe65f145e39de8e0c/app/src/main/res/mipmap-hdpi/nice_girl.jpg
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hewking/TanTanRippleView/ce91d8f71f47f31dd60226cfe65f145e39de8e0c/app/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hewking/TanTanRippleView/ce91d8f71f47f31dd60226cfe65f145e39de8e0c/app/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hewking/TanTanRippleView/ce91d8f71f47f31dd60226cfe65f145e39de8e0c/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/user.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hewking/TanTanRippleView/ce91d8f71f47f31dd60226cfe65f145e39de8e0c/app/src/main/res/mipmap-xxhdpi/user.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hewking/TanTanRippleView/ce91d8f71f47f31dd60226cfe65f145e39de8e0c/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/values-1280x672/dimens.xml:
--------------------------------------------------------------------------------
1 |
2 | 1280px
3 | 720px
4 | 0px
5 | 1px
6 | 2px
7 | 2px
8 | 3px
9 | 4px
10 | 4px
11 | 5px
12 | 6px
13 | 6px
14 | 7px
15 | 8px
16 | 8px
17 | 9px
18 | 10px
19 | 10px
20 | 11px
21 | 12px
22 | 12px
23 | 13px
24 | 14px
25 | 14px
26 | 15px
27 | 16px
28 | 16px
29 | 17px
30 | 18px
31 | 18px
32 | 19px
33 | 20px
34 | 20px
35 | 21px
36 | 22px
37 | 22px
38 | 23px
39 | 24px
40 | 24px
41 | 25px
42 | 26px
43 | 26px
44 | 27px
45 | 28px
46 | 28px
47 | 29px
48 | 30px
49 | 30px
50 | 31px
51 | 32px
52 | 32px
53 | 33px
54 | 34px
55 | 34px
56 | 35px
57 | 36px
58 | 36px
59 | 37px
60 | 38px
61 | 38px
62 | 39px
63 | 40px
64 | 40px
65 | 41px
66 | 42px
67 | 42px
68 | 43px
69 | 44px
70 | 44px
71 | 45px
72 | 46px
73 | 46px
74 | 47px
75 | 48px
76 | 48px
77 | 49px
78 | 50px
79 | 50px
80 | 51px
81 | 52px
82 | 52px
83 | 53px
84 | 54px
85 | 54px
86 | 55px
87 | 56px
88 | 56px
89 | 57px
90 | 58px
91 | 58px
92 | 59px
93 | 60px
94 | 60px
95 | 61px
96 | 62px
97 | 62px
98 | 63px
99 | 64px
100 | 64px
101 | 65px
102 | 66px
103 | 66px
104 | 67px
105 | 68px
106 | 68px
107 | 69px
108 | 70px
109 | 70px
110 | 71px
111 | 72px
112 | 72px
113 | 73px
114 | 74px
115 | 74px
116 | 75px
117 | 76px
118 | 76px
119 | 77px
120 | 78px
121 | 78px
122 | 79px
123 | 80px
124 | 80px
125 | 81px
126 | 82px
127 | 82px
128 | 83px
129 | 84px
130 | 84px
131 | 85px
132 | 86px
133 | 86px
134 | 87px
135 | 88px
136 | 88px
137 | 89px
138 | 90px
139 | 90px
140 | 91px
141 | 92px
142 | 92px
143 | 93px
144 | 94px
145 | 94px
146 | 95px
147 | 96px
148 | 96px
149 | 97px
150 | 98px
151 | 98px
152 | 99px
153 | 100px
154 | 100px
155 | 101px
156 | 102px
157 | 102px
158 | 103px
159 | 104px
160 | 104px
161 | 105px
162 | 106px
163 | 106px
164 | 107px
165 | 108px
166 | 108px
167 | 109px
168 | 110px
169 | 110px
170 | 111px
171 | 112px
172 | 112px
173 | 113px
174 | 114px
175 | 114px
176 | 115px
177 | 116px
178 | 116px
179 | 117px
180 | 118px
181 | 118px
182 | 119px
183 | 120px
184 | 120px
185 | 121px
186 | 122px
187 | 122px
188 | 123px
189 | 124px
190 | 124px
191 | 125px
192 | 126px
193 | 126px
194 | 127px
195 | 128px
196 | 128px
197 | 129px
198 | 130px
199 | 130px
200 | 131px
201 | 132px
202 | 132px
203 | 133px
204 | 134px
205 | 134px
206 | 135px
207 | 136px
208 | 136px
209 | 137px
210 | 138px
211 | 138px
212 | 139px
213 | 140px
214 | 140px
215 | 141px
216 | 142px
217 | 142px
218 | 143px
219 | 144px
220 | 144px
221 | 145px
222 | 146px
223 | 146px
224 | 147px
225 | 148px
226 | 148px
227 | 149px
228 | 150px
229 | 150px
230 | 151px
231 | 152px
232 | 152px
233 | 153px
234 | 154px
235 | 154px
236 | 155px
237 | 156px
238 | 156px
239 | 157px
240 | 158px
241 | 158px
242 | 159px
243 | 160px
244 | 160px
245 | 161px
246 | 162px
247 | 162px
248 | 163px
249 | 164px
250 | 164px
251 | 165px
252 | 166px
253 | 166px
254 | 167px
255 | 168px
256 | 168px
257 | 169px
258 | 170px
259 | 170px
260 | 171px
261 | 172px
262 | 172px
263 | 173px
264 | 174px
265 | 174px
266 | 175px
267 | 176px
268 | 176px
269 | 177px
270 | 178px
271 | 178px
272 | 179px
273 | 180px
274 | 180px
275 | 181px
276 | 182px
277 | 182px
278 | 183px
279 | 184px
280 | 184px
281 | 185px
282 | 186px
283 | 186px
284 | 187px
285 | 188px
286 | 188px
287 | 189px
288 | 190px
289 | 190px
290 | 191px
291 | 192px
292 | 192px
293 | 193px
294 | 194px
295 | 194px
296 | 195px
297 | 196px
298 | 196px
299 | 197px
300 | 198px
301 | 198px
302 | 199px
303 | 200px
304 | 200px
305 | 201px
306 | 202px
307 | 202px
308 | 203px
309 | 204px
310 | 204px
311 | 205px
312 | 206px
313 | 206px
314 | 207px
315 | 208px
316 | 208px
317 | 209px
318 | 210px
319 | 210px
320 | 211px
321 | 212px
322 | 212px
323 | 213px
324 | 214px
325 | 214px
326 | 215px
327 | 216px
328 | 216px
329 | 217px
330 | 218px
331 | 218px
332 | 219px
333 | 220px
334 | 220px
335 | 221px
336 | 222px
337 | 222px
338 | 223px
339 | 224px
340 | 224px
341 | 225px
342 | 226px
343 | 226px
344 | 227px
345 | 228px
346 | 228px
347 | 229px
348 | 230px
349 | 230px
350 | 231px
351 | 232px
352 | 232px
353 | 233px
354 | 234px
355 | 234px
356 | 235px
357 | 236px
358 | 236px
359 | 237px
360 | 238px
361 | 238px
362 | 239px
363 | 240px
364 | 240px
365 | 241px
366 | 242px
367 | 242px
368 | 243px
369 | 244px
370 | 244px
371 | 245px
372 | 246px
373 | 246px
374 | 247px
375 | 248px
376 | 248px
377 | 249px
378 | 250px
379 | 250px
380 | 251px
381 | 252px
382 | 252px
383 | 253px
384 | 254px
385 | 254px
386 | 255px
387 | 256px
388 | 256px
389 | 257px
390 | 258px
391 | 258px
392 | 259px
393 | 260px
394 | 260px
395 | 261px
396 | 262px
397 | 262px
398 | 263px
399 | 264px
400 | 264px
401 | 265px
402 | 266px
403 | 266px
404 | 267px
405 | 268px
406 | 268px
407 | 269px
408 | 270px
409 | 270px
410 | 271px
411 | 272px
412 | 272px
413 | 273px
414 | 274px
415 | 274px
416 | 275px
417 | 276px
418 | 276px
419 | 277px
420 | 278px
421 | 278px
422 | 279px
423 | 280px
424 | 280px
425 | 281px
426 | 282px
427 | 282px
428 | 283px
429 | 284px
430 | 284px
431 | 285px
432 | 286px
433 | 286px
434 | 287px
435 | 288px
436 | 288px
437 | 289px
438 | 290px
439 | 290px
440 | 291px
441 | 292px
442 | 292px
443 | 293px
444 | 294px
445 | 294px
446 | 295px
447 | 296px
448 | 296px
449 | 297px
450 | 298px
451 | 298px
452 | 299px
453 | 300px
454 | 300px
455 | 301px
456 | 302px
457 | 302px
458 | 303px
459 | 304px
460 | 304px
461 | 305px
462 | 306px
463 | 306px
464 | 307px
465 | 308px
466 | 308px
467 | 309px
468 | 310px
469 | 310px
470 | 311px
471 | 312px
472 | 312px
473 | 313px
474 | 314px
475 | 314px
476 | 315px
477 | 316px
478 | 316px
479 | 317px
480 | 318px
481 | 318px
482 | 319px
483 | 320px
484 | 320px
485 | 321px
486 | 322px
487 | 322px
488 | 323px
489 | 324px
490 | 324px
491 | 325px
492 | 326px
493 | 326px
494 | 327px
495 | 328px
496 | 328px
497 | 329px
498 | 330px
499 | 330px
500 | 331px
501 | 332px
502 | 332px
503 | 333px
504 | 334px
505 | 334px
506 | 335px
507 | 336px
508 | 336px
509 | 337px
510 | 338px
511 | 338px
512 | 339px
513 | 340px
514 | 340px
515 | 341px
516 | 342px
517 | 342px
518 | 343px
519 | 344px
520 | 344px
521 | 345px
522 | 346px
523 | 346px
524 | 347px
525 | 348px
526 | 348px
527 | 349px
528 | 350px
529 | 350px
530 | 351px
531 | 352px
532 | 352px
533 | 353px
534 | 354px
535 | 354px
536 | 355px
537 | 356px
538 | 356px
539 | 357px
540 | 358px
541 | 358px
542 | 359px
543 | 360px
544 | 360px
545 | 361px
546 | 362px
547 | 362px
548 | 363px
549 | 364px
550 | 364px
551 | 365px
552 | 366px
553 | 366px
554 | 367px
555 | 368px
556 | 368px
557 | 369px
558 | 370px
559 | 370px
560 | 371px
561 | 372px
562 | 372px
563 | 373px
564 | 374px
565 | 374px
566 | 375px
567 | 376px
568 | 376px
569 | 377px
570 | 378px
571 | 378px
572 | 379px
573 | 380px
574 | 380px
575 | 381px
576 | 382px
577 | 382px
578 | 383px
579 | 384px
580 | 384px
581 | 385px
582 | 386px
583 | 386px
584 | 387px
585 | 388px
586 | 388px
587 | 389px
588 | 390px
589 | 390px
590 | 391px
591 | 392px
592 | 392px
593 | 393px
594 | 394px
595 | 394px
596 | 395px
597 | 396px
598 | 396px
599 | 397px
600 | 398px
601 | 398px
602 | 399px
603 | 400px
604 | 400px
605 | 401px
606 | 402px
607 | 402px
608 | 403px
609 | 404px
610 | 404px
611 | 405px
612 | 406px
613 | 406px
614 | 407px
615 | 408px
616 | 408px
617 | 409px
618 | 410px
619 | 410px
620 | 411px
621 | 412px
622 | 412px
623 | 413px
624 | 414px
625 | 414px
626 | 415px
627 | 416px
628 | 416px
629 | 417px
630 | 418px
631 | 418px
632 | 419px
633 | 420px
634 | 420px
635 | 421px
636 | 422px
637 | 422px
638 | 423px
639 | 424px
640 | 424px
641 | 425px
642 | 426px
643 | 426px
644 | 427px
645 | 428px
646 | 428px
647 | 429px
648 | 430px
649 | 430px
650 | 431px
651 | 432px
652 | 432px
653 | 433px
654 | 434px
655 | 434px
656 | 435px
657 | 436px
658 | 436px
659 | 437px
660 | 438px
661 | 438px
662 | 439px
663 | 440px
664 | 440px
665 | 441px
666 | 442px
667 | 442px
668 | 443px
669 | 444px
670 | 444px
671 | 445px
672 | 446px
673 | 446px
674 | 447px
675 | 448px
676 | 448px
677 | 449px
678 | 450px
679 | 450px
680 | 451px
681 | 452px
682 | 452px
683 | 453px
684 | 454px
685 | 454px
686 | 455px
687 | 456px
688 | 456px
689 | 457px
690 | 458px
691 | 458px
692 | 459px
693 | 460px
694 | 460px
695 | 461px
696 | 462px
697 | 462px
698 | 463px
699 | 464px
700 | 464px
701 | 465px
702 | 466px
703 | 466px
704 | 467px
705 | 468px
706 | 468px
707 | 469px
708 | 470px
709 | 470px
710 | 471px
711 | 472px
712 | 472px
713 | 473px
714 | 474px
715 | 474px
716 | 475px
717 | 476px
718 | 476px
719 | 477px
720 | 478px
721 | 478px
722 | 479px
723 | 480px
724 | 480px
725 | 481px
726 | 482px
727 | 482px
728 | 483px
729 | 484px
730 | 484px
731 | 485px
732 | 486px
733 | 486px
734 | 487px
735 | 488px
736 | 488px
737 | 489px
738 | 490px
739 | 490px
740 | 491px
741 | 492px
742 | 492px
743 | 493px
744 | 494px
745 | 494px
746 | 495px
747 | 496px
748 | 496px
749 | 497px
750 | 498px
751 | 498px
752 | 499px
753 | 500px
754 | 500px
755 | 501px
756 | 502px
757 | 502px
758 | 503px
759 | 504px
760 | 504px
761 | 505px
762 | 506px
763 | 506px
764 | 507px
765 | 508px
766 | 508px
767 | 509px
768 | 510px
769 | 510px
770 | 511px
771 | 512px
772 | 512px
773 | 513px
774 | 514px
775 | 514px
776 | 515px
777 | 516px
778 | 516px
779 | 517px
780 | 518px
781 | 518px
782 | 519px
783 | 520px
784 | 520px
785 | 521px
786 | 522px
787 | 522px
788 | 523px
789 | 524px
790 | 524px
791 | 525px
792 | 526px
793 | 526px
794 | 527px
795 | 528px
796 | 528px
797 | 529px
798 | 530px
799 | 530px
800 | 531px
801 | 532px
802 | 532px
803 | 533px
804 | 534px
805 | 534px
806 | 535px
807 | 536px
808 | 536px
809 | 537px
810 | 538px
811 | 538px
812 | 539px
813 | 540px
814 | 540px
815 | 541px
816 | 542px
817 | 542px
818 | 543px
819 | 544px
820 | 544px
821 | 545px
822 | 546px
823 | 546px
824 | 547px
825 | 548px
826 | 548px
827 | 549px
828 | 550px
829 | 550px
830 | 551px
831 | 552px
832 | 552px
833 | 553px
834 | 554px
835 | 554px
836 | 555px
837 | 556px
838 | 556px
839 | 557px
840 | 558px
841 | 558px
842 | 559px
843 | 560px
844 | 560px
845 | 561px
846 | 562px
847 | 562px
848 | 563px
849 | 564px
850 | 564px
851 | 565px
852 | 566px
853 | 566px
854 | 567px
855 | 568px
856 | 568px
857 | 569px
858 | 570px
859 | 570px
860 | 571px
861 | 572px
862 | 572px
863 | 573px
864 | 574px
865 | 574px
866 | 575px
867 | 576px
868 | 576px
869 | 577px
870 | 578px
871 | 578px
872 | 579px
873 | 580px
874 | 580px
875 | 581px
876 | 582px
877 | 582px
878 | 583px
879 | 584px
880 | 584px
881 | 585px
882 | 586px
883 | 586px
884 | 587px
885 | 588px
886 | 588px
887 | 589px
888 | 590px
889 | 590px
890 | 591px
891 | 592px
892 | 592px
893 | 593px
894 | 594px
895 | 594px
896 | 595px
897 | 596px
898 | 596px
899 | 597px
900 | 598px
901 | 598px
902 | 599px
903 | 600px
904 | 600px
905 | 601px
906 | 602px
907 | 602px
908 | 603px
909 | 604px
910 | 604px
911 | 605px
912 | 606px
913 | 606px
914 | 607px
915 | 608px
916 | 608px
917 | 609px
918 | 610px
919 | 610px
920 | 611px
921 | 612px
922 | 612px
923 | 613px
924 | 614px
925 | 614px
926 | 615px
927 | 616px
928 | 616px
929 | 617px
930 | 618px
931 | 618px
932 | 619px
933 | 620px
934 | 620px
935 | 621px
936 | 622px
937 | 622px
938 | 623px
939 | 624px
940 | 624px
941 | 625px
942 | 626px
943 | 626px
944 | 627px
945 | 628px
946 | 628px
947 | 629px
948 | 630px
949 | 630px
950 | 631px
951 | 632px
952 | 632px
953 | 633px
954 | 634px
955 | 634px
956 | 635px
957 | 636px
958 | 636px
959 | 637px
960 | 638px
961 | 638px
962 | 639px
963 | 640px
964 | 640px
965 | 641px
966 | 642px
967 | 642px
968 | 643px
969 | 644px
970 | 644px
971 | 645px
972 | 646px
973 | 646px
974 | 647px
975 | 648px
976 | 648px
977 | 649px
978 | 650px
979 | 650px
980 | 651px
981 | 652px
982 | 652px
983 | 653px
984 | 654px
985 | 654px
986 | 655px
987 | 656px
988 | 656px
989 | 657px
990 | 658px
991 | 658px
992 | 659px
993 | 660px
994 | 660px
995 | 661px
996 | 662px
997 | 662px
998 | 663px
999 | 664px
1000 | 664px
1001 | 665px
1002 | 666px
1003 | 666px
1004 | 667px
1005 | 668px
1006 | 668px
1007 | 669px
1008 | 670px
1009 | 670px
1010 | 671px
1011 | 672px
1012 | 672px
1013 | 673px
1014 | 674px
1015 | 674px
1016 | 675px
1017 | 676px
1018 | 676px
1019 | 677px
1020 | 678px
1021 | 678px
1022 | 679px
1023 | 680px
1024 | 680px
1025 | 681px
1026 | 682px
1027 | 682px
1028 | 683px
1029 | 684px
1030 | 684px
1031 | 685px
1032 | 686px
1033 | 686px
1034 | 687px
1035 | 688px
1036 | 688px
1037 | 689px
1038 | 690px
1039 | 690px
1040 | 691px
1041 | 692px
1042 | 692px
1043 | 693px
1044 | 694px
1045 | 694px
1046 | 695px
1047 | 696px
1048 | 696px
1049 | 697px
1050 | 698px
1051 | 698px
1052 | 699px
1053 | 700px
1054 | 700px
1055 | 701px
1056 | 702px
1057 | 702px
1058 | 703px
1059 | 704px
1060 | 704px
1061 | 705px
1062 | 706px
1063 | 706px
1064 | 707px
1065 | 708px
1066 | 708px
1067 | 709px
1068 | 710px
1069 | 710px
1070 | 711px
1071 | 712px
1072 | 712px
1073 | 713px
1074 | 714px
1075 | 714px
1076 | 715px
1077 | 716px
1078 | 716px
1079 | 717px
1080 | 718px
1081 | 718px
1082 | 719px
1083 | 720px
1084 | 720px
1085 | 721px
1086 | 722px
1087 | 722px
1088 | 723px
1089 | 724px
1090 | 724px
1091 | 725px
1092 | 726px
1093 | 726px
1094 | 727px
1095 | 728px
1096 | 728px
1097 | 729px
1098 | 730px
1099 | 730px
1100 | 731px
1101 | 732px
1102 | 732px
1103 | 733px
1104 | 734px
1105 | 734px
1106 | 735px
1107 | 736px
1108 | 736px
1109 | 737px
1110 | 738px
1111 | 738px
1112 | 739px
1113 | 740px
1114 | 740px
1115 | 741px
1116 | 742px
1117 | 742px
1118 | 743px
1119 | 744px
1120 | 744px
1121 | 745px
1122 | 746px
1123 | 746px
1124 | 747px
1125 | 748px
1126 | 748px
1127 | 749px
1128 | 750px
1129 | 750px
1130 | 751px
1131 | 752px
1132 | 752px
1133 | 753px
1134 | 754px
1135 | 754px
1136 | 755px
1137 | 756px
1138 | 756px
1139 | 757px
1140 | 758px
1141 | 758px
1142 | 759px
1143 | 760px
1144 | 760px
1145 | 761px
1146 | 762px
1147 | 762px
1148 | 763px
1149 | 764px
1150 | 764px
1151 | 765px
1152 | 766px
1153 | 766px
1154 | 767px
1155 | 768px
1156 | 768px
1157 | 769px
1158 | 770px
1159 | 770px
1160 | 771px
1161 | 772px
1162 | 772px
1163 | 773px
1164 | 774px
1165 | 774px
1166 | 775px
1167 | 776px
1168 | 776px
1169 | 777px
1170 | 778px
1171 | 778px
1172 | 779px
1173 | 780px
1174 | 780px
1175 | 781px
1176 | 782px
1177 | 782px
1178 | 783px
1179 | 784px
1180 | 784px
1181 | 785px
1182 | 786px
1183 | 786px
1184 | 787px
1185 | 788px
1186 | 788px
1187 | 789px
1188 | 790px
1189 | 790px
1190 | 791px
1191 | 792px
1192 | 792px
1193 | 793px
1194 | 794px
1195 | 794px
1196 | 795px
1197 | 796px
1198 | 796px
1199 | 797px
1200 | 798px
1201 | 798px
1202 | 799px
1203 | 800px
1204 | 800px
1205 | 801px
1206 | 802px
1207 | 802px
1208 | 803px
1209 | 804px
1210 | 804px
1211 | 805px
1212 | 806px
1213 | 806px
1214 | 807px
1215 | 808px
1216 | 808px
1217 | 809px
1218 | 810px
1219 | 810px
1220 | 811px
1221 | 812px
1222 | 812px
1223 | 813px
1224 | 814px
1225 | 814px
1226 | 815px
1227 | 816px
1228 | 816px
1229 | 817px
1230 | 818px
1231 | 818px
1232 | 819px
1233 | 820px
1234 | 820px
1235 | 821px
1236 | 822px
1237 | 822px
1238 | 823px
1239 | 824px
1240 | 824px
1241 | 825px
1242 | 826px
1243 | 826px
1244 | 827px
1245 | 828px
1246 | 828px
1247 | 829px
1248 | 830px
1249 | 830px
1250 | 831px
1251 | 832px
1252 | 832px
1253 | 833px
1254 | 834px
1255 | 834px
1256 | 835px
1257 | 836px
1258 | 836px
1259 | 837px
1260 | 838px
1261 | 838px
1262 | 839px
1263 | 840px
1264 | 840px
1265 | 841px
1266 | 842px
1267 | 842px
1268 | 843px
1269 | 844px
1270 | 844px
1271 | 845px
1272 | 846px
1273 | 846px
1274 | 847px
1275 | 848px
1276 | 848px
1277 | 849px
1278 | 850px
1279 | 850px
1280 | 851px
1281 | 852px
1282 | 852px
1283 | 853px
1284 | 854px
1285 | 854px
1286 | 855px
1287 | 856px
1288 | 856px
1289 | 857px
1290 | 858px
1291 | 858px
1292 | 859px
1293 | 860px
1294 | 860px
1295 | 861px
1296 | 862px
1297 | 862px
1298 | 863px
1299 | 864px
1300 | 864px
1301 | 865px
1302 | 866px
1303 | 866px
1304 | 867px
1305 | 868px
1306 | 868px
1307 | 869px
1308 | 870px
1309 | 870px
1310 | 871px
1311 | 872px
1312 | 872px
1313 | 873px
1314 | 874px
1315 | 874px
1316 | 875px
1317 | 876px
1318 | 876px
1319 | 877px
1320 | 878px
1321 | 878px
1322 | 879px
1323 | 880px
1324 | 880px
1325 | 881px
1326 | 882px
1327 | 882px
1328 | 883px
1329 | 884px
1330 | 884px
1331 | 885px
1332 | 886px
1333 | 886px
1334 | 887px
1335 | 888px
1336 | 888px
1337 | 889px
1338 | 890px
1339 | 890px
1340 | 891px
1341 | 892px
1342 | 892px
1343 | 893px
1344 | 894px
1345 | 894px
1346 | 895px
1347 | 896px
1348 | 896px
1349 | 897px
1350 | 898px
1351 | 898px
1352 | 899px
1353 | 900px
1354 | 900px
1355 | 901px
1356 | 902px
1357 | 902px
1358 | 903px
1359 | 904px
1360 | 904px
1361 | 905px
1362 | 906px
1363 | 906px
1364 | 907px
1365 | 908px
1366 | 908px
1367 | 909px
1368 | 910px
1369 | 910px
1370 | 911px
1371 | 912px
1372 | 912px
1373 | 913px
1374 | 914px
1375 | 914px
1376 | 915px
1377 | 916px
1378 | 916px
1379 | 917px
1380 | 918px
1381 | 918px
1382 | 919px
1383 | 920px
1384 | 920px
1385 | 921px
1386 | 922px
1387 | 922px
1388 | 923px
1389 | 924px
1390 | 924px
1391 | 925px
1392 | 926px
1393 | 926px
1394 | 927px
1395 | 928px
1396 | 928px
1397 | 929px
1398 | 930px
1399 | 930px
1400 | 931px
1401 | 932px
1402 | 932px
1403 | 933px
1404 | 934px
1405 | 934px
1406 | 935px
1407 | 936px
1408 | 936px
1409 | 937px
1410 | 938px
1411 | 938px
1412 | 939px
1413 | 940px
1414 | 940px
1415 | 941px
1416 | 942px
1417 | 942px
1418 | 943px
1419 | 944px
1420 | 944px
1421 | 945px
1422 | 946px
1423 | 946px
1424 | 947px
1425 | 948px
1426 | 948px
1427 | 949px
1428 | 950px
1429 | 950px
1430 | 951px
1431 | 952px
1432 | 952px
1433 | 953px
1434 | 954px
1435 | 954px
1436 | 955px
1437 | 956px
1438 | 956px
1439 | 957px
1440 | 958px
1441 | 958px
1442 | 959px
1443 | 960px
1444 | 960px
1445 | 961px
1446 | 962px
1447 | 962px
1448 | 963px
1449 | 964px
1450 | 964px
1451 | 965px
1452 | 966px
1453 | 966px
1454 | 967px
1455 | 968px
1456 | 968px
1457 | 969px
1458 | 970px
1459 | 970px
1460 | 971px
1461 | 972px
1462 | 972px
1463 | 973px
1464 | 974px
1465 | 974px
1466 | 975px
1467 | 976px
1468 | 976px
1469 | 977px
1470 | 978px
1471 | 978px
1472 | 979px
1473 | 980px
1474 | 980px
1475 | 981px
1476 | 982px
1477 | 982px
1478 | 983px
1479 | 984px
1480 | 984px
1481 | 985px
1482 | 986px
1483 | 986px
1484 | 987px
1485 | 988px
1486 | 988px
1487 | 989px
1488 | 990px
1489 | 990px
1490 | 991px
1491 | 992px
1492 | 992px
1493 | 993px
1494 | 994px
1495 | 994px
1496 | 995px
1497 | 996px
1498 | 996px
1499 | 997px
1500 | 998px
1501 | 998px
1502 | 999px
1503 | 1000px
1504 | 1000px
1505 | 1001px
1506 | 1002px
1507 | 1002px
1508 | 1003px
1509 | 1004px
1510 | 1004px
1511 | 1005px
1512 | 1006px
1513 | 1006px
1514 | 1007px
1515 | 1008px
1516 | 1008px
1517 | 1009px
1518 | 1010px
1519 | 1010px
1520 | 1011px
1521 | 1012px
1522 | 1012px
1523 | 1013px
1524 | 1014px
1525 | 1014px
1526 | 1015px
1527 | 1016px
1528 | 1016px
1529 | 1017px
1530 | 1018px
1531 | 1018px
1532 | 1019px
1533 | 1020px
1534 | 1020px
1535 | 1021px
1536 | 1022px
1537 | 1022px
1538 | 1023px
1539 | 1024px
1540 | 1024px
1541 | 1025px
1542 | 1026px
1543 | 1026px
1544 | 1027px
1545 | 1028px
1546 | 1028px
1547 | 1029px
1548 | 1030px
1549 | 1030px
1550 | 1031px
1551 | 1032px
1552 | 1032px
1553 | 1033px
1554 | 1034px
1555 | 1034px
1556 | 1035px
1557 | 1036px
1558 | 1036px
1559 | 1037px
1560 | 1038px
1561 | 1038px
1562 | 1039px
1563 | 1040px
1564 | 1040px
1565 | 1041px
1566 | 1042px
1567 | 1042px
1568 | 1043px
1569 | 1044px
1570 | 1044px
1571 | 1045px
1572 | 1046px
1573 | 1046px
1574 | 1047px
1575 | 1048px
1576 | 1048px
1577 | 1049px
1578 | 1050px
1579 | 1050px
1580 | 1051px
1581 | 1052px
1582 | 1052px
1583 | 1053px
1584 | 1054px
1585 | 1054px
1586 | 1055px
1587 | 1056px
1588 | 1056px
1589 | 1057px
1590 | 1058px
1591 | 1058px
1592 | 1059px
1593 | 1060px
1594 | 1060px
1595 | 1061px
1596 | 1062px
1597 | 1062px
1598 | 1063px
1599 | 1064px
1600 | 1064px
1601 | 1065px
1602 | 1066px
1603 | 1066px
1604 | 1067px
1605 | 1068px
1606 | 1068px
1607 | 1069px
1608 | 1070px
1609 | 1070px
1610 | 1071px
1611 | 1072px
1612 | 1072px
1613 | 1073px
1614 | 1074px
1615 | 1074px
1616 | 1075px
1617 | 1076px
1618 | 1076px
1619 | 1077px
1620 | 1078px
1621 | 1078px
1622 | 1079px
1623 | 1080px
1624 | 1080px
1625 | 1081px
1626 | 1082px
1627 | 1082px
1628 | 1083px
1629 | 1084px
1630 | 1084px
1631 | 1085px
1632 | 1086px
1633 | 1086px
1634 | 1087px
1635 | 1088px
1636 | 1088px
1637 | 1089px
1638 | 1090px
1639 | 1090px
1640 | 1091px
1641 | 1092px
1642 | 1092px
1643 | 1093px
1644 | 1094px
1645 | 1094px
1646 | 1095px
1647 | 1096px
1648 | 1096px
1649 | 1097px
1650 | 1098px
1651 | 1098px
1652 | 1099px
1653 | 1100px
1654 | 1100px
1655 | 1101px
1656 | 1102px
1657 | 1102px
1658 | 1103px
1659 | 1104px
1660 | 1104px
1661 | 1105px
1662 | 1106px
1663 | 1106px
1664 | 1107px
1665 | 1108px
1666 | 1108px
1667 | 1109px
1668 | 1110px
1669 | 1110px
1670 | 1111px
1671 | 1112px
1672 | 1112px
1673 | 1113px
1674 | 1114px
1675 | 1114px
1676 | 1115px
1677 | 1116px
1678 | 1116px
1679 | 1117px
1680 | 1118px
1681 | 1118px
1682 | 1119px
1683 | 1120px
1684 | 1120px
1685 | 1121px
1686 | 1122px
1687 | 1122px
1688 | 1123px
1689 | 1124px
1690 | 1124px
1691 | 1125px
1692 | 1126px
1693 | 1126px
1694 | 1127px
1695 | 1128px
1696 | 1128px
1697 | 1129px
1698 | 1130px
1699 | 1130px
1700 | 1131px
1701 | 1132px
1702 | 1132px
1703 | 1133px
1704 | 1134px
1705 | 1134px
1706 | 1135px
1707 | 1136px
1708 | 1136px
1709 | 1137px
1710 | 1138px
1711 | 1138px
1712 | 1139px
1713 | 1140px
1714 | 1140px
1715 | 1141px
1716 | 1142px
1717 | 1142px
1718 | 1143px
1719 | 1144px
1720 | 1144px
1721 | 1145px
1722 | 1146px
1723 | 1146px
1724 | 1147px
1725 | 1148px
1726 | 1148px
1727 | 1149px
1728 | 1150px
1729 | 1150px
1730 | 1151px
1731 | 1152px
1732 | 1152px
1733 | 1153px
1734 | 1154px
1735 | 1154px
1736 | 1155px
1737 | 1156px
1738 | 1156px
1739 | 1157px
1740 | 1158px
1741 | 1158px
1742 | 1159px
1743 | 1160px
1744 | 1160px
1745 | 1161px
1746 | 1162px
1747 | 1162px
1748 | 1163px
1749 | 1164px
1750 | 1164px
1751 | 1165px
1752 | 1166px
1753 | 1166px
1754 | 1167px
1755 | 1168px
1756 | 1168px
1757 | 1169px
1758 | 1170px
1759 | 1170px
1760 | 1171px
1761 | 1172px
1762 | 1172px
1763 | 1173px
1764 | 1174px
1765 | 1174px
1766 | 1175px
1767 | 1176px
1768 | 1176px
1769 | 1177px
1770 | 1178px
1771 | 1178px
1772 | 1179px
1773 | 1180px
1774 | 1180px
1775 | 1181px
1776 | 1182px
1777 | 1182px
1778 | 1183px
1779 | 1184px
1780 | 1184px
1781 | 1185px
1782 | 1186px
1783 | 1186px
1784 | 1187px
1785 | 1188px
1786 | 1188px
1787 | 1189px
1788 | 1190px
1789 | 1190px
1790 | 1191px
1791 | 1192px
1792 | 1192px
1793 | 1193px
1794 | 1194px
1795 | 1194px
1796 | 1195px
1797 | 1196px
1798 | 1196px
1799 | 1197px
1800 | 1198px
1801 | 1198px
1802 | 1199px
1803 | 1200px
1804 | 1200px
1805 | 1201px
1806 | 1202px
1807 | 1202px
1808 | 1203px
1809 | 1204px
1810 | 1204px
1811 | 1205px
1812 | 1206px
1813 | 1206px
1814 | 1207px
1815 | 1208px
1816 | 1208px
1817 | 1209px
1818 | 1210px
1819 | 1210px
1820 | 1211px
1821 | 1212px
1822 | 1212px
1823 | 1213px
1824 | 1214px
1825 | 1214px
1826 | 1215px
1827 | 1216px
1828 | 1216px
1829 | 1217px
1830 | 1218px
1831 | 1218px
1832 | 1219px
1833 | 1220px
1834 | 1220px
1835 | 1221px
1836 | 1222px
1837 | 1222px
1838 | 1223px
1839 | 1224px
1840 | 1224px
1841 | 1225px
1842 | 1226px
1843 | 1226px
1844 | 1227px
1845 | 1228px
1846 | 1228px
1847 | 1229px
1848 | 1230px
1849 | 1230px
1850 | 1231px
1851 | 1232px
1852 | 1232px
1853 | 1233px
1854 | 1234px
1855 | 1234px
1856 | 1235px
1857 | 1236px
1858 | 1236px
1859 | 1237px
1860 | 1238px
1861 | 1238px
1862 | 1239px
1863 | 1240px
1864 | 1240px
1865 | 1241px
1866 | 1242px
1867 | 1242px
1868 | 1243px
1869 | 1244px
1870 | 1244px
1871 | 1245px
1872 | 1246px
1873 | 1246px
1874 | 1247px
1875 | 1248px
1876 | 1248px
1877 | 1249px
1878 | 1250px
1879 | 1250px
1880 | 1251px
1881 | 1252px
1882 | 1252px
1883 | 1253px
1884 | 1254px
1885 | 1254px
1886 | 1255px
1887 | 1256px
1888 | 1256px
1889 | 1257px
1890 | 1258px
1891 | 1258px
1892 | 1259px
1893 | 1260px
1894 | 1260px
1895 | 1261px
1896 | 1262px
1897 | 1262px
1898 | 1263px
1899 | 1264px
1900 | 1264px
1901 | 1265px
1902 | 1266px
1903 | 1266px
1904 | 1267px
1905 | 1268px
1906 | 1268px
1907 | 1269px
1908 | 1270px
1909 | 1270px
1910 | 1271px
1911 | 1272px
1912 | 1272px
1913 | 1273px
1914 | 1274px
1915 | 1274px
1916 | 1275px
1917 | 1276px
1918 | 1276px
1919 | 1277px
1920 | 1278px
1921 | 1278px
1922 | 1279px
1923 | 1280px
1924 |
1925 |
--------------------------------------------------------------------------------
/app/src/main/res/values-1280x720/dimens.xml:
--------------------------------------------------------------------------------
1 |
2 | 1280px
3 | 720px
4 | 0px
5 | 1px
6 | 2px
7 | 2px
8 | 3px
9 | 4px
10 | 4px
11 | 5px
12 | 6px
13 | 6px
14 | 7px
15 | 8px
16 | 8px
17 | 9px
18 | 10px
19 | 10px
20 | 11px
21 | 12px
22 | 12px
23 | 13px
24 | 14px
25 | 14px
26 | 15px
27 | 16px
28 | 16px
29 | 17px
30 | 18px
31 | 18px
32 | 19px
33 | 20px
34 | 20px
35 | 21px
36 | 22px
37 | 22px
38 | 23px
39 | 24px
40 | 24px
41 | 25px
42 | 26px
43 | 26px
44 | 27px
45 | 28px
46 | 28px
47 | 29px
48 | 30px
49 | 30px
50 | 31px
51 | 32px
52 | 32px
53 | 33px
54 | 34px
55 | 34px
56 | 35px
57 | 36px
58 | 36px
59 | 37px
60 | 38px
61 | 38px
62 | 39px
63 | 40px
64 | 40px
65 | 41px
66 | 42px
67 | 42px
68 | 43px
69 | 44px
70 | 44px
71 | 45px
72 | 46px
73 | 46px
74 | 47px
75 | 48px
76 | 48px
77 | 49px
78 | 50px
79 | 50px
80 | 51px
81 | 52px
82 | 52px
83 | 53px
84 | 54px
85 | 54px
86 | 55px
87 | 56px
88 | 56px
89 | 57px
90 | 58px
91 | 58px
92 | 59px
93 | 60px
94 | 60px
95 | 61px
96 | 62px
97 | 62px
98 | 63px
99 | 64px
100 | 64px
101 | 65px
102 | 66px
103 | 66px
104 | 67px
105 | 68px
106 | 68px
107 | 69px
108 | 70px
109 | 70px
110 | 71px
111 | 72px
112 | 72px
113 | 73px
114 | 74px
115 | 74px
116 | 75px
117 | 76px
118 | 76px
119 | 77px
120 | 78px
121 | 78px
122 | 79px
123 | 80px
124 | 80px
125 | 81px
126 | 82px
127 | 82px
128 | 83px
129 | 84px
130 | 84px
131 | 85px
132 | 86px
133 | 86px
134 | 87px
135 | 88px
136 | 88px
137 | 89px
138 | 90px
139 | 90px
140 | 91px
141 | 92px
142 | 92px
143 | 93px
144 | 94px
145 | 94px
146 | 95px
147 | 96px
148 | 96px
149 | 97px
150 | 98px
151 | 98px
152 | 99px
153 | 100px
154 | 100px
155 | 101px
156 | 102px
157 | 102px
158 | 103px
159 | 104px
160 | 104px
161 | 105px
162 | 106px
163 | 106px
164 | 107px
165 | 108px
166 | 108px
167 | 109px
168 | 110px
169 | 110px
170 | 111px
171 | 112px
172 | 112px
173 | 113px
174 | 114px
175 | 114px
176 | 115px
177 | 116px
178 | 116px
179 | 117px
180 | 118px
181 | 118px
182 | 119px
183 | 120px
184 | 120px
185 | 121px
186 | 122px
187 | 122px
188 | 123px
189 | 124px
190 | 124px
191 | 125px
192 | 126px
193 | 126px
194 | 127px
195 | 128px
196 | 128px
197 | 129px
198 | 130px
199 | 130px
200 | 131px
201 | 132px
202 | 132px
203 | 133px
204 | 134px
205 | 134px
206 | 135px
207 | 136px
208 | 136px
209 | 137px
210 | 138px
211 | 138px
212 | 139px
213 | 140px
214 | 140px
215 | 141px
216 | 142px
217 | 142px
218 | 143px
219 | 144px
220 | 144px
221 | 145px
222 | 146px
223 | 146px
224 | 147px
225 | 148px
226 | 148px
227 | 149px
228 | 150px
229 | 150px
230 | 151px
231 | 152px
232 | 152px
233 | 153px
234 | 154px
235 | 154px
236 | 155px
237 | 156px
238 | 156px
239 | 157px
240 | 158px
241 | 158px
242 | 159px
243 | 160px
244 | 160px
245 | 161px
246 | 162px
247 | 162px
248 | 163px
249 | 164px
250 | 164px
251 | 165px
252 | 166px
253 | 166px
254 | 167px
255 | 168px
256 | 168px
257 | 169px
258 | 170px
259 | 170px
260 | 171px
261 | 172px
262 | 172px
263 | 173px
264 | 174px
265 | 174px
266 | 175px
267 | 176px
268 | 176px
269 | 177px
270 | 178px
271 | 178px
272 | 179px
273 | 180px
274 | 180px
275 | 181px
276 | 182px
277 | 182px
278 | 183px
279 | 184px
280 | 184px
281 | 185px
282 | 186px
283 | 186px
284 | 187px
285 | 188px
286 | 188px
287 | 189px
288 | 190px
289 | 190px
290 | 191px
291 | 192px
292 | 192px
293 | 193px
294 | 194px
295 | 194px
296 | 195px
297 | 196px
298 | 196px
299 | 197px
300 | 198px
301 | 198px
302 | 199px
303 | 200px
304 | 200px
305 | 201px
306 | 202px
307 | 202px
308 | 203px
309 | 204px
310 | 204px
311 | 205px
312 | 206px
313 | 206px
314 | 207px
315 | 208px
316 | 208px
317 | 209px
318 | 210px
319 | 210px
320 | 211px
321 | 212px
322 | 212px
323 | 213px
324 | 214px
325 | 214px
326 | 215px
327 | 216px
328 | 216px
329 | 217px
330 | 218px
331 | 218px
332 | 219px
333 | 220px
334 | 220px
335 | 221px
336 | 222px
337 | 222px
338 | 223px
339 | 224px
340 | 224px
341 | 225px
342 | 226px
343 | 226px
344 | 227px
345 | 228px
346 | 228px
347 | 229px
348 | 230px
349 | 230px
350 | 231px
351 | 232px
352 | 232px
353 | 233px
354 | 234px
355 | 234px
356 | 235px
357 | 236px
358 | 236px
359 | 237px
360 | 238px
361 | 238px
362 | 239px
363 | 240px
364 | 240px
365 | 241px
366 | 242px
367 | 242px
368 | 243px
369 | 244px
370 | 244px
371 | 245px
372 | 246px
373 | 246px
374 | 247px
375 | 248px
376 | 248px
377 | 249px
378 | 250px
379 | 250px
380 | 251px
381 | 252px
382 | 252px
383 | 253px
384 | 254px
385 | 254px
386 | 255px
387 | 256px
388 | 256px
389 | 257px
390 | 258px
391 | 258px
392 | 259px
393 | 260px
394 | 260px
395 | 261px
396 | 262px
397 | 262px
398 | 263px
399 | 264px
400 | 264px
401 | 265px
402 | 266px
403 | 266px
404 | 267px
405 | 268px
406 | 268px
407 | 269px
408 | 270px
409 | 270px
410 | 271px
411 | 272px
412 | 272px
413 | 273px
414 | 274px
415 | 274px
416 | 275px
417 | 276px
418 | 276px
419 | 277px
420 | 278px
421 | 278px
422 | 279px
423 | 280px
424 | 280px
425 | 281px
426 | 282px
427 | 282px
428 | 283px
429 | 284px
430 | 284px
431 | 285px
432 | 286px
433 | 286px
434 | 287px
435 | 288px
436 | 288px
437 | 289px
438 | 290px
439 | 290px
440 | 291px
441 | 292px
442 | 292px
443 | 293px
444 | 294px
445 | 294px
446 | 295px
447 | 296px
448 | 296px
449 | 297px
450 | 298px
451 | 298px
452 | 299px
453 | 300px
454 | 300px
455 | 301px
456 | 302px
457 | 302px
458 | 303px
459 | 304px
460 | 304px
461 | 305px
462 | 306px
463 | 306px
464 | 307px
465 | 308px
466 | 308px
467 | 309px
468 | 310px
469 | 310px
470 | 311px
471 | 312px
472 | 312px
473 | 313px
474 | 314px
475 | 314px
476 | 315px
477 | 316px
478 | 316px
479 | 317px
480 | 318px
481 | 318px
482 | 319px
483 | 320px
484 | 320px
485 | 321px
486 | 322px
487 | 322px
488 | 323px
489 | 324px
490 | 324px
491 | 325px
492 | 326px
493 | 326px
494 | 327px
495 | 328px
496 | 328px
497 | 329px
498 | 330px
499 | 330px
500 | 331px
501 | 332px
502 | 332px
503 | 333px
504 | 334px
505 | 334px
506 | 335px
507 | 336px
508 | 336px
509 | 337px
510 | 338px
511 | 338px
512 | 339px
513 | 340px
514 | 340px
515 | 341px
516 | 342px
517 | 342px
518 | 343px
519 | 344px
520 | 344px
521 | 345px
522 | 346px
523 | 346px
524 | 347px
525 | 348px
526 | 348px
527 | 349px
528 | 350px
529 | 350px
530 | 351px
531 | 352px
532 | 352px
533 | 353px
534 | 354px
535 | 354px
536 | 355px
537 | 356px
538 | 356px
539 | 357px
540 | 358px
541 | 358px
542 | 359px
543 | 360px
544 | 360px
545 | 361px
546 | 362px
547 | 362px
548 | 363px
549 | 364px
550 | 364px
551 | 365px
552 | 366px
553 | 366px
554 | 367px
555 | 368px
556 | 368px
557 | 369px
558 | 370px
559 | 370px
560 | 371px
561 | 372px
562 | 372px
563 | 373px
564 | 374px
565 | 374px
566 | 375px
567 | 376px
568 | 376px
569 | 377px
570 | 378px
571 | 378px
572 | 379px
573 | 380px
574 | 380px
575 | 381px
576 | 382px
577 | 382px
578 | 383px
579 | 384px
580 | 384px
581 | 385px
582 | 386px
583 | 386px
584 | 387px
585 | 388px
586 | 388px
587 | 389px
588 | 390px
589 | 390px
590 | 391px
591 | 392px
592 | 392px
593 | 393px
594 | 394px
595 | 394px
596 | 395px
597 | 396px
598 | 396px
599 | 397px
600 | 398px
601 | 398px
602 | 399px
603 | 400px
604 | 400px
605 | 401px
606 | 402px
607 | 402px
608 | 403px
609 | 404px
610 | 404px
611 | 405px
612 | 406px
613 | 406px
614 | 407px
615 | 408px
616 | 408px
617 | 409px
618 | 410px
619 | 410px
620 | 411px
621 | 412px
622 | 412px
623 | 413px
624 | 414px
625 | 414px
626 | 415px
627 | 416px
628 | 416px
629 | 417px
630 | 418px
631 | 418px
632 | 419px
633 | 420px
634 | 420px
635 | 421px
636 | 422px
637 | 422px
638 | 423px
639 | 424px
640 | 424px
641 | 425px
642 | 426px
643 | 426px
644 | 427px
645 | 428px
646 | 428px
647 | 429px
648 | 430px
649 | 430px
650 | 431px
651 | 432px
652 | 432px
653 | 433px
654 | 434px
655 | 434px
656 | 435px
657 | 436px
658 | 436px
659 | 437px
660 | 438px
661 | 438px
662 | 439px
663 | 440px
664 | 440px
665 | 441px
666 | 442px
667 | 442px
668 | 443px
669 | 444px
670 | 444px
671 | 445px
672 | 446px
673 | 446px
674 | 447px
675 | 448px
676 | 448px
677 | 449px
678 | 450px
679 | 450px
680 | 451px
681 | 452px
682 | 452px
683 | 453px
684 | 454px
685 | 454px
686 | 455px
687 | 456px
688 | 456px
689 | 457px
690 | 458px
691 | 458px
692 | 459px
693 | 460px
694 | 460px
695 | 461px
696 | 462px
697 | 462px
698 | 463px
699 | 464px
700 | 464px
701 | 465px
702 | 466px
703 | 466px
704 | 467px
705 | 468px
706 | 468px
707 | 469px
708 | 470px
709 | 470px
710 | 471px
711 | 472px
712 | 472px
713 | 473px
714 | 474px
715 | 474px
716 | 475px
717 | 476px
718 | 476px
719 | 477px
720 | 478px
721 | 478px
722 | 479px
723 | 480px
724 | 480px
725 | 481px
726 | 482px
727 | 482px
728 | 483px
729 | 484px
730 | 484px
731 | 485px
732 | 486px
733 | 486px
734 | 487px
735 | 488px
736 | 488px
737 | 489px
738 | 490px
739 | 490px
740 | 491px
741 | 492px
742 | 492px
743 | 493px
744 | 494px
745 | 494px
746 | 495px
747 | 496px
748 | 496px
749 | 497px
750 | 498px
751 | 498px
752 | 499px
753 | 500px
754 | 500px
755 | 501px
756 | 502px
757 | 502px
758 | 503px
759 | 504px
760 | 504px
761 | 505px
762 | 506px
763 | 506px
764 | 507px
765 | 508px
766 | 508px
767 | 509px
768 | 510px
769 | 510px
770 | 511px
771 | 512px
772 | 512px
773 | 513px
774 | 514px
775 | 514px
776 | 515px
777 | 516px
778 | 516px
779 | 517px
780 | 518px
781 | 518px
782 | 519px
783 | 520px
784 | 520px
785 | 521px
786 | 522px
787 | 522px
788 | 523px
789 | 524px
790 | 524px
791 | 525px
792 | 526px
793 | 526px
794 | 527px
795 | 528px
796 | 528px
797 | 529px
798 | 530px
799 | 530px
800 | 531px
801 | 532px
802 | 532px
803 | 533px
804 | 534px
805 | 534px
806 | 535px
807 | 536px
808 | 536px
809 | 537px
810 | 538px
811 | 538px
812 | 539px
813 | 540px
814 | 540px
815 | 541px
816 | 542px
817 | 542px
818 | 543px
819 | 544px
820 | 544px
821 | 545px
822 | 546px
823 | 546px
824 | 547px
825 | 548px
826 | 548px
827 | 549px
828 | 550px
829 | 550px
830 | 551px
831 | 552px
832 | 552px
833 | 553px
834 | 554px
835 | 554px
836 | 555px
837 | 556px
838 | 556px
839 | 557px
840 | 558px
841 | 558px
842 | 559px
843 | 560px
844 | 560px
845 | 561px
846 | 562px
847 | 562px
848 | 563px
849 | 564px
850 | 564px
851 | 565px
852 | 566px
853 | 566px
854 | 567px
855 | 568px
856 | 568px
857 | 569px
858 | 570px
859 | 570px
860 | 571px
861 | 572px
862 | 572px
863 | 573px
864 | 574px
865 | 574px
866 | 575px
867 | 576px
868 | 576px
869 | 577px
870 | 578px
871 | 578px
872 | 579px
873 | 580px
874 | 580px
875 | 581px
876 | 582px
877 | 582px
878 | 583px
879 | 584px
880 | 584px
881 | 585px
882 | 586px
883 | 586px
884 | 587px
885 | 588px
886 | 588px
887 | 589px
888 | 590px
889 | 590px
890 | 591px
891 | 592px
892 | 592px
893 | 593px
894 | 594px
895 | 594px
896 | 595px
897 | 596px
898 | 596px
899 | 597px
900 | 598px
901 | 598px
902 | 599px
903 | 600px
904 | 600px
905 | 601px
906 | 602px
907 | 602px
908 | 603px
909 | 604px
910 | 604px
911 | 605px
912 | 606px
913 | 606px
914 | 607px
915 | 608px
916 | 608px
917 | 609px
918 | 610px
919 | 610px
920 | 611px
921 | 612px
922 | 612px
923 | 613px
924 | 614px
925 | 614px
926 | 615px
927 | 616px
928 | 616px
929 | 617px
930 | 618px
931 | 618px
932 | 619px
933 | 620px
934 | 620px
935 | 621px
936 | 622px
937 | 622px
938 | 623px
939 | 624px
940 | 624px
941 | 625px
942 | 626px
943 | 626px
944 | 627px
945 | 628px
946 | 628px
947 | 629px
948 | 630px
949 | 630px
950 | 631px
951 | 632px
952 | 632px
953 | 633px
954 | 634px
955 | 634px
956 | 635px
957 | 636px
958 | 636px
959 | 637px
960 | 638px
961 | 638px
962 | 639px
963 | 640px
964 | 640px
965 | 641px
966 | 642px
967 | 642px
968 | 643px
969 | 644px
970 | 644px
971 | 645px
972 | 646px
973 | 646px
974 | 647px
975 | 648px
976 | 648px
977 | 649px
978 | 650px
979 | 650px
980 | 651px
981 | 652px
982 | 652px
983 | 653px
984 | 654px
985 | 654px
986 | 655px
987 | 656px
988 | 656px
989 | 657px
990 | 658px
991 | 658px
992 | 659px
993 | 660px
994 | 660px
995 | 661px
996 | 662px
997 | 662px
998 | 663px
999 | 664px
1000 | 664px
1001 | 665px
1002 | 666px
1003 | 666px
1004 | 667px
1005 | 668px
1006 | 668px
1007 | 669px
1008 | 670px
1009 | 670px
1010 | 671px
1011 | 672px
1012 | 672px
1013 | 673px
1014 | 674px
1015 | 674px
1016 | 675px
1017 | 676px
1018 | 676px
1019 | 677px
1020 | 678px
1021 | 678px
1022 | 679px
1023 | 680px
1024 | 680px
1025 | 681px
1026 | 682px
1027 | 682px
1028 | 683px
1029 | 684px
1030 | 684px
1031 | 685px
1032 | 686px
1033 | 686px
1034 | 687px
1035 | 688px
1036 | 688px
1037 | 689px
1038 | 690px
1039 | 690px
1040 | 691px
1041 | 692px
1042 | 692px
1043 | 693px
1044 | 694px
1045 | 694px
1046 | 695px
1047 | 696px
1048 | 696px
1049 | 697px
1050 | 698px
1051 | 698px
1052 | 699px
1053 | 700px
1054 | 700px
1055 | 701px
1056 | 702px
1057 | 702px
1058 | 703px
1059 | 704px
1060 | 704px
1061 | 705px
1062 | 706px
1063 | 706px
1064 | 707px
1065 | 708px
1066 | 708px
1067 | 709px
1068 | 710px
1069 | 710px
1070 | 711px
1071 | 712px
1072 | 712px
1073 | 713px
1074 | 714px
1075 | 714px
1076 | 715px
1077 | 716px
1078 | 716px
1079 | 717px
1080 | 718px
1081 | 718px
1082 | 719px
1083 | 720px
1084 | 720px
1085 | 721px
1086 | 722px
1087 | 722px
1088 | 723px
1089 | 724px
1090 | 724px
1091 | 725px
1092 | 726px
1093 | 726px
1094 | 727px
1095 | 728px
1096 | 728px
1097 | 729px
1098 | 730px
1099 | 730px
1100 | 731px
1101 | 732px
1102 | 732px
1103 | 733px
1104 | 734px
1105 | 734px
1106 | 735px
1107 | 736px
1108 | 736px
1109 | 737px
1110 | 738px
1111 | 738px
1112 | 739px
1113 | 740px
1114 | 740px
1115 | 741px
1116 | 742px
1117 | 742px
1118 | 743px
1119 | 744px
1120 | 744px
1121 | 745px
1122 | 746px
1123 | 746px
1124 | 747px
1125 | 748px
1126 | 748px
1127 | 749px
1128 | 750px
1129 | 750px
1130 | 751px
1131 | 752px
1132 | 752px
1133 | 753px
1134 | 754px
1135 | 754px
1136 | 755px
1137 | 756px
1138 | 756px
1139 | 757px
1140 | 758px
1141 | 758px
1142 | 759px
1143 | 760px
1144 | 760px
1145 | 761px
1146 | 762px
1147 | 762px
1148 | 763px
1149 | 764px
1150 | 764px
1151 | 765px
1152 | 766px
1153 | 766px
1154 | 767px
1155 | 768px
1156 | 768px
1157 | 769px
1158 | 770px
1159 | 770px
1160 | 771px
1161 | 772px
1162 | 772px
1163 | 773px
1164 | 774px
1165 | 774px
1166 | 775px
1167 | 776px
1168 | 776px
1169 | 777px
1170 | 778px
1171 | 778px
1172 | 779px
1173 | 780px
1174 | 780px
1175 | 781px
1176 | 782px
1177 | 782px
1178 | 783px
1179 | 784px
1180 | 784px
1181 | 785px
1182 | 786px
1183 | 786px
1184 | 787px
1185 | 788px
1186 | 788px
1187 | 789px
1188 | 790px
1189 | 790px
1190 | 791px
1191 | 792px
1192 | 792px
1193 | 793px
1194 | 794px
1195 | 794px
1196 | 795px
1197 | 796px
1198 | 796px
1199 | 797px
1200 | 798px
1201 | 798px
1202 | 799px
1203 | 800px
1204 | 800px
1205 | 801px
1206 | 802px
1207 | 802px
1208 | 803px
1209 | 804px
1210 | 804px
1211 | 805px
1212 | 806px
1213 | 806px
1214 | 807px
1215 | 808px
1216 | 808px
1217 | 809px
1218 | 810px
1219 | 810px
1220 | 811px
1221 | 812px
1222 | 812px
1223 | 813px
1224 | 814px
1225 | 814px
1226 | 815px
1227 | 816px
1228 | 816px
1229 | 817px
1230 | 818px
1231 | 818px
1232 | 819px
1233 | 820px
1234 | 820px
1235 | 821px
1236 | 822px
1237 | 822px
1238 | 823px
1239 | 824px
1240 | 824px
1241 | 825px
1242 | 826px
1243 | 826px
1244 | 827px
1245 | 828px
1246 | 828px
1247 | 829px
1248 | 830px
1249 | 830px
1250 | 831px
1251 | 832px
1252 | 832px
1253 | 833px
1254 | 834px
1255 | 834px
1256 | 835px
1257 | 836px
1258 | 836px
1259 | 837px
1260 | 838px
1261 | 838px
1262 | 839px
1263 | 840px
1264 | 840px
1265 | 841px
1266 | 842px
1267 | 842px
1268 | 843px
1269 | 844px
1270 | 844px
1271 | 845px
1272 | 846px
1273 | 846px
1274 | 847px
1275 | 848px
1276 | 848px
1277 | 849px
1278 | 850px
1279 | 850px
1280 | 851px
1281 | 852px
1282 | 852px
1283 | 853px
1284 | 854px
1285 | 854px
1286 | 855px
1287 | 856px
1288 | 856px
1289 | 857px
1290 | 858px
1291 | 858px
1292 | 859px
1293 | 860px
1294 | 860px
1295 | 861px
1296 | 862px
1297 | 862px
1298 | 863px
1299 | 864px
1300 | 864px
1301 | 865px
1302 | 866px
1303 | 866px
1304 | 867px
1305 | 868px
1306 | 868px
1307 | 869px
1308 | 870px
1309 | 870px
1310 | 871px
1311 | 872px
1312 | 872px
1313 | 873px
1314 | 874px
1315 | 874px
1316 | 875px
1317 | 876px
1318 | 876px
1319 | 877px
1320 | 878px
1321 | 878px
1322 | 879px
1323 | 880px
1324 | 880px
1325 | 881px
1326 | 882px
1327 | 882px
1328 | 883px
1329 | 884px
1330 | 884px
1331 | 885px
1332 | 886px
1333 | 886px
1334 | 887px
1335 | 888px
1336 | 888px
1337 | 889px
1338 | 890px
1339 | 890px
1340 | 891px
1341 | 892px
1342 | 892px
1343 | 893px
1344 | 894px
1345 | 894px
1346 | 895px
1347 | 896px
1348 | 896px
1349 | 897px
1350 | 898px
1351 | 898px
1352 | 899px
1353 | 900px
1354 | 900px
1355 | 901px
1356 | 902px
1357 | 902px
1358 | 903px
1359 | 904px
1360 | 904px
1361 | 905px
1362 | 906px
1363 | 906px
1364 | 907px
1365 | 908px
1366 | 908px
1367 | 909px
1368 | 910px
1369 | 910px
1370 | 911px
1371 | 912px
1372 | 912px
1373 | 913px
1374 | 914px
1375 | 914px
1376 | 915px
1377 | 916px
1378 | 916px
1379 | 917px
1380 | 918px
1381 | 918px
1382 | 919px
1383 | 920px
1384 | 920px
1385 | 921px
1386 | 922px
1387 | 922px
1388 | 923px
1389 | 924px
1390 | 924px
1391 | 925px
1392 | 926px
1393 | 926px
1394 | 927px
1395 | 928px
1396 | 928px
1397 | 929px
1398 | 930px
1399 | 930px
1400 | 931px
1401 | 932px
1402 | 932px
1403 | 933px
1404 | 934px
1405 | 934px
1406 | 935px
1407 | 936px
1408 | 936px
1409 | 937px
1410 | 938px
1411 | 938px
1412 | 939px
1413 | 940px
1414 | 940px
1415 | 941px
1416 | 942px
1417 | 942px
1418 | 943px
1419 | 944px
1420 | 944px
1421 | 945px
1422 | 946px
1423 | 946px
1424 | 947px
1425 | 948px
1426 | 948px
1427 | 949px
1428 | 950px
1429 | 950px
1430 | 951px
1431 | 952px
1432 | 952px
1433 | 953px
1434 | 954px
1435 | 954px
1436 | 955px
1437 | 956px
1438 | 956px
1439 | 957px
1440 | 958px
1441 | 958px
1442 | 959px
1443 | 960px
1444 | 960px
1445 | 961px
1446 | 962px
1447 | 962px
1448 | 963px
1449 | 964px
1450 | 964px
1451 | 965px
1452 | 966px
1453 | 966px
1454 | 967px
1455 | 968px
1456 | 968px
1457 | 969px
1458 | 970px
1459 | 970px
1460 | 971px
1461 | 972px
1462 | 972px
1463 | 973px
1464 | 974px
1465 | 974px
1466 | 975px
1467 | 976px
1468 | 976px
1469 | 977px
1470 | 978px
1471 | 978px
1472 | 979px
1473 | 980px
1474 | 980px
1475 | 981px
1476 | 982px
1477 | 982px
1478 | 983px
1479 | 984px
1480 | 984px
1481 | 985px
1482 | 986px
1483 | 986px
1484 | 987px
1485 | 988px
1486 | 988px
1487 | 989px
1488 | 990px
1489 | 990px
1490 | 991px
1491 | 992px
1492 | 992px
1493 | 993px
1494 | 994px
1495 | 994px
1496 | 995px
1497 | 996px
1498 | 996px
1499 | 997px
1500 | 998px
1501 | 998px
1502 | 999px
1503 | 1000px
1504 | 1000px
1505 | 1001px
1506 | 1002px
1507 | 1002px
1508 | 1003px
1509 | 1004px
1510 | 1004px
1511 | 1005px
1512 | 1006px
1513 | 1006px
1514 | 1007px
1515 | 1008px
1516 | 1008px
1517 | 1009px
1518 | 1010px
1519 | 1010px
1520 | 1011px
1521 | 1012px
1522 | 1012px
1523 | 1013px
1524 | 1014px
1525 | 1014px
1526 | 1015px
1527 | 1016px
1528 | 1016px
1529 | 1017px
1530 | 1018px
1531 | 1018px
1532 | 1019px
1533 | 1020px
1534 | 1020px
1535 | 1021px
1536 | 1022px
1537 | 1022px
1538 | 1023px
1539 | 1024px
1540 | 1024px
1541 | 1025px
1542 | 1026px
1543 | 1026px
1544 | 1027px
1545 | 1028px
1546 | 1028px
1547 | 1029px
1548 | 1030px
1549 | 1030px
1550 | 1031px
1551 | 1032px
1552 | 1032px
1553 | 1033px
1554 | 1034px
1555 | 1034px
1556 | 1035px
1557 | 1036px
1558 | 1036px
1559 | 1037px
1560 | 1038px
1561 | 1038px
1562 | 1039px
1563 | 1040px
1564 | 1040px
1565 | 1041px
1566 | 1042px
1567 | 1042px
1568 | 1043px
1569 | 1044px
1570 | 1044px
1571 | 1045px
1572 | 1046px
1573 | 1046px
1574 | 1047px
1575 | 1048px
1576 | 1048px
1577 | 1049px
1578 | 1050px
1579 | 1050px
1580 | 1051px
1581 | 1052px
1582 | 1052px
1583 | 1053px
1584 | 1054px
1585 | 1054px
1586 | 1055px
1587 | 1056px
1588 | 1056px
1589 | 1057px
1590 | 1058px
1591 | 1058px
1592 | 1059px
1593 | 1060px
1594 | 1060px
1595 | 1061px
1596 | 1062px
1597 | 1062px
1598 | 1063px
1599 | 1064px
1600 | 1064px
1601 | 1065px
1602 | 1066px
1603 | 1066px
1604 | 1067px
1605 | 1068px
1606 | 1068px
1607 | 1069px
1608 | 1070px
1609 | 1070px
1610 | 1071px
1611 | 1072px
1612 | 1072px
1613 | 1073px
1614 | 1074px
1615 | 1074px
1616 | 1075px
1617 | 1076px
1618 | 1076px
1619 | 1077px
1620 | 1078px
1621 | 1078px
1622 | 1079px
1623 | 1080px
1624 | 1080px
1625 | 1081px
1626 | 1082px
1627 | 1082px
1628 | 1083px
1629 | 1084px
1630 | 1084px
1631 | 1085px
1632 | 1086px
1633 | 1086px
1634 | 1087px
1635 | 1088px
1636 | 1088px
1637 | 1089px
1638 | 1090px
1639 | 1090px
1640 | 1091px
1641 | 1092px
1642 | 1092px
1643 | 1093px
1644 | 1094px
1645 | 1094px
1646 | 1095px
1647 | 1096px
1648 | 1096px
1649 | 1097px
1650 | 1098px
1651 | 1098px
1652 | 1099px
1653 | 1100px
1654 | 1100px
1655 | 1101px
1656 | 1102px
1657 | 1102px
1658 | 1103px
1659 | 1104px
1660 | 1104px
1661 | 1105px
1662 | 1106px
1663 | 1106px
1664 | 1107px
1665 | 1108px
1666 | 1108px
1667 | 1109px
1668 | 1110px
1669 | 1110px
1670 | 1111px
1671 | 1112px
1672 | 1112px
1673 | 1113px
1674 | 1114px
1675 | 1114px
1676 | 1115px
1677 | 1116px
1678 | 1116px
1679 | 1117px
1680 | 1118px
1681 | 1118px
1682 | 1119px
1683 | 1120px
1684 | 1120px
1685 | 1121px
1686 | 1122px
1687 | 1122px
1688 | 1123px
1689 | 1124px
1690 | 1124px
1691 | 1125px
1692 | 1126px
1693 | 1126px
1694 | 1127px
1695 | 1128px
1696 | 1128px
1697 | 1129px
1698 | 1130px
1699 | 1130px
1700 | 1131px
1701 | 1132px
1702 | 1132px
1703 | 1133px
1704 | 1134px
1705 | 1134px
1706 | 1135px
1707 | 1136px
1708 | 1136px
1709 | 1137px
1710 | 1138px
1711 | 1138px
1712 | 1139px
1713 | 1140px
1714 | 1140px
1715 | 1141px
1716 | 1142px
1717 | 1142px
1718 | 1143px
1719 | 1144px
1720 | 1144px
1721 | 1145px
1722 | 1146px
1723 | 1146px
1724 | 1147px
1725 | 1148px
1726 | 1148px
1727 | 1149px
1728 | 1150px
1729 | 1150px
1730 | 1151px
1731 | 1152px
1732 | 1152px
1733 | 1153px
1734 | 1154px
1735 | 1154px
1736 | 1155px
1737 | 1156px
1738 | 1156px
1739 | 1157px
1740 | 1158px
1741 | 1158px
1742 | 1159px
1743 | 1160px
1744 | 1160px
1745 | 1161px
1746 | 1162px
1747 | 1162px
1748 | 1163px
1749 | 1164px
1750 | 1164px
1751 | 1165px
1752 | 1166px
1753 | 1166px
1754 | 1167px
1755 | 1168px
1756 | 1168px
1757 | 1169px
1758 | 1170px
1759 | 1170px
1760 | 1171px
1761 | 1172px
1762 | 1172px
1763 | 1173px
1764 | 1174px
1765 | 1174px
1766 | 1175px
1767 | 1176px
1768 | 1176px
1769 | 1177px
1770 | 1178px
1771 | 1178px
1772 | 1179px
1773 | 1180px
1774 | 1180px
1775 | 1181px
1776 | 1182px
1777 | 1182px
1778 | 1183px
1779 | 1184px
1780 | 1184px
1781 | 1185px
1782 | 1186px
1783 | 1186px
1784 | 1187px
1785 | 1188px
1786 | 1188px
1787 | 1189px
1788 | 1190px
1789 | 1190px
1790 | 1191px
1791 | 1192px
1792 | 1192px
1793 | 1193px
1794 | 1194px
1795 | 1194px
1796 | 1195px
1797 | 1196px
1798 | 1196px
1799 | 1197px
1800 | 1198px
1801 | 1198px
1802 | 1199px
1803 | 1200px
1804 | 1200px
1805 | 1201px
1806 | 1202px
1807 | 1202px
1808 | 1203px
1809 | 1204px
1810 | 1204px
1811 | 1205px
1812 | 1206px
1813 | 1206px
1814 | 1207px
1815 | 1208px
1816 | 1208px
1817 | 1209px
1818 | 1210px
1819 | 1210px
1820 | 1211px
1821 | 1212px
1822 | 1212px
1823 | 1213px
1824 | 1214px
1825 | 1214px
1826 | 1215px
1827 | 1216px
1828 | 1216px
1829 | 1217px
1830 | 1218px
1831 | 1218px
1832 | 1219px
1833 | 1220px
1834 | 1220px
1835 | 1221px
1836 | 1222px
1837 | 1222px
1838 | 1223px
1839 | 1224px
1840 | 1224px
1841 | 1225px
1842 | 1226px
1843 | 1226px
1844 | 1227px
1845 | 1228px
1846 | 1228px
1847 | 1229px
1848 | 1230px
1849 | 1230px
1850 | 1231px
1851 | 1232px
1852 | 1232px
1853 | 1233px
1854 | 1234px
1855 | 1234px
1856 | 1235px
1857 | 1236px
1858 | 1236px
1859 | 1237px
1860 | 1238px
1861 | 1238px
1862 | 1239px
1863 | 1240px
1864 | 1240px
1865 | 1241px
1866 | 1242px
1867 | 1242px
1868 | 1243px
1869 | 1244px
1870 | 1244px
1871 | 1245px
1872 | 1246px
1873 | 1246px
1874 | 1247px
1875 | 1248px
1876 | 1248px
1877 | 1249px
1878 | 1250px
1879 | 1250px
1880 | 1251px
1881 | 1252px
1882 | 1252px
1883 | 1253px
1884 | 1254px
1885 | 1254px
1886 | 1255px
1887 | 1256px
1888 | 1256px
1889 | 1257px
1890 | 1258px
1891 | 1258px
1892 | 1259px
1893 | 1260px
1894 | 1260px
1895 | 1261px
1896 | 1262px
1897 | 1262px
1898 | 1263px
1899 | 1264px
1900 | 1264px
1901 | 1265px
1902 | 1266px
1903 | 1266px
1904 | 1267px
1905 | 1268px
1906 | 1268px
1907 | 1269px
1908 | 1270px
1909 | 1270px
1910 | 1271px
1911 | 1272px
1912 | 1272px
1913 | 1273px
1914 | 1274px
1915 | 1274px
1916 | 1275px
1917 | 1276px
1918 | 1276px
1919 | 1277px
1920 | 1278px
1921 | 1278px
1922 | 1279px
1923 | 1280px
1924 |
1925 |
--------------------------------------------------------------------------------
/app/src/main/res/values-v21/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
--------------------------------------------------------------------------------
/app/src/main/res/values-w820dp/dimens.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 | 64dp
6 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/values/attrs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/app/src/main/res/values/colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | #3F51B5
4 | #b9131e
5 | #FF4081
6 | #f5b8c2
7 | #E53935
8 | #FFF6F6
9 | #ffffffff
10 | #FFD51F1F
11 |
12 |
13 |
--------------------------------------------------------------------------------
/app/src/main/res/values/dimens.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | 16dp
4 | 16dp
5 | 16dp
6 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 | CustomViewDemo
3 | Settings
4 |
5 |
--------------------------------------------------------------------------------
/app/src/main/res/values/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
10 |
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/app/src/test/java/hewking/github/customviewdemo/ExampleUnitTest.java:
--------------------------------------------------------------------------------
1 | package hewking.github.customviewdemo;
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 | }
--------------------------------------------------------------------------------
/art/20190407_090017.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hewking/TanTanRippleView/ce91d8f71f47f31dd60226cfe65f145e39de8e0c/art/20190407_090017.gif
--------------------------------------------------------------------------------
/build.gradle:
--------------------------------------------------------------------------------
1 | // Top-level build file where you can add configuration options common to all sub-projects/modules.
2 |
3 | buildscript {
4 | repositories {
5 | jcenter()
6 | google()
7 | }
8 | ext.kotlin_version = '1.2.51'
9 |
10 | dependencies {
11 | classpath 'com.android.tools.build:gradle:3.2.1'
12 | classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
13 |
14 | // NOTE: Do not place your application dependencies here; they belong
15 | // in the individual module build.gradle files
16 | }
17 | }
18 |
19 | allprojects {
20 | repositories {
21 | jcenter()
22 | google()
23 | }
24 | }
25 |
26 | task clean(type: Delete) {
27 | delete rootProject.buildDir
28 | }
29 |
--------------------------------------------------------------------------------
/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
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hewking/TanTanRippleView/ce91d8f71f47f31dd60226cfe65f145e39de8e0c/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | #Sat Dec 08 14:43:59 CST 2018
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-4.6-all.zip
7 |
--------------------------------------------------------------------------------
/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 | # Attempt to set APP_HOME
46 | # Resolve links: $0 may be a link
47 | PRG="$0"
48 | # Need this for relative symlinks.
49 | while [ -h "$PRG" ] ; do
50 | ls=`ls -ld "$PRG"`
51 | link=`expr "$ls" : '.*-> \(.*\)$'`
52 | if expr "$link" : '/.*' > /dev/null; then
53 | PRG="$link"
54 | else
55 | PRG=`dirname "$PRG"`"/$link"
56 | fi
57 | done
58 | SAVED="`pwd`"
59 | cd "`dirname \"$PRG\"`/" >/dev/null
60 | APP_HOME="`pwd -P`"
61 | cd "$SAVED" >/dev/null
62 |
63 | CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
64 |
65 | # Determine the Java command to use to start the JVM.
66 | if [ -n "$JAVA_HOME" ] ; then
67 | if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
68 | # IBM's JDK on AIX uses strange locations for the executables
69 | JAVACMD="$JAVA_HOME/jre/sh/java"
70 | else
71 | JAVACMD="$JAVA_HOME/bin/java"
72 | fi
73 | if [ ! -x "$JAVACMD" ] ; then
74 | die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
75 |
76 | Please set the JAVA_HOME variable in your environment to match the
77 | location of your Java installation."
78 | fi
79 | else
80 | JAVACMD="java"
81 | which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
82 |
83 | Please set the JAVA_HOME variable in your environment to match the
84 | location of your Java installation."
85 | fi
86 |
87 | # Increase the maximum file descriptors if we can.
88 | if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then
89 | MAX_FD_LIMIT=`ulimit -H -n`
90 | if [ $? -eq 0 ] ; then
91 | if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
92 | MAX_FD="$MAX_FD_LIMIT"
93 | fi
94 | ulimit -n $MAX_FD
95 | if [ $? -ne 0 ] ; then
96 | warn "Could not set maximum file descriptor limit: $MAX_FD"
97 | fi
98 | else
99 | warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
100 | fi
101 | fi
102 |
103 | # For Darwin, add options to specify how the application appears in the dock
104 | if $darwin; then
105 | GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
106 | fi
107 |
108 | # For Cygwin, switch paths to Windows format before running java
109 | if $cygwin ; then
110 | APP_HOME=`cygpath --path --mixed "$APP_HOME"`
111 | CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
112 | JAVACMD=`cygpath --unix "$JAVACMD"`
113 |
114 | # We build the pattern for arguments to be converted via cygpath
115 | ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
116 | SEP=""
117 | for dir in $ROOTDIRSRAW ; do
118 | ROOTDIRS="$ROOTDIRS$SEP$dir"
119 | SEP="|"
120 | done
121 | OURCYGPATTERN="(^($ROOTDIRS))"
122 | # Add a user-defined pattern to the cygpath arguments
123 | if [ "$GRADLE_CYGPATTERN" != "" ] ; then
124 | OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
125 | fi
126 | # Now convert the arguments - kludge to limit ourselves to /bin/sh
127 | i=0
128 | for arg in "$@" ; do
129 | CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
130 | CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
131 |
132 | if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
133 | eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
134 | else
135 | eval `echo args$i`="\"$arg\""
136 | fi
137 | i=$((i+1))
138 | done
139 | case $i in
140 | (0) set -- ;;
141 | (1) set -- "$args0" ;;
142 | (2) set -- "$args0" "$args1" ;;
143 | (3) set -- "$args0" "$args1" "$args2" ;;
144 | (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
145 | (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
146 | (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
147 | (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
148 | (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
149 | (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
150 | esac
151 | fi
152 |
153 | # Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules
154 | function splitJvmOpts() {
155 | JVM_OPTS=("$@")
156 | }
157 | eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
158 | JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"
159 |
160 | exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@"
161 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/settings.gradle:
--------------------------------------------------------------------------------
1 | include ':app'
--------------------------------------------------------------------------------