├── app ├── .gitignore ├── src │ ├── main │ │ ├── res │ │ │ ├── mipmap-hdpi │ │ │ │ ├── ic_launcher.png │ │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-mdpi │ │ │ │ ├── ic_launcher.png │ │ │ │ ├── ic_launcher_round.png │ │ │ │ ├── appoint_calendar_end_bg.png │ │ │ │ └── appoint_calendar_start_bg.png │ │ │ ├── mipmap-xhdpi │ │ │ │ ├── ic_launcher.png │ │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-xxhdpi │ │ │ │ ├── ic_launcher.png │ │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-xxxhdpi │ │ │ │ ├── ic_launcher.png │ │ │ │ └── ic_launcher_round.png │ │ │ ├── values │ │ │ │ ├── strings.xml │ │ │ │ ├── styles.xml │ │ │ │ ├── colors.xml │ │ │ │ ├── attrs.xml │ │ │ │ └── dimens.xml │ │ │ ├── mipmap-anydpi-v26 │ │ │ │ ├── ic_launcher.xml │ │ │ │ └── ic_launcher_round.xml │ │ │ ├── drawable │ │ │ │ ├── appoint_calendar_sat_bg.xml │ │ │ │ ├── appoint_calendar_sun_bg.xml │ │ │ │ ├── appoint_calendar_bg.xml │ │ │ │ └── ic_launcher_background.xml │ │ │ ├── layout │ │ │ │ ├── appoint_calendarview_item.xml │ │ │ │ ├── activity_main.xml │ │ │ │ ├── calendar_text_day.xml │ │ │ │ └── appoint_calendarview.xml │ │ │ ├── drawable-v24 │ │ │ │ └── ic_launcher_foreground.xml │ │ │ ├── values-1024x600 │ │ │ │ └── lay_x.xml │ │ │ ├── values-1920x1200 │ │ │ │ └── lay_x.xml │ │ │ ├── values-400x320 │ │ │ │ └── lay_x.xml │ │ │ └── values-480x320 │ │ │ │ └── lay_x.xml │ │ ├── java │ │ │ └── com │ │ │ │ └── df │ │ │ │ └── dfcalendar │ │ │ │ ├── constant │ │ │ │ └── CommonConstant.java │ │ │ │ ├── widget │ │ │ │ ├── CalendarDayRelativeLayout.java │ │ │ │ ├── CalendarDayTextView.java │ │ │ │ └── CalendarView.java │ │ │ │ ├── MainActivity.java │ │ │ │ └── util │ │ │ │ └── DateUtil.java │ │ └── AndroidManifest.xml │ ├── test │ │ └── java │ │ │ └── com │ │ │ └── df │ │ │ └── dfcalendar │ │ │ └── ExampleUnitTest.java │ └── androidTest │ │ └── java │ │ └── com │ │ └── df │ │ └── dfcalendar │ │ └── ExampleInstrumentedTest.java ├── proguard-rules.pro └── build.gradle ├── settings.gradle ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── .gitignore ├── .idea ├── modules.xml ├── runConfigurations.xml ├── gradle.xml └── misc.xml ├── gradle.properties ├── gradlew.bat ├── gradlew └── README.md /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /settings.gradle: -------------------------------------------------------------------------------- 1 | include ':app' 2 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danfengfirst/DfCalendar/HEAD/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danfengfirst/DfCalendar/HEAD/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danfengfirst/DfCalendar/HEAD/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danfengfirst/DfCalendar/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danfengfirst/DfCalendar/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danfengfirst/DfCalendar/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danfengfirst/DfCalendar/HEAD/app/src/main/res/mipmap-hdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danfengfirst/DfCalendar/HEAD/app/src/main/res/mipmap-mdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danfengfirst/DfCalendar/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danfengfirst/DfCalendar/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danfengfirst/DfCalendar/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/appoint_calendar_end_bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danfengfirst/DfCalendar/HEAD/app/src/main/res/mipmap-mdpi/appoint_calendar_end_bg.png -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | .gradle 3 | /local.properties 4 | /.idea/workspace.xml 5 | /.idea/libraries 6 | .DS_Store 7 | /build 8 | /captures 9 | .externalNativeBuild 10 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/appoint_calendar_start_bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danfengfirst/DfCalendar/HEAD/app/src/main/res/mipmap-mdpi/appoint_calendar_start_bg.png -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Sun Jun 03 13:51:11 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.1-all.zip 7 | -------------------------------------------------------------------------------- /app/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | DfCalendar 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/appoint_calendar_sat_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/appoint_calendar_sun_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/layout/appoint_calendarview_item.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | -------------------------------------------------------------------------------- /.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/appoint_calendar_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/java/com/df/dfcalendar/constant/CommonConstant.java: -------------------------------------------------------------------------------- 1 | package com.df.dfcalendar.constant; 2 | 3 | /** 4 | * Created by Danfeng on 2018/6/3. 5 | */ 6 | 7 | public class CommonConstant { 8 | //time formate 9 | public static final String TFORMATE_YMDHM = "yyyy-MM-dd HH:mm"; 10 | public static final String TFORMATE_YMDHMS = "yyyy-MM-dd HH:mm:ss"; 11 | public static final String TFORMATE_YMD = "yyyy-MM-dd"; 12 | } 13 | -------------------------------------------------------------------------------- /app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/test/java/com/df/dfcalendar/ExampleUnitTest.java: -------------------------------------------------------------------------------- 1 | package com.df.dfcalendar; 2 | 3 | import org.junit.Test; 4 | 5 | import static org.junit.Assert.*; 6 | 7 | /** 8 | * Example local unit test, which will execute on the development machine (host). 9 | * 10 | * @see Testing documentation 11 | */ 12 | public class ExampleUnitTest { 13 | @Test 14 | public void addition_isCorrect() throws Exception { 15 | assertEquals(4, 2 + 2); 16 | } 17 | } -------------------------------------------------------------------------------- /.idea/runConfigurations.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 11 | 12 | -------------------------------------------------------------------------------- /.idea/gradle.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 17 | 18 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_main.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /app/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #3F51B5 4 | #303F9F 5 | #FF4081 6 | #ffffff 7 | #66ffffff 8 | #CCffffff 9 | 10 | #FF25A4CE 11 | #FF55CACE 12 | #FFFFF95B 13 | #FFC3F5F5 14 | #FF1AA5C0 15 | #FF27A5BE 16 | 17 | -------------------------------------------------------------------------------- /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 | org.gradle.jvmargs=-Xmx1536m 13 | 14 | # When configured, Gradle will run in incubating parallel mode. 15 | # This option should only be used with decoupled projects. More details, visit 16 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects 17 | # org.gradle.parallel=true 18 | -------------------------------------------------------------------------------- /app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile 22 | -------------------------------------------------------------------------------- /app/src/main/res/values/attrs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /app/src/androidTest/java/com/df/dfcalendar/ExampleInstrumentedTest.java: -------------------------------------------------------------------------------- 1 | package com.df.dfcalendar; 2 | 3 | import android.content.Context; 4 | import android.support.test.InstrumentationRegistry; 5 | import android.support.test.runner.AndroidJUnit4; 6 | 7 | import org.junit.Test; 8 | import org.junit.runner.RunWith; 9 | 10 | import static org.junit.Assert.*; 11 | 12 | /** 13 | * Instrumented test, which will execute on an Android device. 14 | * 15 | * @see Testing documentation 16 | */ 17 | @RunWith(AndroidJUnit4.class) 18 | public class ExampleInstrumentedTest { 19 | @Test 20 | public void useAppContext() throws Exception { 21 | // Context of the app under test. 22 | Context appContext = InstrumentationRegistry.getTargetContext(); 23 | 24 | assertEquals("com.df.dfcalendar", appContext.getPackageName()); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /app/src/main/res/layout/calendar_text_day.xml: -------------------------------------------------------------------------------- 1 | 2 | 10 | 11 | 21 | 22 | -------------------------------------------------------------------------------- /app/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'com.android.application' 2 | 3 | android { 4 | compileSdkVersion 27 5 | defaultConfig { 6 | applicationId "com.df.dfcalendar" 7 | minSdkVersion 15 8 | targetSdkVersion 27 9 | versionCode 1 10 | versionName "1.0" 11 | testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" 12 | } 13 | buildTypes { 14 | release { 15 | minifyEnabled false 16 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 17 | } 18 | } 19 | } 20 | 21 | dependencies { 22 | implementation fileTree(dir: 'libs', include: ['*.jar']) 23 | implementation 'com.android.support:appcompat-v7:27.1.1' 24 | implementation 'com.android.support.constraint:constraint-layout:1.1.0' 25 | implementation 'com.android.support:recyclerview-v7:27.0.2' 26 | implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.35' 27 | 28 | testImplementation 'junit:junit:4.12' 29 | androidTestImplementation 'com.android.support.test:runner:1.0.2' 30 | androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' 31 | 32 | } 33 | -------------------------------------------------------------------------------- /app/src/main/java/com/df/dfcalendar/widget/CalendarDayRelativeLayout.java: -------------------------------------------------------------------------------- 1 | package com.df.dfcalendar.widget; 2 | 3 | import android.content.Context; 4 | import android.graphics.Canvas; 5 | import android.graphics.Paint; 6 | import android.util.AttributeSet; 7 | import android.widget.RelativeLayout; 8 | import com.df.dfcalendar.R; 9 | 10 | 11 | /** 12 | * Created by Danfeng on 2018/5/30. 13 | */ 14 | 15 | public class CalendarDayRelativeLayout extends RelativeLayout { 16 | public CalendarDayRelativeLayout(Context context) { 17 | this(context, null); 18 | } 19 | 20 | public CalendarDayRelativeLayout(Context context, AttributeSet attrs) { 21 | super(context, attrs); 22 | } 23 | 24 | public void isDurationSat(boolean isSaturday) { 25 | this.setBackground(getResources().getDrawable(R.drawable.appoint_calendar_sat_bg)); 26 | } 27 | 28 | public void isDurationSun(boolean isSunday) { 29 | this.setBackground(getResources().getDrawable(R.drawable.appoint_calendar_sun_bg)); 30 | } 31 | public void isETime(boolean etime) { 32 | this.setBackground(getResources().getDrawable(R.mipmap.appoint_calendar_end_bg));} 33 | public void isSTime(boolean stime) { 34 | this.setBackground(getResources().getDrawable(R.mipmap.appoint_calendar_start_bg)); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 16 | 26 | 27 | 28 | 29 | 30 | 31 | 33 | -------------------------------------------------------------------------------- /app/src/main/java/com/df/dfcalendar/MainActivity.java: -------------------------------------------------------------------------------- 1 | package com.df.dfcalendar; 2 | 3 | import android.support.v7.app.AppCompatActivity; 4 | import android.os.Bundle; 5 | import android.widget.Toast; 6 | 7 | import com.df.dfcalendar.widget.CalendarView; 8 | 9 | import java.util.Date; 10 | 11 | public class MainActivity extends AppCompatActivity { 12 | CalendarView mCalendarView; 13 | @Override 14 | protected void onCreate(Bundle savedInstanceState) { 15 | super.onCreate(savedInstanceState); 16 | setContentView(R.layout.activity_main); 17 | mCalendarView=findViewById(R.id.appoint_calendar); 18 | initCalendarView(); 19 | } 20 | private void initCalendarView() { 21 | mCalendarView.setETimeSelListener(new CalendarView.CalendatEtimSelListener() { 22 | @Override 23 | public void onETimeSelect(Date date) { 24 | if (date != null) { 25 | String etimestr = (date.getYear() + 1900) + getString(R.string.year) + (date.getMonth() + 1) + getString(R.string.month) + date.getDate() + getString(R.string.day); 26 | Toast.makeText(getApplicationContext(),"结束时间"+etimestr,Toast.LENGTH_SHORT).show(); 27 | } 28 | } 29 | }); 30 | mCalendarView.setSTimeSelListener(new CalendarView.CalendarSTimeSelListener() { 31 | @Override 32 | public void onSTimeSelect(Date date) { 33 | if (date != null) { 34 | String stimestr = (date.getYear() + 1900) + getString(R.string.year) + (date.getMonth() + 1) + getString(R.string.month) + date.getDate() + getString(R.string.day); 35 | Toast.makeText(getApplicationContext(),"开始时间"+stimestr,Toast.LENGTH_SHORT).show(); 36 | } 37 | } 38 | }); 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-v24/ic_launcher_foreground.xml: -------------------------------------------------------------------------------- 1 | 7 | 12 | 13 | 19 | 22 | 25 | 26 | 27 | 28 | 34 | 35 | -------------------------------------------------------------------------------- /app/src/main/res/values/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 10sp 5 | 11sp 6 | 12sp 7 | 13sp 8 | 14sp 9 | 15sp 10 | 16sp 11 | 17sp 12 | 18sp 13 | 19sp 14 | 20sp 15 | 21sp 16 | 22sp 17 | 23sp 18 | 24sp 19 | 25sp 20 | 26sp 21 | 27sp 22 | 28sp 23 | 29sp 24 | 30sp 25 | 31sp 26 | 32sp 27 | 33sp 28 | 34sp 29 | 35sp 30 | 36sp 31 | 37sp 32 | 38sp 33 | 39sp 34 | 40sp 35 | 41sp 36 | 42sp 37 | 43sp 38 | 44sp 39 | 45sp 40 | 46sp 41 | 47sp 42 | 48sp 43 | 49sp 44 | 50sp 45 | 51sp 46 | 52sp 47 | 53sp 48 | 54sp 49 | 55sp 50 | 56sp 51 | 57sp 52 | 58sp 53 | 59sp 54 | 75sp 55 | -------------------------------------------------------------------------------- /gradlew.bat: -------------------------------------------------------------------------------- 1 | @if "%DEBUG%" == "" @echo off 2 | @rem ########################################################################## 3 | @rem 4 | @rem Gradle startup script for Windows 5 | @rem 6 | @rem ########################################################################## 7 | 8 | @rem Set local scope for the variables with windows NT shell 9 | if "%OS%"=="Windows_NT" setlocal 10 | 11 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. 12 | set DEFAULT_JVM_OPTS= 13 | 14 | set DIRNAME=%~dp0 15 | if "%DIRNAME%" == "" set DIRNAME=. 16 | set APP_BASE_NAME=%~n0 17 | set APP_HOME=%DIRNAME% 18 | 19 | @rem Find java.exe 20 | if defined JAVA_HOME goto findJavaFromJavaHome 21 | 22 | set JAVA_EXE=java.exe 23 | %JAVA_EXE% -version >NUL 2>&1 24 | if "%ERRORLEVEL%" == "0" goto init 25 | 26 | echo. 27 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 28 | echo. 29 | echo Please set the JAVA_HOME variable in your environment to match the 30 | echo location of your Java installation. 31 | 32 | goto fail 33 | 34 | :findJavaFromJavaHome 35 | set JAVA_HOME=%JAVA_HOME:"=% 36 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe 37 | 38 | if exist "%JAVA_EXE%" goto init 39 | 40 | echo. 41 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 42 | echo. 43 | echo Please set the JAVA_HOME variable in your environment to match the 44 | echo location of your Java installation. 45 | 46 | goto fail 47 | 48 | :init 49 | @rem Get command-line arguments, handling Windowz variants 50 | 51 | if not "%OS%" == "Windows_NT" goto win9xME_args 52 | if "%@eval[2+2]" == "4" goto 4NT_args 53 | 54 | :win9xME_args 55 | @rem Slurp the command line arguments. 56 | set CMD_LINE_ARGS= 57 | set _SKIP=2 58 | 59 | :win9xME_args_slurp 60 | if "x%~1" == "x" goto execute 61 | 62 | set CMD_LINE_ARGS=%* 63 | goto execute 64 | 65 | :4NT_args 66 | @rem Get arguments from the 4NT Shell from JP Software 67 | set CMD_LINE_ARGS=%$ 68 | 69 | :execute 70 | @rem Setup the command line 71 | 72 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar 73 | 74 | @rem Execute Gradle 75 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% 76 | 77 | :end 78 | @rem End local scope for the variables with windows NT shell 79 | if "%ERRORLEVEL%"=="0" goto mainEnd 80 | 81 | :fail 82 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of 83 | rem the _cmd.exe /c_ return code! 84 | if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 85 | exit /b 1 86 | 87 | :mainEnd 88 | if "%OS%"=="Windows_NT" endlocal 89 | 90 | :omega 91 | -------------------------------------------------------------------------------- /app/src/main/java/com/df/dfcalendar/util/DateUtil.java: -------------------------------------------------------------------------------- 1 | package com.df.dfcalendar.util; 2 | 3 | import java.sql.Timestamp; 4 | import java.text.ParseException; 5 | import java.text.SimpleDateFormat; 6 | import java.util.Calendar; 7 | import java.util.Date; 8 | 9 | /** 10 | * Created by Danfeng on 2018/4/22. 11 | */ 12 | 13 | public class DateUtil { 14 | 15 | //Calendar 转化 String 16 | public static String calendarToStr(Calendar calendar,String format) { 17 | 18 | // Calendar calendat = Calendar.getInstance(); 19 | 20 | SimpleDateFormat sdf = new SimpleDateFormat(format); 21 | 22 | return sdf.format(calendar.getTime()); 23 | } 24 | 25 | 26 | //String 转化Calendar 27 | public static Calendar strToCalendar(String str,String format) { 28 | 29 | // String str = "2012-5-27"; 30 | SimpleDateFormat sdf = new SimpleDateFormat(format); 31 | Date date = null; 32 | Calendar calendar = null; 33 | try { 34 | date = sdf.parse(str); 35 | calendar = Calendar.getInstance(); 36 | calendar.setTime(date); 37 | } catch (ParseException e) { 38 | e.printStackTrace(); 39 | } 40 | return calendar; 41 | } 42 | 43 | 44 | // Date 转化String 45 | public static String dateTostr(Date date,String format) { 46 | 47 | SimpleDateFormat sdf = new SimpleDateFormat(format); 48 | // String dateStr = sdf.format(new Date()); 49 | String dateStr = sdf.format(date); 50 | return dateStr; 51 | } 52 | 53 | 54 | // String 转化Date 55 | public static Date strToDate(String str,String format) { 56 | SimpleDateFormat sdf = new SimpleDateFormat(format); 57 | Date date = null; 58 | try { 59 | date = sdf.parse(str); 60 | } catch (ParseException e) { 61 | e.printStackTrace(); 62 | } 63 | return date; 64 | } 65 | 66 | 67 | //Date 转化Calendar 68 | public static Calendar dateToCalendar(Date date) { 69 | Calendar calendar = Calendar.getInstance(); 70 | calendar.setTime(date); 71 | return calendar; 72 | } 73 | 74 | 75 | //Calendar转化Date 76 | public static Date calendarToDate(Calendar calendar) { 77 | return calendar.getTime(); 78 | } 79 | 80 | 81 | // String 转成 Timestamp 82 | 83 | public static Timestamp strToTimeStamp(String str) { 84 | 85 | // Timestamp ts = Timestamp.valueOf("2012-1-14 08:11:00"); 86 | return Timestamp.valueOf(str); 87 | } 88 | 89 | 90 | //Date 转 TimeStamp 91 | public static Timestamp dateToTimeStamp(Date date,String format) { 92 | 93 | SimpleDateFormat df = new SimpleDateFormat(format); 94 | 95 | String time = df.format(new Date()); 96 | 97 | Timestamp ts = Timestamp.valueOf(time); 98 | return ts; 99 | } 100 | } 101 | -------------------------------------------------------------------------------- /app/src/main/java/com/df/dfcalendar/widget/CalendarDayTextView.java: -------------------------------------------------------------------------------- 1 | package com.df.dfcalendar.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.util.AttributeSet; 8 | 9 | import com.df.dfcalendar.R; 10 | 11 | 12 | /** 13 | * Created by Danfeng on 2018/4/20. 14 | */ 15 | public class CalendarDayTextView extends android.support.v7.widget.AppCompatTextView { 16 | public boolean isToday; 17 | private boolean isSTime; 18 | private boolean isETime; 19 | private Context context; 20 | 21 | public void setEmptyColor(int emptyColor) { 22 | this.emptyColor = emptyColor; 23 | } 24 | 25 | public void setFillColor(int fillColor) { 26 | this.fillColor = fillColor; 27 | } 28 | 29 | private int emptyColor = Color.parseColor("#00ff00"); 30 | private int fillColor = Color.parseColor("#00ff00"); 31 | 32 | private Paint mPaintSTime; 33 | private Paint mPaintETime; 34 | 35 | 36 | 37 | public CalendarDayTextView(Context context) { 38 | super(context); 39 | initview(context); 40 | } 41 | 42 | public CalendarDayTextView(Context context, AttributeSet attrs) { 43 | super(context, attrs); 44 | initview(context); 45 | } 46 | 47 | private void initview(Context context) { 48 | this.context=context; 49 | 50 | mPaintSTime = new Paint(Paint.ANTI_ALIAS_FLAG); 51 | mPaintSTime.setStyle(Paint.Style.FILL); 52 | mPaintSTime.setColor(context.getResources().getColor(R.color.date_time_bg)); 53 | mPaintSTime.setStrokeWidth(2); 54 | 55 | mPaintETime = new Paint(Paint.ANTI_ALIAS_FLAG); 56 | mPaintETime.setStyle(Paint.Style.FILL); 57 | mPaintETime.setColor(context.getResources().getColor(R.color.date_time_bg)); 58 | mPaintETime.setStrokeWidth(2); 59 | } 60 | 61 | @Override 62 | protected void onDraw(Canvas canvas) { 63 | //根据当前逻辑开始时间必须先绘制结束时间 64 | if (isETime) { 65 | canvas.save(); 66 | //移动到当前控件的中心,以中心为圆点绘制实心圆 67 | canvas.translate(getWidth() / 2, getHeight() / 2); 68 | canvas.drawCircle(0, 0, getWidth() / 2 , mPaintETime); 69 | canvas.restore(); 70 | //此处必须将圆移动回开始位置,否则文本显示会受到影响 71 | canvas.translate(0, 0); 72 | } 73 | 74 | if (isSTime) { 75 | canvas.save(); 76 | //移动到当前控件的中心,以中心为圆点绘制实心圆 77 | canvas.translate(getWidth() / 2, getHeight() / 2); 78 | canvas.drawCircle(0, 0, getWidth() / 2 , mPaintSTime); 79 | canvas.restore(); 80 | //此处必须将圆移动回开始位置,否则文本显示会受到影响 81 | canvas.translate(0, 0); 82 | } 83 | super.onDraw(canvas); 84 | } 85 | 86 | public void setToday(boolean today) { 87 | isToday = today; 88 | this.setTextColor(context.getResources().getColor(R.color.date_today)); 89 | } 90 | 91 | public void isETime(boolean etime) { 92 | isETime = etime; 93 | this.setTextColor(context.getResources().getColor(R.color.date_time_tv)); 94 | } 95 | 96 | public void isSTime(boolean stime) { 97 | isSTime = stime; 98 | this.setTextColor(context.getResources().getColor(R.color.date_time_tv)); 99 | } 100 | 101 | } -------------------------------------------------------------------------------- /app/src/main/res/layout/appoint_calendarview.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 13 | 14 | 23 | 24 | 34 | 35 | 36 | 46 | 56 | 57 | 67 | 68 | 78 | 79 | 89 | 90 | 100 | 101 | 111 | 112 | 122 | 123 | 124 | 131 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_launcher_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 10 | 15 | 20 | 25 | 30 | 35 | 40 | 45 | 50 | 55 | 60 | 65 | 70 | 75 | 80 | 85 | 90 | 95 | 100 | 105 | 110 | 115 | 120 | 125 | 130 | 135 | 140 | 145 | 150 | 155 | 160 | 165 | 170 | 171 | -------------------------------------------------------------------------------- /app/src/main/java/com/df/dfcalendar/widget/CalendarView.java: -------------------------------------------------------------------------------- 1 | package com.df.dfcalendar.widget; 2 | 3 | /** 4 | * Created by Danfeng on 2018/4/20. 5 | */ 6 | 7 | import android.content.Context; 8 | import android.content.res.TypedArray; 9 | import android.graphics.Color; 10 | import android.support.annotation.Nullable; 11 | import android.support.v7.widget.GridLayoutManager; 12 | import android.support.v7.widget.LinearLayoutManager; 13 | import android.support.v7.widget.PagerSnapHelper; 14 | import android.support.v7.widget.RecyclerView; 15 | import android.util.AttributeSet; 16 | import android.view.LayoutInflater; 17 | import android.view.View; 18 | import android.widget.LinearLayout; 19 | import android.widget.TextView; 20 | 21 | import com.chad.library.adapter.base.BaseQuickAdapter; 22 | import com.chad.library.adapter.base.BaseViewHolder; 23 | import com.df.dfcalendar.R; 24 | import com.df.dfcalendar.constant.CommonConstant; 25 | import com.df.dfcalendar.util.DateUtil; 26 | 27 | import java.util.ArrayList; 28 | import java.util.Calendar; 29 | import java.util.Date; 30 | import java.util.HashMap; 31 | import java.util.Iterator; 32 | import java.util.List; 33 | import java.util.Map; 34 | 35 | /** 36 | * Created by Danfeng on 2018/4/20. 37 | */ 38 | public class CalendarView extends LinearLayout { 39 | private TextView title; 40 | private RecyclerView recyclerView; 41 | private LinearLayoutManager linearLayoutManager; 42 | 43 | private Calendar curDate = Calendar.getInstance(); 44 | //从服务器获取的日期 45 | private Date dateFromServer; 46 | 47 | //外层主recyclerview的adapter 48 | private MainRvAdapter mainAdapter; 49 | private List months = new ArrayList<>(); 50 | private Context context; 51 | 52 | //相关属性 53 | private int titleColor; 54 | private int titleSize; 55 | 56 | private int enableSelectColor; 57 | private int disableSeletColor; 58 | private int todayColor; 59 | private int todayEmptyColor; 60 | private int todayFillColor; 61 | 62 | //卡片第一个月 63 | private int firstMonth = -1;//卡片第一个月(中间) 64 | private int secondMonth = -1;//卡片第二个月(中间) 65 | private int thirdMonth = -1;//卡片第三个月(中间) 66 | 67 | private List titles = new ArrayList<>(); 68 | 69 | //点击的开始时间与结束时间 70 | private Date sDateTime; 71 | private Date eDateTime; 72 | private boolean isSelectingSTime = true; 73 | 74 | private HashMap allAdapters = new HashMap<>(); 75 | 76 | 77 | public CalendarView(Context context) { 78 | this(context, null); 79 | } 80 | 81 | public CalendarView(Context context, AttributeSet attrs) { 82 | this(context, attrs, 0); 83 | } 84 | 85 | 86 | public CalendarView(Context context, AttributeSet attrs, int defStyleAttr) { 87 | super(context, attrs, defStyleAttr); 88 | TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.MyCalendar); 89 | titleColor = ta.getColor(R.styleable.MyCalendar_titleColor, Color.WHITE); 90 | titleSize = (int) ta.getDimension(R.styleable.MyCalendar_titleSize, 18); 91 | enableSelectColor = ta.getColor(R.styleable.MyCalendar_dayInMonthColor, context.getResources().getColor(R.color.white)); 92 | disableSeletColor = ta.getColor(R.styleable.MyCalendar_dayOutMonthcolor, context.getResources().getColor(R.color.transparent40_white)); 93 | todayColor = ta.getColor(R.styleable.MyCalendar_todayColor, Color.BLUE); 94 | todayEmptyColor = ta.getColor(R.styleable.MyCalendar_todayEmptycircleColor, Color.CYAN); 95 | todayFillColor = ta.getColor(R.styleable.MyCalendar_todayFillcircleColor, Color.CYAN); 96 | ta.recycle(); 97 | this.context = context; 98 | initTime(context, ""); 99 | init(context); 100 | } 101 | //该方法用于设置从服务器获取的时间,如果没有从服务器获取的时间将使用手机本地时间 102 | private void initTime(Context context, String time) { 103 | if (!time.equals("")) { 104 | curDate = DateUtil.strToCalendar(time, CommonConstant.TFORMATE_YMD); 105 | dateFromServer = DateUtil.strToDate(time, CommonConstant.TFORMATE_YMD); 106 | } else { 107 | curDate = Calendar.getInstance(); 108 | dateFromServer = new Date(); 109 | } 110 | } 111 | 112 | private void init(Context context) { 113 | bindView(context); 114 | bindEvent(); 115 | } 116 | 117 | 118 | private void bindView(Context context) { 119 | View view = LayoutInflater.from(context).inflate(R.layout.appoint_calendarview, this, false); 120 | title = (TextView) view.findViewById(R.id.calendar_title); 121 | title.setTextColor(titleColor); 122 | title.setTextSize(titleSize); 123 | recyclerView = (RecyclerView) view.findViewById(R.id.calendar_rv); 124 | linearLayoutManager = new LinearLayoutManager(this.context, LinearLayoutManager.HORIZONTAL, false); 125 | recyclerView.setLayoutManager(linearLayoutManager); 126 | PagerSnapHelper snapHelper = new PagerSnapHelper(); 127 | snapHelper.attachToRecyclerView(recyclerView); 128 | addView(view); 129 | } 130 | 131 | private void bindEvent() { 132 | renderCalendar(""); 133 | } 134 | 135 | public void renderCalendar(String time) { 136 | months.clear(); 137 | initTime(context, time); 138 | for (int i = 0; i < 3; i++) { 139 | ArrayList cells = new ArrayList<>(); 140 | if (i != 0) { 141 | curDate.add(Calendar.MONTH, 1);//后推一个月 142 | } else { 143 | curDate.add(Calendar.MONTH, 0);//当前月 144 | } 145 | Calendar calendar = (Calendar) curDate.clone(); 146 | //将日历设置到当月第一天 147 | calendar.set(Calendar.DAY_OF_MONTH, 1); 148 | //获得当月第一天是星期几,如果是星期一则返回1此时1-1=0证明上个月没有多余天数 149 | int prevDays = calendar.get(Calendar.DAY_OF_WEEK) - 1; 150 | //将calendar在1号的基础上向前推prevdays天。 151 | calendar.add(Calendar.DAY_OF_MONTH, -prevDays); 152 | //最大行数是6*7也就是,1号正好是星期六时的情况 153 | int maxCellcount = 6 * 7; 154 | while (cells.size() < maxCellcount) { 155 | cells.add(calendar.getTime()); 156 | //日期后移一天 157 | calendar.add(calendar.DAY_OF_MONTH, 1); 158 | } 159 | months.add(new CalendarCell(i, cells)); 160 | } 161 | 162 | firstMonth = dateFromServer.getMonth();//第一个月 163 | secondMonth = months.get(1).getCells().get(20).getMonth();//第二个月 164 | thirdMonth = months.get(2).getCells().get(20).getMonth();//第三个月 165 | for (int i = 0; i < months.size(); i++) { 166 | //title格式 2018年6月3日 167 | String title = (months.get(i).getCells().get(20).getYear() + 1900) + 168 | context.getResources().getString(R.string.year) + 169 | (months.get(i).getCells().get(20).getMonth() + 1) + context.getResources().getString(R.string.month); 170 | titles.add(title); 171 | } 172 | title.setText(titles.get(0)); 173 | //只限定3个月,因此模拟给3个数值即可 174 | mainAdapter = new MainRvAdapter(R.layout.appoint_calendarview_item, months); 175 | recyclerView.setAdapter(mainAdapter); 176 | //recyclerview 的滚动监听 177 | recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { 178 | @Override 179 | public void onScrollStateChanged(RecyclerView recyclerView, int newState) { 180 | title.setText(titles.get(linearLayoutManager.findLastVisibleItemPosition())); 181 | super.onScrollStateChanged(recyclerView, newState); 182 | } 183 | }); 184 | } 185 | 186 | /** 187 | * 最外层水平recyclerview的adapter 188 | */ 189 | private class MainRvAdapter extends BaseQuickAdapter { 190 | 191 | public MainRvAdapter(int layoutResId, @Nullable List data) { 192 | super(layoutResId, data); 193 | } 194 | 195 | @Override 196 | protected void convert(BaseViewHolder helper, final CalendarCell item) { 197 | if (((RecyclerView) helper.getView(R.id.appoint_calendarview_item_rv)).getLayoutManager() == null) { 198 | //RecyclerView不能都使用同一个LayoutManager 199 | GridLayoutManager manager = new GridLayoutManager(mContext, 7); 200 | //recyclerview嵌套高度不固定(wrap_content)时必须setAutoMeasureEnabled(true),否则测量时控件高度为0 201 | manager.setAutoMeasureEnabled(true); 202 | ((RecyclerView) helper.getView(R.id.appoint_calendarview_item_rv)).setLayoutManager(manager); 203 | } 204 | SubRvAdapter subRvAdapter = null; 205 | if (allAdapters.get(helper.getPosition()) == null) { 206 | subRvAdapter = new SubRvAdapter(R.layout.calendar_text_day, item.getCells()); 207 | allAdapters.put(helper.getPosition(), subRvAdapter); 208 | ((RecyclerView) helper.getView(R.id.appoint_calendarview_item_rv)).setAdapter(subRvAdapter); 209 | } else { 210 | subRvAdapter = allAdapters.get(helper.getPosition()); 211 | ((RecyclerView) helper.getView(R.id.appoint_calendarview_item_rv)).setAdapter(subRvAdapter); 212 | } 213 | //item 点击事件响应 214 | subRvAdapter.setOnItemClickListener(new OnItemClickListener() { 215 | @Override 216 | public void onItemClick(BaseQuickAdapter adapter, View view, int position) { 217 | Date date = item.getCells().get(position); 218 | int day = date.getDate(); 219 | if (date.getMonth() == secondMonth 220 | || (date.getDate() > dateFromServer.getDate() && date.getMonth() == firstMonth) 221 | || (date.getDate() <= dateFromServer.getDate() && date.getMonth() == thirdMonth)) { 222 | //可点击数据 223 | if (isSelectingSTime) { 224 | //正在选择开始时间 225 | selectSDate(item.getCells().get(position)); 226 | } else { 227 | //正在选择结束时间 228 | selectEDate(item.getCells().get(position)); 229 | } 230 | } 231 | //更新所有的adapter,比如今天6月,需要更新6、7、8三个月份不同adapter 232 | Iterator iterator = allAdapters.entrySet().iterator(); 233 | while (iterator.hasNext()) { 234 | Map.Entry entry = (Map.Entry) iterator.next(); 235 | ((SubRvAdapter) entry.getValue()).notifyDataSetChanged(); 236 | } 237 | } 238 | }); 239 | } 240 | } 241 | 242 | public void selectSDate(Date date) { 243 | if (sDateTime != null && eDateTime != null) { 244 | sDateTime = date; 245 | 246 | notifyDateSelectChanged(); 247 | } else { 248 | sDateTime = date; 249 | notifyDateSelectChanged(); 250 | } 251 | eDateTime = null; 252 | isSelectingSTime = false; 253 | } 254 | 255 | public void selectEDate(Date date) { 256 | if (sDateTime != null) { 257 | if (date.getTime() > sDateTime.getTime()) { 258 | eDateTime = date; 259 | isSelectingSTime = true; 260 | notifyDateSelectChanged(); 261 | } 262 | } 263 | 264 | } 265 | 266 | /** 267 | * 通知开始时间跟结束时间均改变 268 | */ 269 | public void notifyDateSelectChanged() { 270 | if (mETimeSelectListener != null && eDateTime != null) { 271 | mETimeSelectListener.onETimeSelect(eDateTime); 272 | } 273 | if (mSTimeSelectListener != null && sDateTime != null) { 274 | mSTimeSelectListener.onSTimeSelect(sDateTime); 275 | } 276 | } 277 | 278 | 279 | private class SubRvAdapter extends BaseQuickAdapter { 280 | 281 | public SubRvAdapter(int layoutResId, @Nullable List data) { 282 | super(layoutResId, data); 283 | } 284 | 285 | @Override 286 | protected void convert(BaseViewHolder helper, Date date) { 287 | helper.setIsRecyclable(false);//不让recyclerview进行复用,复用会出问题 288 | ((CalendarDayTextView) helper.getView(R.id.calendar_day_tv)).setEmptyColor(todayEmptyColor); 289 | ((CalendarDayTextView) helper.getView(R.id.calendar_day_tv)).setFillColor(todayFillColor); 290 | int day = date.getDate(); 291 | //设置文本 292 | ((CalendarDayTextView) helper.getView(R.id.calendar_day_tv)).setText(String.valueOf(day)); 293 | //设置颜色 294 | if (date.getMonth() == secondMonth 295 | || (date.getDate() > dateFromServer.getDate() && date.getMonth() == firstMonth) 296 | || (date.getDate() <= dateFromServer.getDate() && date.getMonth() == thirdMonth)) { 297 | //可选时间 298 | ((CalendarDayTextView) helper.getView(R.id.calendar_day_tv)).setTextColor(enableSelectColor); 299 | } else { 300 | //不可选时间 301 | ((CalendarDayTextView) helper.getView(R.id.calendar_day_tv)).setTextColor(disableSeletColor); 302 | } 303 | if (eDateTime != null && date.getTime() == eDateTime.getTime()) { 304 | //结束时间 305 | ((CalendarDayTextView) helper.getView(R.id.calendar_day_tv)).isETime(true); 306 | ((CalendarDayRelativeLayout) helper.getView(R.id.calendar_day_rl)).isETime(true); 307 | } 308 | if (sDateTime != null && date.getTime() == sDateTime.getTime()) { 309 | //开始时间 310 | if (eDateTime != null) { 311 | ((CalendarDayTextView) helper.getView(R.id.calendar_day_tv)).isSTime(true); 312 | ((CalendarDayRelativeLayout) helper.getView(R.id.calendar_day_rl)).isSTime(true); 313 | } else { 314 | ((CalendarDayTextView) helper.getView(R.id.calendar_day_tv)).isSTime(true); 315 | } 316 | } 317 | if (sDateTime != null && eDateTime != null && date.getTime() > sDateTime.getTime() && date.getTime() < eDateTime.getTime()) { 318 | if (date.getDay() == 6) { 319 | ((CalendarDayRelativeLayout) helper.getView(R.id.calendar_day_rl)).isDurationSat(true); 320 | } else if (date.getDay() == 0) { 321 | ((CalendarDayRelativeLayout) helper.getView(R.id.calendar_day_rl)).isDurationSun(true); 322 | } else { 323 | helper.getView(R.id.calendar_day_rl).setBackgroundColor(getResources().getColor(R.color.date_duration_bg)); 324 | } 325 | } 326 | if (date.getDate() == dateFromServer.getDate() && date.getMonth() == firstMonth) { 327 | ((CalendarDayTextView) helper.getView(R.id.calendar_day_tv)).setToday(true); 328 | } 329 | } 330 | } 331 | 332 | private class CalendarCell { 333 | private int position; 334 | ArrayList cells; 335 | 336 | public CalendarCell(int position, ArrayList cells) { 337 | this.position = position; 338 | this.cells = cells; 339 | } 340 | 341 | public int getPosition() { 342 | return position; 343 | } 344 | 345 | public void setPosition(int position) { 346 | this.position = position; 347 | } 348 | 349 | public ArrayList getCells() { 350 | return cells; 351 | } 352 | 353 | public void setCells(ArrayList cells) { 354 | this.cells = cells; 355 | } 356 | } 357 | 358 | 359 | //开始时间的选择监听 360 | public interface CalendarSTimeSelListener { 361 | void onSTimeSelect(Date date); 362 | } 363 | 364 | private CalendarSTimeSelListener mSTimeSelectListener; 365 | 366 | public void setSTimeSelListener(CalendarSTimeSelListener li) { 367 | mSTimeSelectListener = li; 368 | } 369 | 370 | //结束时间的监听事件 371 | public interface CalendatEtimSelListener { 372 | void onETimeSelect(Date date); 373 | } 374 | 375 | private CalendatEtimSelListener mETimeSelectListener; 376 | 377 | public void setETimeSelListener(CalendatEtimSelListener li) { 378 | mETimeSelectListener = li; 379 | } 380 | 381 | } 382 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ![这里写图片描述](https://img-blog.csdn.net/20180601113507632?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2RhbmZlbmd3/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70) 2 | 3 | 前阵子app里需要用到日历,效果图如上,做日历我本来是不担心的,因为之前就有写过,比如我之前的文章 4 | https://blog.csdn.net/danfengw/article/details/72764995 5 | 就是写自定义日历的,但是看到具体的产品需求以及效果图,我就”嗯,很好……“,不是我不喜欢自定义,而是效果图里面的细节真的是有点多,好了,我们来看看细节: 6 | 7 | 1、产品需求只显示近3个月,当天时间之前的日期灰色,三个月后当前日期之后的日期也是灰色人,嗯,不明白?那我们来举个例子:今天6月3号,显示3个月,也就是6-8月,6.3号之前是灰色,6.3号是黄色,8.3号之后是灰色。 8 | 9 | 2、选择日期,第一次选择是开始日期,第二次选择是结束日期,再次选择则是开始日期(这里你可能会考虑为什么不是我第三次选择日期如果日期比结束日期晚则作为结束日期,比开始日期早则作为开始日期呢?这个逻辑我之前也尝试过,对于用户操作(1)有时候操作不方便(2)关于选择日期会有疑惑,所以才采用了这种相对容易理解的方式)。 10 | 11 | 3、选择的开始日期与结束日期分别加了圆圈背景,同时在开始日期与结束日期之间的区域,周六跟周天分别是右半圆跟左半圆背景,其他日期都是矩形背景。 12 | 13 | 14 | 好了,细节大概是说完了,如果想要理解这篇自定义view建议先去看我上面链接里的自定义日历这篇文章,循序渐进。 15 | 16 | 下面再说一下实现思路:recyclerview嵌套,一个水平方向LinearLayoutManager嵌套一个GridLayoutManager说完你大概是理解了吧? 17 | 18 | ps:定制版控件,只适合用来学习思路,如果要用到你自己的项目,还是需要修改的。 19 | 20 | 21 | # csdn 地址 22 | https://blog.csdn.net/danfengw/article/details/80556062 23 | 24 | 25 | # 代码思路 26 | 1、recyclerview嵌套,设置日期 27 | 28 | 2、继承textview自定义textview,主要用于修改开始日期与结束日期的圆形背景 29 | 30 | 3、继承relativelayout自定义relativelayout,主要用于设置被选中日期的中间时间段。 31 | 32 | ## 1、CalendarView 33 | (0)初始化布局 34 | ``` 35 | private void bindView(Context context) { 36 | View view = LayoutInflater.from(context).inflate(R.layout.appoint_calendarview, this, false); 37 | title = (TextView) view.findViewById(R.id.calendar_title); 38 | title.setTextColor(titleColor); 39 | title.setTextSize(titleSize); 40 | recyclerView = (RecyclerView) view.findViewById(R.id.calendar_rv); 41 | linearLayoutManager = new LinearLayoutManager(this.context, LinearLayoutManager.HORIZONTAL, false); 42 | recyclerView.setLayoutManager(linearLayoutManager); 43 | PagerSnapHelper snapHelper = new PagerSnapHelper(); 44 | snapHelper.attachToRecyclerView(recyclerView); 45 | addView(view); 46 | } 47 | ``` 48 | appoint_calendarview.xml(可以将布局直接拷贝到自己项目,能更好的理解,所以我把布局给贴出来了) 49 | ``` 50 | 51 | 56 | 57 | 62 | 63 | 72 | 73 | 83 | 84 | 85 | 95 | 105 | 106 | 116 | 117 | 127 | 128 | 138 | 139 | 149 | 150 | 160 | 161 | 171 | 172 | 173 | 180 | 181 | ``` 182 | 183 | (1)设置时间 184 | ``` 185 | //该方法用于设置从服务器获取的时间,如果没有从服务器获取的时间将使用手机本地时间 186 | private void initTime(Context context, String time) { 187 | if (!time.equals("")) { 188 | curDate = DateUtil.strToCalendar(time, CommonConstant.TFORMATE_YMD); 189 | dateFromServer = DateUtil.strToDate(time, CommonConstant.TFORMATE_YMD); 190 | } else { 191 | curDate = Calendar.getInstance(); 192 | dateFromServer = new Date(); 193 | } 194 | } 195 | ``` 196 | (2)设置3个月时间 197 | 这部分跟上一篇的自定义日历基本一致,但添加了3个月的限制。 198 | ``` 199 | public void renderCalendar(String time) { 200 | months.clear(); 201 | initTime(context, time); 202 | for (int i = 0; i < 3; i++) { 203 | ArrayList cells = new ArrayList<>(); 204 | if (i != 0) { 205 | curDate.add(Calendar.MONTH, 1);//后推一个月 206 | } else { 207 | curDate.add(Calendar.MONTH, 0);//当前月 208 | } 209 | Calendar calendar = (Calendar) curDate.clone(); 210 | //将日历设置到当月第一天 211 | calendar.set(Calendar.DAY_OF_MONTH, 1); 212 | //获得当月第一天是星期几,如果是星期一则返回1此时1-1=0证明上个月没有多余天数 213 | int prevDays = calendar.get(Calendar.DAY_OF_WEEK) - 1; 214 | //将calendar在1号的基础上向前推prevdays天。 215 | calendar.add(Calendar.DAY_OF_MONTH, -prevDays); 216 | //最大行数是6*7也就是,1号正好是星期六时的情况 217 | int maxCellcount = 6 * 7; 218 | while (cells.size() < maxCellcount) { 219 | cells.add(calendar.getTime()); 220 | //日期后移一天 221 | calendar.add(calendar.DAY_OF_MONTH, 1); 222 | } 223 | months.add(new CalendarCell(i, cells)); 224 | } 225 | 226 | firstMonth = dateFromServer.getMonth();//第一个月 227 | secondMonth = months.get(1).getCells().get(20).getMonth();//第二个月 228 | thirdMonth = months.get(2).getCells().get(20).getMonth();//第三个月 229 | for (int i = 0; i < months.size(); i++) { 230 | //title格式 2018年6月3日 231 | String title = (months.get(i).getCells().get(20).getYear() + 1900) + 232 | context.getResources().getString(R.string.year) + 233 | (months.get(i).getCells().get(20).getMonth() + 1) + context.getResources().getString(R.string.month); 234 | titles.add(title); 235 | } 236 | title.setText(titles.get(0)); 237 | //只限定3个月,因此模拟给3个数值即可 238 | mainAdapter = new MainRvAdapter(R.layout.appoint_calendarview_item, months); 239 | recyclerView.setAdapter(mainAdapter); 240 | //recyclerview 的滚动监听 241 | recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { 242 | @Override 243 | public void onScrollStateChanged(RecyclerView recyclerView, int newState) { 244 | title.setText(titles.get(linearLayoutManager.findLastVisibleItemPosition())); 245 | super.onScrollStateChanged(recyclerView, newState); 246 | } 247 | }); 248 | } 249 | 250 | ``` 251 | appoint_calendarview_item.xml 252 | ``` 253 | 254 | 259 | 260 | 261 | ``` 262 | (3)设置最外层水平recyclerview的adapter,需要注意注释的几个点 263 | ``` 264 | /** 265 | * 最外层水平recyclerview的adapter 266 | */ 267 | private class MainRvAdapter extends BaseQuickAdapter { 268 | 269 | public MainRvAdapter(int layoutResId, @Nullable List data) { 270 | super(layoutResId, data); 271 | } 272 | 273 | @Override 274 | protected void convert(BaseViewHolder helper, final CalendarCell item) { 275 | if (((RecyclerView) helper.getView(R.id.appoint_calendarview_item_rv)).getLayoutManager() == null) { 276 | //RecyclerView不能都使用同一个LayoutManager 277 | GridLayoutManager manager = new GridLayoutManager(mContext, 7); 278 | //recyclerview嵌套高度不固定(wrap_content)时必须setAutoMeasureEnabled(true),否则测量时控件高度为0 279 | manager.setAutoMeasureEnabled(true); 280 | ((RecyclerView) helper.getView(R.id.appoint_calendarview_item_rv)).setLayoutManager(manager); 281 | } 282 | SubRvAdapter subRvAdapter = null; 283 | if (allAdapters.get(helper.getPosition()) == null) { 284 | subRvAdapter = new SubRvAdapter(R.layout.calendar_text_day, item.getCells()); 285 | allAdapters.put(helper.getPosition(), subRvAdapter); 286 | ((RecyclerView) helper.getView(R.id.appoint_calendarview_item_rv)).setAdapter(subRvAdapter); 287 | } else { 288 | subRvAdapter = allAdapters.get(helper.getPosition()); 289 | ((RecyclerView) helper.getView(R.id.appoint_calendarview_item_rv)).setAdapter(subRvAdapter); 290 | } 291 | //item 点击事件响应 292 | subRvAdapter.setOnItemClickListener(new OnItemClickListener() { 293 | @Override 294 | public void onItemClick(BaseQuickAdapter adapter, View view, int position) { 295 | Date date = item.getCells().get(position); 296 | int day = date.getDate(); 297 | if (date.getMonth() == secondMonth 298 | || (date.getDate() > dateFromServer.getDate() && date.getMonth() == firstMonth) 299 | || (date.getDate() <= dateFromServer.getDate() && date.getMonth() == thirdMonth)) { 300 | //可点击数据 301 | if (isSelectingSTime) { 302 | //正在选择开始时间 303 | selectSDate(item.getCells().get(position)); 304 | } else { 305 | //正在选择结束时间 306 | selectEDate(item.getCells().get(position)); 307 | } 308 | } 309 | //更新所有的adapter,比如今天6月,需要更新6、7、8三个月份不同adapter 310 | Iterator iterator = allAdapters.entrySet().iterator(); 311 | while (iterator.hasNext()) { 312 | Map.Entry entry = (Map.Entry) iterator.next(); 313 | ((SubRvAdapter) entry.getValue()).notifyDataSetChanged(); 314 | } 315 | } 316 | }); 317 | } 318 | } 319 | ``` 320 | (4)SubRvAdapter 321 | 这里主要是通过时间进行判断,具体逻辑根据效果图考虑 322 | ``` 323 | private class SubRvAdapter extends BaseQuickAdapter { 324 | 325 | public SubRvAdapter(int layoutResId, @Nullable List data) { 326 | super(layoutResId, data); 327 | } 328 | 329 | @Override 330 | protected void convert(BaseViewHolder helper, Date date) { 331 | helper.setIsRecyclable(false);//不让recyclerview进行复用,复用会出问题 332 | ((CalendarDayTextView) helper.getView(R.id.calendar_day_tv)).setEmptyColor(todayEmptyColor); 333 | ((CalendarDayTextView) helper.getView(R.id.calendar_day_tv)).setFillColor(todayFillColor); 334 | int day = date.getDate(); 335 | //设置文本 336 | ((CalendarDayTextView) helper.getView(R.id.calendar_day_tv)).setText(String.valueOf(day)); 337 | //设置颜色 338 | if (date.getMonth() == secondMonth 339 | || (date.getDate() > dateFromServer.getDate() && date.getMonth() == firstMonth) 340 | || (date.getDate() <= dateFromServer.getDate() && date.getMonth() == thirdMonth)) { 341 | //可选时间 342 | ((CalendarDayTextView) helper.getView(R.id.calendar_day_tv)).setTextColor(enableSelectColor); 343 | } else { 344 | //不可选时间 345 | ((CalendarDayTextView) helper.getView(R.id.calendar_day_tv)).setTextColor(disableSeletColor); 346 | } 347 | if (eDateTime != null && date.getTime() == eDateTime.getTime()) { 348 | //结束时间 349 | ((CalendarDayTextView) helper.getView(R.id.calendar_day_tv)).isETime(true); 350 | ((CalendarDayRelativeLayout) helper.getView(R.id.calendar_day_rl)).isETime(true); 351 | } 352 | if (sDateTime != null && date.getTime() == sDateTime.getTime()) { 353 | //开始时间 354 | if (eDateTime != null) { 355 | ((CalendarDayTextView) helper.getView(R.id.calendar_day_tv)).isSTime(true); 356 | ((CalendarDayRelativeLayout) helper.getView(R.id.calendar_day_rl)).isSTime(true); 357 | } else { 358 | ((CalendarDayTextView) helper.getView(R.id.calendar_day_tv)).isSTime(true); 359 | } 360 | } 361 | if (sDateTime != null && eDateTime != null && date.getTime() > sDateTime.getTime() && date.getTime() < eDateTime.getTime()) { 362 | if (date.getDay() == 6) {//星期六 363 | ((CalendarDayRelativeLayout) helper.getView(R.id.calendar_day_rl)).isDurationSat(true); 364 | } else if (date.getDay() == 0) {//星期日 365 | ((CalendarDayRelativeLayout) helper.getView(R.id.calendar_day_rl)).isDurationSun(true); 366 | } else { 367 | helper.getView(R.id.calendar_day_rl).setBackgroundColor(getResources().getColor(R.color.date_duration_bg)); 368 | } 369 | } 370 | if (date.getDate() == dateFromServer.getDate() && date.getMonth() == firstMonth) { 371 | ((CalendarDayTextView) helper.getView(R.id.calendar_day_tv)).setToday(true); 372 | } 373 | } 374 | } 375 | 376 | ``` 377 | SubRvAdapter 需要的对应的布局 378 | ``` 379 | 380 | 388 | 389 | 399 | 400 | 401 | ``` 402 | ## 2、CalendarDayTextView 403 | 404 | 其实这里画笔只需要一个因为开始时间与结束时间样式一样,但是最开始的时候设计的是颜色不一样,所以就写了2个画笔 405 | ``` 406 | public class CalendarDayTextView extends android.support.v7.widget.AppCompatTextView { 407 | public boolean isToday; 408 | private boolean isSTime; 409 | private boolean isETime; 410 | private Context context; 411 | 412 | public void setEmptyColor(int emptyColor) { 413 | this.emptyColor = emptyColor; 414 | } 415 | 416 | public void setFillColor(int fillColor) { 417 | this.fillColor = fillColor; 418 | } 419 | 420 | private int emptyColor = Color.parseColor("#00ff00"); 421 | private int fillColor = Color.parseColor("#00ff00"); 422 | 423 | private Paint mPaintSTime; 424 | private Paint mPaintETime; 425 | 426 | 427 | 428 | public CalendarDayTextView(Context context) { 429 | super(context); 430 | initview(context); 431 | } 432 | 433 | public CalendarDayTextView(Context context, AttributeSet attrs) { 434 | super(context, attrs); 435 | initview(context); 436 | } 437 | 438 | private void initview(Context context) { 439 | this.context=context; 440 | 441 | mPaintSTime = new Paint(Paint.ANTI_ALIAS_FLAG); 442 | mPaintSTime.setStyle(Paint.Style.FILL); 443 | mPaintSTime.setColor(context.getResources().getColor(R.color.date_time_bg)); 444 | mPaintSTime.setStrokeWidth(2); 445 | 446 | mPaintETime = new Paint(Paint.ANTI_ALIAS_FLAG); 447 | mPaintETime.setStyle(Paint.Style.FILL); 448 | mPaintETime.setColor(context.getResources().getColor(R.color.date_time_bg)); 449 | mPaintETime.setStrokeWidth(2); 450 | } 451 | 452 | @Override 453 | protected void onDraw(Canvas canvas) { 454 | //根据当前逻辑开始时间必须先绘制结束时间 455 | if (isETime) { 456 | canvas.save(); 457 | //移动到当前控件的中心,以中心为圆点绘制实心圆 458 | canvas.translate(getWidth() / 2, getHeight() / 2); 459 | canvas.drawCircle(0, 0, getWidth() / 2 , mPaintETime); 460 | canvas.restore(); 461 | //此处必须将圆移动回开始位置,否则文本显示会受到影响 462 | canvas.translate(0, 0); 463 | } 464 | 465 | if (isSTime) { 466 | canvas.save(); 467 | //移动到当前控件的中心,以中心为圆点绘制实心圆 468 | canvas.translate(getWidth() / 2, getHeight() / 2); 469 | canvas.drawCircle(0, 0, getWidth() / 2 , mPaintSTime); 470 | canvas.restore(); 471 | //此处必须将圆移动回开始位置,否则文本显示会受到影响 472 | canvas.translate(0, 0); 473 | } 474 | super.onDraw(canvas); 475 | } 476 | 477 | public void setToday(boolean today) { 478 | isToday = today; 479 | this.setTextColor(context.getResources().getColor(R.color.date_today)); 480 | } 481 | 482 | public void isETime(boolean etime) { 483 | isETime = etime; 484 | this.setTextColor(context.getResources().getColor(R.color.date_time_tv)); 485 | } 486 | 487 | public void isSTime(boolean stime) { 488 | isSTime = stime; 489 | this.setTextColor(context.getResources().getColor(R.color.date_time_tv)); 490 | } 491 | 492 | } 493 | ``` 494 | ## 3.CalendarDayRelativeLayout 495 | 自定义CalendarDayRelativeLayout,来设置不同背景:(1)长方形背景 (2)星期六(有半圆)(3)星期天(左半圆) 496 | ``` 497 | public class CalendarDayRelativeLayout extends RelativeLayout { 498 | public CalendarDayRelativeLayout(Context context) { 499 | this(context, null); 500 | } 501 | 502 | public CalendarDayRelativeLayout(Context context, AttributeSet attrs) { 503 | super(context, attrs); 504 | } 505 | 506 | public void isDurationSat(boolean isSaturday) { 507 | this.setBackground(getResources().getDrawable(R.drawable.appoint_calendar_sat_bg)); 508 | } 509 | 510 | public void isDurationSun(boolean isSunday) { 511 | this.setBackground(getResources().getDrawable(R.drawable.appoint_calendar_sun_bg)); 512 | } 513 | public void isETime(boolean etime) { 514 | this.setBackground(getResources().getDrawable(R.mipmap.appoint_calendar_end_bg));} 515 | public void isSTime(boolean stime) { 516 | this.setBackground(getResources().getDrawable(R.mipmap.appoint_calendar_start_bg)); 517 | } 518 | } 519 | 520 | ``` 521 | -------------------------------------------------------------------------------- /app/src/main/res/values-1024x600/lay_x.xml: -------------------------------------------------------------------------------- 1 | 2 | 0.8px 3 | 1.6px 4 | 2.4px 5 | 3.2px 6 | 4.0px 7 | 4.8px 8 | 5.6px 9 | 6.4px 10 | 7.2px 11 | 8.0px 12 | 8.8px 13 | 9.6px 14 | 10.4px 15 | 11.2px 16 | 12.0px 17 | 12.8px 18 | 13.6px 19 | 14.4px 20 | 15.2px 21 | 16.0px 22 | 16.8px 23 | 17.6px 24 | 18.4px 25 | 19.2px 26 | 20.0px 27 | 20.8px 28 | 21.6px 29 | 22.4px 30 | 23.2px 31 | 24.0px 32 | 24.8px 33 | 25.6px 34 | 26.4px 35 | 27.2px 36 | 28.0px 37 | 28.8px 38 | 29.6px 39 | 30.4px 40 | 31.2px 41 | 32.0px 42 | 32.8px 43 | 33.6px 44 | 34.4px 45 | 35.2px 46 | 36.0px 47 | 36.8px 48 | 37.6px 49 | 38.4px 50 | 39.2px 51 | 40.0px 52 | 40.8px 53 | 41.6px 54 | 42.4px 55 | 43.2px 56 | 44.0px 57 | 44.8px 58 | 45.6px 59 | 46.4px 60 | 47.2px 61 | 48.0px 62 | 48.8px 63 | 49.6px 64 | 50.4px 65 | 51.2px 66 | 52.0px 67 | 52.8px 68 | 53.6px 69 | 54.4px 70 | 55.2px 71 | 56.0px 72 | 56.8px 73 | 57.6px 74 | 58.4px 75 | 59.2px 76 | 60.0px 77 | 60.8px 78 | 61.6px 79 | 62.4px 80 | 63.2px 81 | 64.0px 82 | 64.8px 83 | 65.6px 84 | 66.4px 85 | 67.2px 86 | 68.0px 87 | 68.8px 88 | 69.6px 89 | 70.4px 90 | 71.2px 91 | 72.0px 92 | 72.8px 93 | 73.6px 94 | 74.4px 95 | 75.2px 96 | 76.0px 97 | 76.8px 98 | 77.6px 99 | 78.4px 100 | 79.2px 101 | 80.0px 102 | 80.8px 103 | 81.6px 104 | 82.4px 105 | 83.2px 106 | 84.0px 107 | 84.8px 108 | 85.6px 109 | 86.4px 110 | 87.2px 111 | 88.0px 112 | 88.8px 113 | 89.6px 114 | 90.4px 115 | 91.2px 116 | 92.0px 117 | 92.8px 118 | 93.6px 119 | 94.4px 120 | 95.2px 121 | 96.0px 122 | 96.8px 123 | 97.6px 124 | 98.4px 125 | 99.2px 126 | 100.0px 127 | 100.8px 128 | 101.6px 129 | 102.4px 130 | 103.2px 131 | 104.0px 132 | 104.8px 133 | 105.6px 134 | 106.4px 135 | 107.2px 136 | 108.0px 137 | 108.8px 138 | 109.6px 139 | 110.4px 140 | 111.2px 141 | 112.0px 142 | 112.8px 143 | 113.6px 144 | 114.4px 145 | 115.2px 146 | 116.0px 147 | 116.8px 148 | 117.6px 149 | 118.4px 150 | 119.2px 151 | 120.0px 152 | 120.8px 153 | 121.6px 154 | 122.4px 155 | 123.2px 156 | 124.0px 157 | 124.8px 158 | 125.6px 159 | 126.4px 160 | 127.2px 161 | 128.0px 162 | 128.8px 163 | 129.6px 164 | 130.4px 165 | 131.2px 166 | 132.0px 167 | 132.8px 168 | 133.6px 169 | 134.4px 170 | 135.2px 171 | 136.0px 172 | 136.8px 173 | 137.6px 174 | 138.4px 175 | 139.2px 176 | 140.0px 177 | 140.8px 178 | 141.6px 179 | 142.4px 180 | 143.2px 181 | 144.0px 182 | 144.8px 183 | 145.6px 184 | 146.4px 185 | 147.2px 186 | 148.0px 187 | 148.8px 188 | 149.6px 189 | 150.4px 190 | 151.2px 191 | 152.0px 192 | 152.8px 193 | 153.6px 194 | 154.4px 195 | 155.2px 196 | 156.0px 197 | 156.8px 198 | 157.6px 199 | 158.4px 200 | 159.2px 201 | 160.0px 202 | 160.8px 203 | 161.6px 204 | 162.4px 205 | 163.2px 206 | 164.0px 207 | 164.8px 208 | 165.6px 209 | 166.4px 210 | 167.2px 211 | 168.0px 212 | 168.8px 213 | 169.6px 214 | 170.4px 215 | 171.2px 216 | 172.0px 217 | 172.8px 218 | 173.6px 219 | 174.4px 220 | 175.2px 221 | 176.0px 222 | 176.8px 223 | 177.6px 224 | 178.4px 225 | 179.2px 226 | 180.0px 227 | 180.8px 228 | 181.6px 229 | 182.4px 230 | 183.2px 231 | 184.0px 232 | 184.8px 233 | 185.6px 234 | 186.4px 235 | 187.2px 236 | 188.0px 237 | 188.8px 238 | 189.6px 239 | 190.4px 240 | 191.2px 241 | 192.0px 242 | 192.8px 243 | 193.6px 244 | 194.4px 245 | 195.2px 246 | 196.0px 247 | 196.8px 248 | 197.6px 249 | 198.4px 250 | 199.2px 251 | 200.0px 252 | 200.8px 253 | 201.6px 254 | 202.4px 255 | 203.2px 256 | 204.0px 257 | 204.8px 258 | 205.6px 259 | 206.4px 260 | 207.2px 261 | 208.0px 262 | 208.8px 263 | 209.6px 264 | 210.4px 265 | 211.2px 266 | 212.0px 267 | 212.8px 268 | 213.6px 269 | 214.4px 270 | 215.2px 271 | 216.0px 272 | 216.8px 273 | 217.6px 274 | 218.4px 275 | 219.2px 276 | 220.0px 277 | 220.8px 278 | 221.6px 279 | 222.4px 280 | 223.2px 281 | 224.0px 282 | 224.8px 283 | 225.6px 284 | 226.4px 285 | 227.2px 286 | 228.0px 287 | 228.8px 288 | 229.6px 289 | 230.4px 290 | 231.2px 291 | 232.0px 292 | 232.8px 293 | 233.6px 294 | 234.4px 295 | 235.2px 296 | 236.0px 297 | 236.8px 298 | 237.6px 299 | 238.4px 300 | 239.2px 301 | 240.0px 302 | 240.8px 303 | 241.6px 304 | 242.4px 305 | 243.2px 306 | 244.0px 307 | 244.8px 308 | 245.6px 309 | 246.4px 310 | 247.2px 311 | 248.0px 312 | 248.8px 313 | 249.6px 314 | 250.4px 315 | 251.2px 316 | 252.0px 317 | 252.8px 318 | 253.6px 319 | 254.4px 320 | 255.2px 321 | 256.0px 322 | 256.8px 323 | 257.6px 324 | 258.4px 325 | 259.2px 326 | 260.0px 327 | 260.8px 328 | 261.6px 329 | 262.4px 330 | 263.2px 331 | 264.0px 332 | 264.8px 333 | 265.6px 334 | 266.4px 335 | 267.2px 336 | 268.0px 337 | 268.8px 338 | 269.6px 339 | 270.4px 340 | 271.2px 341 | 272.0px 342 | 272.8px 343 | 273.6px 344 | 274.4px 345 | 275.2px 346 | 276.0px 347 | 276.8px 348 | 277.6px 349 | 278.4px 350 | 279.2px 351 | 280.0px 352 | 280.8px 353 | 281.6px 354 | 282.4px 355 | 283.2px 356 | 284.0px 357 | 284.8px 358 | 285.6px 359 | 286.4px 360 | 287.2px 361 | 288.0px 362 | 288.8px 363 | 289.6px 364 | 290.4px 365 | 291.2px 366 | 292.0px 367 | 292.8px 368 | 293.6px 369 | 294.4px 370 | 295.2px 371 | 296.0px 372 | 296.8px 373 | 297.6px 374 | 298.4px 375 | 299.2px 376 | 300.0px 377 | 300.8px 378 | 301.6px 379 | 302.4px 380 | 303.2px 381 | 304.0px 382 | 304.8px 383 | 305.6px 384 | 306.4px 385 | 307.2px 386 | 308.0px 387 | 308.8px 388 | 309.6px 389 | 310.4px 390 | 311.2px 391 | 312.0px 392 | 312.8px 393 | 313.6px 394 | 314.4px 395 | 315.2px 396 | 316.0px 397 | 316.8px 398 | 317.6px 399 | 318.4px 400 | 319.2px 401 | 320.0px 402 | 320.8px 403 | 321.6px 404 | 322.4px 405 | 323.2px 406 | 324.0px 407 | 324.8px 408 | 325.6px 409 | 326.4px 410 | 327.2px 411 | 328.0px 412 | 328.8px 413 | 329.6px 414 | 330.4px 415 | 331.2px 416 | 332.0px 417 | 332.8px 418 | 333.6px 419 | 334.4px 420 | 335.2px 421 | 336.0px 422 | 336.8px 423 | 337.6px 424 | 338.4px 425 | 339.2px 426 | 340.0px 427 | 340.8px 428 | 341.6px 429 | 342.4px 430 | 343.2px 431 | 344.0px 432 | 344.8px 433 | 345.6px 434 | 346.4px 435 | 347.2px 436 | 348.0px 437 | 348.8px 438 | 349.6px 439 | 350.4px 440 | 351.2px 441 | 352.0px 442 | 352.8px 443 | 353.6px 444 | 354.4px 445 | 355.2px 446 | 356.0px 447 | 356.8px 448 | 357.6px 449 | 358.4px 450 | 359.2px 451 | 360.0px 452 | 360.8px 453 | 361.6px 454 | 362.4px 455 | 363.2px 456 | 364.0px 457 | 364.8px 458 | 365.6px 459 | 366.4px 460 | 367.2px 461 | 368.0px 462 | 368.8px 463 | 369.6px 464 | 370.4px 465 | 371.2px 466 | 372.0px 467 | 372.8px 468 | 373.6px 469 | 374.4px 470 | 375.2px 471 | 376.0px 472 | 376.8px 473 | 377.6px 474 | 378.4px 475 | 379.2px 476 | 380.0px 477 | 380.8px 478 | 381.6px 479 | 382.4px 480 | 383.2px 481 | 384.0px 482 | 384.8px 483 | 385.6px 484 | 386.4px 485 | 387.2px 486 | 388.0px 487 | 388.8px 488 | 389.6px 489 | 390.4px 490 | 391.2px 491 | 392.0px 492 | 392.8px 493 | 393.6px 494 | 394.4px 495 | 395.2px 496 | 396.0px 497 | 396.8px 498 | 397.6px 499 | 398.4px 500 | 399.2px 501 | 400.0px 502 | 400.8px 503 | 401.6px 504 | 402.4px 505 | 403.2px 506 | 404.0px 507 | 404.8px 508 | 405.6px 509 | 406.4px 510 | 407.2px 511 | 408.0px 512 | 408.8px 513 | 409.6px 514 | 410.4px 515 | 411.2px 516 | 412.0px 517 | 412.8px 518 | 413.6px 519 | 414.4px 520 | 415.2px 521 | 416.0px 522 | 416.8px 523 | 417.6px 524 | 418.4px 525 | 419.2px 526 | 420.0px 527 | 420.8px 528 | 421.6px 529 | 422.4px 530 | 423.2px 531 | 424.0px 532 | 424.8px 533 | 425.6px 534 | 426.4px 535 | 427.2px 536 | 428.0px 537 | 428.8px 538 | 429.6px 539 | 430.4px 540 | 431.2px 541 | 432.0px 542 | 432.8px 543 | 433.6px 544 | 434.4px 545 | 435.2px 546 | 436.0px 547 | 436.8px 548 | 437.6px 549 | 438.4px 550 | 439.2px 551 | 440.0px 552 | 440.8px 553 | 441.6px 554 | 442.4px 555 | 443.2px 556 | 444.0px 557 | 444.8px 558 | 445.6px 559 | 446.4px 560 | 447.2px 561 | 448.0px 562 | 448.8px 563 | 449.6px 564 | 450.4px 565 | 451.2px 566 | 452.0px 567 | 452.8px 568 | 453.6px 569 | 454.4px 570 | 455.2px 571 | 456.0px 572 | 456.8px 573 | 457.6px 574 | 458.4px 575 | 459.2px 576 | 460.0px 577 | 460.8px 578 | 461.6px 579 | 462.4px 580 | 463.2px 581 | 464.0px 582 | 464.8px 583 | 465.6px 584 | 466.4px 585 | 467.2px 586 | 468.0px 587 | 468.8px 588 | 469.6px 589 | 470.4px 590 | 471.2px 591 | 472.0px 592 | 472.8px 593 | 473.6px 594 | 474.4px 595 | 475.2px 596 | 476.0px 597 | 476.8px 598 | 477.6px 599 | 478.4px 600 | 479.2px 601 | 480.0px 602 | 480.8px 603 | 481.6px 604 | 482.4px 605 | 483.2px 606 | 484.0px 607 | 484.8px 608 | 485.6px 609 | 486.4px 610 | 487.2px 611 | 488.0px 612 | 488.8px 613 | 489.6px 614 | 490.4px 615 | 491.2px 616 | 492.0px 617 | 492.8px 618 | 493.6px 619 | 494.4px 620 | 495.2px 621 | 496.0px 622 | 496.8px 623 | 497.6px 624 | 498.4px 625 | 499.2px 626 | 500.0px 627 | 500.8px 628 | 501.6px 629 | 502.4px 630 | 503.2px 631 | 504.0px 632 | 504.8px 633 | 505.6px 634 | 506.4px 635 | 507.2px 636 | 508.0px 637 | 508.8px 638 | 509.6px 639 | 510.4px 640 | 511.2px 641 | 512.0px 642 | 512.8px 643 | 513.6px 644 | 514.4px 645 | 515.2px 646 | 516.0px 647 | 516.8px 648 | 517.6px 649 | 518.4px 650 | 519.2px 651 | 520.0px 652 | 520.8px 653 | 521.6px 654 | 522.4px 655 | 523.2px 656 | 524.0px 657 | 524.8px 658 | 525.6px 659 | 526.4px 660 | 527.2px 661 | 528.0px 662 | 528.8px 663 | 529.6px 664 | 530.4px 665 | 531.2px 666 | 532.0px 667 | 532.8px 668 | 533.6px 669 | 534.4px 670 | 535.2px 671 | 536.0px 672 | 536.8px 673 | 537.6px 674 | 538.4px 675 | 539.2px 676 | 540.0px 677 | 540.8px 678 | 541.6px 679 | 542.4px 680 | 543.2px 681 | 544.0px 682 | 544.8px 683 | 545.6px 684 | 546.4px 685 | 547.2px 686 | 548.0px 687 | 548.8px 688 | 549.6px 689 | 550.4px 690 | 551.2px 691 | 552.0px 692 | 552.8px 693 | 553.6px 694 | 554.4px 695 | 555.2px 696 | 556.0px 697 | 556.8px 698 | 557.6px 699 | 558.4px 700 | 559.2px 701 | 560.0px 702 | 560.8px 703 | 561.6px 704 | 562.4px 705 | 563.2px 706 | 564.0px 707 | 564.8px 708 | 565.6px 709 | 566.4px 710 | 567.2px 711 | 568.0px 712 | 568.8px 713 | 569.6px 714 | 570.4px 715 | 571.2px 716 | 572.0px 717 | 572.8px 718 | 573.6px 719 | 574.4px 720 | 575.2px 721 | 576.0px 722 | 576.8px 723 | 577.6px 724 | 578.4px 725 | 579.2px 726 | 580.0px 727 | 580.8px 728 | 581.6px 729 | 582.4px 730 | 583.2px 731 | 584.0px 732 | 584.8px 733 | 585.6px 734 | 586.4px 735 | 587.2px 736 | 588.0px 737 | 588.8px 738 | 589.6px 739 | 590.4px 740 | 591.2px 741 | 592.0px 742 | 592.8px 743 | 593.6px 744 | 594.4px 745 | 595.2px 746 | 596.0px 747 | 596.8px 748 | 597.6px 749 | 598.4px 750 | 599.2px 751 | 600px 752 | -------------------------------------------------------------------------------- /app/src/main/res/values-1920x1200/lay_x.xml: -------------------------------------------------------------------------------- 1 | 2 | 1.6px 3 | 3.2px 4 | 4.8px 5 | 6.4px 6 | 8.0px 7 | 9.6px 8 | 11.2px 9 | 12.8px 10 | 14.4px 11 | 16.0px 12 | 17.6px 13 | 19.2px 14 | 20.8px 15 | 22.4px 16 | 24.0px 17 | 25.6px 18 | 27.2px 19 | 28.8px 20 | 30.4px 21 | 32.0px 22 | 33.6px 23 | 35.2px 24 | 36.8px 25 | 38.4px 26 | 40.0px 27 | 41.6px 28 | 43.2px 29 | 44.8px 30 | 46.4px 31 | 48.0px 32 | 49.6px 33 | 51.2px 34 | 52.8px 35 | 54.4px 36 | 56.0px 37 | 57.6px 38 | 59.2px 39 | 60.8px 40 | 62.4px 41 | 64.0px 42 | 65.6px 43 | 67.2px 44 | 68.8px 45 | 70.4px 46 | 72.0px 47 | 73.6px 48 | 75.2px 49 | 76.8px 50 | 78.4px 51 | 80.0px 52 | 81.6px 53 | 83.2px 54 | 84.8px 55 | 86.4px 56 | 88.0px 57 | 89.6px 58 | 91.2px 59 | 92.8px 60 | 94.4px 61 | 96.0px 62 | 97.6px 63 | 99.2px 64 | 100.8px 65 | 102.4px 66 | 104.0px 67 | 105.6px 68 | 107.2px 69 | 108.8px 70 | 110.4px 71 | 112.0px 72 | 113.6px 73 | 115.2px 74 | 116.8px 75 | 118.4px 76 | 120.0px 77 | 121.6px 78 | 123.2px 79 | 124.8px 80 | 126.4px 81 | 128.0px 82 | 129.6px 83 | 131.2px 84 | 132.8px 85 | 134.4px 86 | 136.0px 87 | 137.6px 88 | 139.2px 89 | 140.8px 90 | 142.4px 91 | 144.0px 92 | 145.6px 93 | 147.2px 94 | 148.8px 95 | 150.4px 96 | 152.0px 97 | 153.6px 98 | 155.2px 99 | 156.8px 100 | 158.4px 101 | 160.0px 102 | 161.6px 103 | 163.2px 104 | 164.8px 105 | 166.4px 106 | 168.0px 107 | 169.6px 108 | 171.2px 109 | 172.8px 110 | 174.4px 111 | 176.0px 112 | 177.6px 113 | 179.2px 114 | 180.8px 115 | 182.4px 116 | 184.0px 117 | 185.6px 118 | 187.2px 119 | 188.8px 120 | 190.4px 121 | 192.0px 122 | 193.6px 123 | 195.2px 124 | 196.8px 125 | 198.4px 126 | 200.0px 127 | 201.6px 128 | 203.2px 129 | 204.8px 130 | 206.4px 131 | 208.0px 132 | 209.6px 133 | 211.2px 134 | 212.8px 135 | 214.4px 136 | 216.0px 137 | 217.6px 138 | 219.2px 139 | 220.8px 140 | 222.4px 141 | 224.0px 142 | 225.6px 143 | 227.2px 144 | 228.8px 145 | 230.4px 146 | 232.0px 147 | 233.6px 148 | 235.2px 149 | 236.8px 150 | 238.4px 151 | 240.0px 152 | 241.6px 153 | 243.2px 154 | 244.8px 155 | 246.4px 156 | 248.0px 157 | 249.6px 158 | 251.2px 159 | 252.8px 160 | 254.4px 161 | 256.0px 162 | 257.6px 163 | 259.2px 164 | 260.8px 165 | 262.4px 166 | 264.0px 167 | 265.6px 168 | 267.2px 169 | 268.8px 170 | 270.4px 171 | 272.0px 172 | 273.6px 173 | 275.2px 174 | 276.8px 175 | 278.4px 176 | 280.0px 177 | 281.6px 178 | 283.2px 179 | 284.8px 180 | 286.4px 181 | 288.0px 182 | 289.6px 183 | 291.2px 184 | 292.8px 185 | 294.4px 186 | 296.0px 187 | 297.6px 188 | 299.2px 189 | 300.8px 190 | 302.4px 191 | 304.0px 192 | 305.6px 193 | 307.2px 194 | 308.8px 195 | 310.4px 196 | 312.0px 197 | 313.6px 198 | 315.2px 199 | 316.8px 200 | 318.4px 201 | 320.0px 202 | 321.6px 203 | 323.2px 204 | 324.8px 205 | 326.4px 206 | 328.0px 207 | 329.6px 208 | 331.2px 209 | 332.8px 210 | 334.4px 211 | 336.0px 212 | 337.6px 213 | 339.2px 214 | 340.8px 215 | 342.4px 216 | 344.0px 217 | 345.6px 218 | 347.2px 219 | 348.8px 220 | 350.4px 221 | 352.0px 222 | 353.6px 223 | 355.2px 224 | 356.8px 225 | 358.4px 226 | 360.0px 227 | 361.6px 228 | 363.2px 229 | 364.8px 230 | 366.4px 231 | 368.0px 232 | 369.6px 233 | 371.2px 234 | 372.8px 235 | 374.4px 236 | 376.0px 237 | 377.6px 238 | 379.2px 239 | 380.8px 240 | 382.4px 241 | 384.0px 242 | 385.6px 243 | 387.2px 244 | 388.8px 245 | 390.4px 246 | 392.0px 247 | 393.6px 248 | 395.2px 249 | 396.8px 250 | 398.4px 251 | 400.0px 252 | 401.6px 253 | 403.2px 254 | 404.8px 255 | 406.4px 256 | 408.0px 257 | 409.6px 258 | 411.2px 259 | 412.8px 260 | 414.4px 261 | 416.0px 262 | 417.6px 263 | 419.2px 264 | 420.8px 265 | 422.4px 266 | 424.0px 267 | 425.6px 268 | 427.2px 269 | 428.8px 270 | 430.4px 271 | 432.0px 272 | 433.6px 273 | 435.2px 274 | 436.8px 275 | 438.4px 276 | 440.0px 277 | 441.6px 278 | 443.2px 279 | 444.8px 280 | 446.4px 281 | 448.0px 282 | 449.6px 283 | 451.2px 284 | 452.8px 285 | 454.4px 286 | 456.0px 287 | 457.6px 288 | 459.2px 289 | 460.8px 290 | 462.4px 291 | 464.0px 292 | 465.6px 293 | 467.2px 294 | 468.8px 295 | 470.4px 296 | 472.0px 297 | 473.6px 298 | 475.2px 299 | 476.8px 300 | 478.4px 301 | 480.0px 302 | 481.6px 303 | 483.2px 304 | 484.8px 305 | 486.4px 306 | 488.0px 307 | 489.6px 308 | 491.2px 309 | 492.8px 310 | 494.4px 311 | 496.0px 312 | 497.6px 313 | 499.2px 314 | 500.8px 315 | 502.4px 316 | 504.0px 317 | 505.6px 318 | 507.2px 319 | 508.8px 320 | 510.4px 321 | 512.0px 322 | 513.6px 323 | 515.2px 324 | 516.8px 325 | 518.4px 326 | 520.0px 327 | 521.6px 328 | 523.2px 329 | 524.8px 330 | 526.4px 331 | 528.0px 332 | 529.6px 333 | 531.2px 334 | 532.8px 335 | 534.4px 336 | 536.0px 337 | 537.6px 338 | 539.2px 339 | 540.8px 340 | 542.4px 341 | 544.0px 342 | 545.6px 343 | 547.2px 344 | 548.8px 345 | 550.4px 346 | 552.0px 347 | 553.6px 348 | 555.2px 349 | 556.8px 350 | 558.4px 351 | 560.0px 352 | 561.6px 353 | 563.2px 354 | 564.8px 355 | 566.4px 356 | 568.0px 357 | 569.6px 358 | 571.2px 359 | 572.8px 360 | 574.4px 361 | 576.0px 362 | 577.6px 363 | 579.2px 364 | 580.8px 365 | 582.4px 366 | 584.0px 367 | 585.6px 368 | 587.2px 369 | 588.8px 370 | 590.4px 371 | 592.0px 372 | 593.6px 373 | 595.2px 374 | 596.8px 375 | 598.4px 376 | 600.0px 377 | 601.6px 378 | 603.2px 379 | 604.8px 380 | 606.4px 381 | 608.0px 382 | 609.6px 383 | 611.2px 384 | 612.8px 385 | 614.4px 386 | 616.0px 387 | 617.6px 388 | 619.2px 389 | 620.8px 390 | 622.4px 391 | 624.0px 392 | 625.6px 393 | 627.2px 394 | 628.8px 395 | 630.4px 396 | 632.0px 397 | 633.6px 398 | 635.2px 399 | 636.8px 400 | 638.4px 401 | 640.0px 402 | 641.6px 403 | 643.2px 404 | 644.8px 405 | 646.4px 406 | 648.0px 407 | 649.6px 408 | 651.2px 409 | 652.8px 410 | 654.4px 411 | 656.0px 412 | 657.6px 413 | 659.2px 414 | 660.8px 415 | 662.4px 416 | 664.0px 417 | 665.6px 418 | 667.2px 419 | 668.8px 420 | 670.4px 421 | 672.0px 422 | 673.6px 423 | 675.2px 424 | 676.8px 425 | 678.4px 426 | 680.0px 427 | 681.6px 428 | 683.2px 429 | 684.8px 430 | 686.4px 431 | 688.0px 432 | 689.6px 433 | 691.2px 434 | 692.8px 435 | 694.4px 436 | 696.0px 437 | 697.6px 438 | 699.2px 439 | 700.8px 440 | 702.4px 441 | 704.0px 442 | 705.6px 443 | 707.2px 444 | 708.8px 445 | 710.4px 446 | 712.0px 447 | 713.6px 448 | 715.2px 449 | 716.8px 450 | 718.4px 451 | 720.0px 452 | 721.6px 453 | 723.2px 454 | 724.8px 455 | 726.4px 456 | 728.0px 457 | 729.6px 458 | 731.2px 459 | 732.8px 460 | 734.4px 461 | 736.0px 462 | 737.6px 463 | 739.2px 464 | 740.8px 465 | 742.4px 466 | 744.0px 467 | 745.6px 468 | 747.2px 469 | 748.8px 470 | 750.4px 471 | 752.0px 472 | 753.6px 473 | 755.2px 474 | 756.8px 475 | 758.4px 476 | 760.0px 477 | 761.6px 478 | 763.2px 479 | 764.8px 480 | 766.4px 481 | 768.0px 482 | 769.6px 483 | 771.2px 484 | 772.8px 485 | 774.4px 486 | 776.0px 487 | 777.6px 488 | 779.2px 489 | 780.8px 490 | 782.4px 491 | 784.0px 492 | 785.6px 493 | 787.2px 494 | 788.8px 495 | 790.4px 496 | 792.0px 497 | 793.6px 498 | 795.2px 499 | 796.8px 500 | 798.4px 501 | 800.0px 502 | 801.6px 503 | 803.2px 504 | 804.8px 505 | 806.4px 506 | 808.0px 507 | 809.6px 508 | 811.2px 509 | 812.8px 510 | 814.4px 511 | 816.0px 512 | 817.6px 513 | 819.2px 514 | 820.8px 515 | 822.4px 516 | 824.0px 517 | 825.6px 518 | 827.2px 519 | 828.8px 520 | 830.4px 521 | 832.0px 522 | 833.6px 523 | 835.2px 524 | 836.8px 525 | 838.4px 526 | 840.0px 527 | 841.6px 528 | 843.2px 529 | 844.8px 530 | 846.4px 531 | 848.0px 532 | 849.6px 533 | 851.2px 534 | 852.8px 535 | 854.4px 536 | 856.0px 537 | 857.6px 538 | 859.2px 539 | 860.8px 540 | 862.4px 541 | 864.0px 542 | 865.6px 543 | 867.2px 544 | 868.8px 545 | 870.4px 546 | 872.0px 547 | 873.6px 548 | 875.2px 549 | 876.8px 550 | 878.4px 551 | 880.0px 552 | 881.6px 553 | 883.2px 554 | 884.8px 555 | 886.4px 556 | 888.0px 557 | 889.6px 558 | 891.2px 559 | 892.8px 560 | 894.4px 561 | 896.0px 562 | 897.6px 563 | 899.2px 564 | 900.8px 565 | 902.4px 566 | 904.0px 567 | 905.6px 568 | 907.2px 569 | 908.8px 570 | 910.4px 571 | 912.0px 572 | 913.6px 573 | 915.2px 574 | 916.8px 575 | 918.4px 576 | 920.0px 577 | 921.6px 578 | 923.2px 579 | 924.8px 580 | 926.4px 581 | 928.0px 582 | 929.6px 583 | 931.2px 584 | 932.8px 585 | 934.4px 586 | 936.0px 587 | 937.6px 588 | 939.2px 589 | 940.8px 590 | 942.4px 591 | 944.0px 592 | 945.6px 593 | 947.2px 594 | 948.8px 595 | 950.4px 596 | 952.0px 597 | 953.6px 598 | 955.2px 599 | 956.8px 600 | 958.4px 601 | 960.0px 602 | 961.6px 603 | 963.2px 604 | 964.8px 605 | 966.4px 606 | 968.0px 607 | 969.6px 608 | 971.2px 609 | 972.8px 610 | 974.4px 611 | 976.0px 612 | 977.6px 613 | 979.2px 614 | 980.8px 615 | 982.4px 616 | 984.0px 617 | 985.6px 618 | 987.2px 619 | 988.8px 620 | 990.4px 621 | 992.0px 622 | 993.6px 623 | 995.2px 624 | 996.8px 625 | 998.4px 626 | 1000.0px 627 | 1001.6px 628 | 1003.2px 629 | 1004.8px 630 | 1006.4px 631 | 1008.0px 632 | 1009.6px 633 | 1011.2px 634 | 1012.8px 635 | 1014.4px 636 | 1016.0px 637 | 1017.6px 638 | 1019.2px 639 | 1020.8px 640 | 1022.4px 641 | 1024.0px 642 | 1025.6px 643 | 1027.2px 644 | 1028.8px 645 | 1030.4px 646 | 1032.0px 647 | 1033.6px 648 | 1035.2px 649 | 1036.8px 650 | 1038.4px 651 | 1040.0px 652 | 1041.6px 653 | 1043.2px 654 | 1044.8px 655 | 1046.4px 656 | 1048.0px 657 | 1049.6px 658 | 1051.2px 659 | 1052.8px 660 | 1054.4px 661 | 1056.0px 662 | 1057.6px 663 | 1059.2px 664 | 1060.8px 665 | 1062.4px 666 | 1064.0px 667 | 1065.6px 668 | 1067.2px 669 | 1068.8px 670 | 1070.4px 671 | 1072.0px 672 | 1073.6px 673 | 1075.2px 674 | 1076.8px 675 | 1078.4px 676 | 1080.0px 677 | 1081.6px 678 | 1083.2px 679 | 1084.8px 680 | 1086.4px 681 | 1088.0px 682 | 1089.6px 683 | 1091.2px 684 | 1092.8px 685 | 1094.4px 686 | 1096.0px 687 | 1097.6px 688 | 1099.2px 689 | 1100.8px 690 | 1102.4px 691 | 1104.0px 692 | 1105.6px 693 | 1107.2px 694 | 1108.8px 695 | 1110.4px 696 | 1112.0px 697 | 1113.6px 698 | 1115.2px 699 | 1116.8px 700 | 1118.4px 701 | 1120.0px 702 | 1121.6px 703 | 1123.2px 704 | 1124.8px 705 | 1126.4px 706 | 1128.0px 707 | 1129.6px 708 | 1131.2px 709 | 1132.8px 710 | 1134.4px 711 | 1136.0px 712 | 1137.6px 713 | 1139.2px 714 | 1140.8px 715 | 1142.4px 716 | 1144.0px 717 | 1145.6px 718 | 1147.2px 719 | 1148.8px 720 | 1150.4px 721 | 1152.0px 722 | 1153.6px 723 | 1155.2px 724 | 1156.8px 725 | 1158.4px 726 | 1160.0px 727 | 1161.6px 728 | 1163.2px 729 | 1164.8px 730 | 1166.4px 731 | 1168.0px 732 | 1169.6px 733 | 1171.2px 734 | 1172.8px 735 | 1174.4px 736 | 1176.0px 737 | 1177.6px 738 | 1179.2px 739 | 1180.8px 740 | 1182.4px 741 | 1184.0px 742 | 1185.6px 743 | 1187.2px 744 | 1188.8px 745 | 1190.4px 746 | 1192.0px 747 | 1193.6px 748 | 1195.2px 749 | 1196.8px 750 | 1198.4px 751 | 1200px 752 | -------------------------------------------------------------------------------- /app/src/main/res/values-400x320/lay_x.xml: -------------------------------------------------------------------------------- 1 | 2 | 0.42px 3 | 0.85px 4 | 1.28px 5 | 1.7px 6 | 2.13px 7 | 2.56px 8 | 2.98px 9 | 3.41px 10 | 3.84px 11 | 4.26px 12 | 4.69px 13 | 5.12px 14 | 5.54px 15 | 5.97px 16 | 6.4px 17 | 6.82px 18 | 7.25px 19 | 7.68px 20 | 8.1px 21 | 8.53px 22 | 8.96px 23 | 9.38px 24 | 9.81px 25 | 10.24px 26 | 10.66px 27 | 11.09px 28 | 11.52px 29 | 11.94px 30 | 12.37px 31 | 12.8px 32 | 13.22px 33 | 13.65px 34 | 14.08px 35 | 14.5px 36 | 14.93px 37 | 15.36px 38 | 15.78px 39 | 16.21px 40 | 16.64px 41 | 17.06px 42 | 17.49px 43 | 17.92px 44 | 18.34px 45 | 18.77px 46 | 19.2px 47 | 19.62px 48 | 20.05px 49 | 20.48px 50 | 20.9px 51 | 21.33px 52 | 21.76px 53 | 22.18px 54 | 22.61px 55 | 23.04px 56 | 23.46px 57 | 23.89px 58 | 24.32px 59 | 24.74px 60 | 25.17px 61 | 25.6px 62 | 26.02px 63 | 26.45px 64 | 26.88px 65 | 27.3px 66 | 27.73px 67 | 28.16px 68 | 28.58px 69 | 29.01px 70 | 29.44px 71 | 29.86px 72 | 30.29px 73 | 30.72px 74 | 31.14px 75 | 31.57px 76 | 32.0px 77 | 32.42px 78 | 32.85px 79 | 33.28px 80 | 33.7px 81 | 34.13px 82 | 34.56px 83 | 34.98px 84 | 35.41px 85 | 35.84px 86 | 36.26px 87 | 36.69px 88 | 37.12px 89 | 37.54px 90 | 37.97px 91 | 38.4px 92 | 38.82px 93 | 39.25px 94 | 39.68px 95 | 40.1px 96 | 40.53px 97 | 40.96px 98 | 41.38px 99 | 41.81px 100 | 42.24px 101 | 42.66px 102 | 43.09px 103 | 43.52px 104 | 43.94px 105 | 44.37px 106 | 44.8px 107 | 45.22px 108 | 45.65px 109 | 46.08px 110 | 46.5px 111 | 46.93px 112 | 47.36px 113 | 47.78px 114 | 48.21px 115 | 48.64px 116 | 49.06px 117 | 49.49px 118 | 49.92px 119 | 50.34px 120 | 50.77px 121 | 51.2px 122 | 51.62px 123 | 52.05px 124 | 52.48px 125 | 52.9px 126 | 53.33px 127 | 53.76px 128 | 54.18px 129 | 54.61px 130 | 55.04px 131 | 55.46px 132 | 55.89px 133 | 56.32px 134 | 56.74px 135 | 57.17px 136 | 57.6px 137 | 58.02px 138 | 58.45px 139 | 58.88px 140 | 59.3px 141 | 59.73px 142 | 60.16px 143 | 60.58px 144 | 61.01px 145 | 61.44px 146 | 61.86px 147 | 62.29px 148 | 62.72px 149 | 63.14px 150 | 63.57px 151 | 64.0px 152 | 64.42px 153 | 64.85px 154 | 65.28px 155 | 65.7px 156 | 66.13px 157 | 66.56px 158 | 66.98px 159 | 67.41px 160 | 67.84px 161 | 68.26px 162 | 68.69px 163 | 69.12px 164 | 69.54px 165 | 69.97px 166 | 70.4px 167 | 70.82px 168 | 71.25px 169 | 71.68px 170 | 72.1px 171 | 72.53px 172 | 72.96px 173 | 73.38px 174 | 73.81px 175 | 74.24px 176 | 74.66px 177 | 75.09px 178 | 75.52px 179 | 75.94px 180 | 76.37px 181 | 76.8px 182 | 77.22px 183 | 77.65px 184 | 78.08px 185 | 78.5px 186 | 78.93px 187 | 79.36px 188 | 79.78px 189 | 80.21px 190 | 80.64px 191 | 81.06px 192 | 81.49px 193 | 81.92px 194 | 82.34px 195 | 82.77px 196 | 83.2px 197 | 83.62px 198 | 84.05px 199 | 84.48px 200 | 84.9px 201 | 85.33px 202 | 85.76px 203 | 86.18px 204 | 86.61px 205 | 87.04px 206 | 87.46px 207 | 87.89px 208 | 88.32px 209 | 88.74px 210 | 89.17px 211 | 89.6px 212 | 90.02px 213 | 90.45px 214 | 90.88px 215 | 91.3px 216 | 91.73px 217 | 92.16px 218 | 92.58px 219 | 93.01px 220 | 93.44px 221 | 93.86px 222 | 94.29px 223 | 94.72px 224 | 95.14px 225 | 95.57px 226 | 96.0px 227 | 96.42px 228 | 96.85px 229 | 97.28px 230 | 97.7px 231 | 98.13px 232 | 98.56px 233 | 98.98px 234 | 99.41px 235 | 99.84px 236 | 100.26px 237 | 100.69px 238 | 101.12px 239 | 101.54px 240 | 101.97px 241 | 102.4px 242 | 102.82px 243 | 103.25px 244 | 103.68px 245 | 104.1px 246 | 104.53px 247 | 104.96px 248 | 105.38px 249 | 105.81px 250 | 106.24px 251 | 106.66px 252 | 107.09px 253 | 107.52px 254 | 107.94px 255 | 108.37px 256 | 108.8px 257 | 109.22px 258 | 109.65px 259 | 110.08px 260 | 110.5px 261 | 110.93px 262 | 111.36px 263 | 111.78px 264 | 112.21px 265 | 112.64px 266 | 113.06px 267 | 113.49px 268 | 113.92px 269 | 114.34px 270 | 114.77px 271 | 115.2px 272 | 115.62px 273 | 116.05px 274 | 116.48px 275 | 116.9px 276 | 117.33px 277 | 117.76px 278 | 118.18px 279 | 118.61px 280 | 119.04px 281 | 119.46px 282 | 119.89px 283 | 120.32px 284 | 120.74px 285 | 121.17px 286 | 121.6px 287 | 122.02px 288 | 122.45px 289 | 122.88px 290 | 123.3px 291 | 123.73px 292 | 124.16px 293 | 124.58px 294 | 125.01px 295 | 125.44px 296 | 125.86px 297 | 126.29px 298 | 126.72px 299 | 127.14px 300 | 127.57px 301 | 128.0px 302 | 128.42px 303 | 128.85px 304 | 129.28px 305 | 129.7px 306 | 130.13px 307 | 130.56px 308 | 130.98px 309 | 131.41px 310 | 131.84px 311 | 132.26px 312 | 132.69px 313 | 133.12px 314 | 133.54px 315 | 133.97px 316 | 134.4px 317 | 134.82px 318 | 135.25px 319 | 135.68px 320 | 136.1px 321 | 136.53px 322 | 136.96px 323 | 137.38px 324 | 137.81px 325 | 138.24px 326 | 138.66px 327 | 139.09px 328 | 139.52px 329 | 139.94px 330 | 140.37px 331 | 140.8px 332 | 141.22px 333 | 141.65px 334 | 142.08px 335 | 142.5px 336 | 142.93px 337 | 143.36px 338 | 143.78px 339 | 144.21px 340 | 144.64px 341 | 145.06px 342 | 145.49px 343 | 145.92px 344 | 146.34px 345 | 146.77px 346 | 147.2px 347 | 147.62px 348 | 148.05px 349 | 148.48px 350 | 148.9px 351 | 149.33px 352 | 149.76px 353 | 150.18px 354 | 150.61px 355 | 151.04px 356 | 151.46px 357 | 151.89px 358 | 152.32px 359 | 152.74px 360 | 153.17px 361 | 153.6px 362 | 154.02px 363 | 154.45px 364 | 154.88px 365 | 155.3px 366 | 155.73px 367 | 156.16px 368 | 156.58px 369 | 157.01px 370 | 157.44px 371 | 157.86px 372 | 158.29px 373 | 158.72px 374 | 159.14px 375 | 159.57px 376 | 160.0px 377 | 160.42px 378 | 160.85px 379 | 161.28px 380 | 161.7px 381 | 162.13px 382 | 162.56px 383 | 162.98px 384 | 163.41px 385 | 163.84px 386 | 164.26px 387 | 164.69px 388 | 165.12px 389 | 165.54px 390 | 165.97px 391 | 166.4px 392 | 166.82px 393 | 167.25px 394 | 167.68px 395 | 168.1px 396 | 168.53px 397 | 168.96px 398 | 169.38px 399 | 169.81px 400 | 170.24px 401 | 170.66px 402 | 171.09px 403 | 171.52px 404 | 171.94px 405 | 172.37px 406 | 172.8px 407 | 173.22px 408 | 173.65px 409 | 174.08px 410 | 174.5px 411 | 174.93px 412 | 175.36px 413 | 175.78px 414 | 176.21px 415 | 176.64px 416 | 177.06px 417 | 177.49px 418 | 177.92px 419 | 178.34px 420 | 178.77px 421 | 179.2px 422 | 179.62px 423 | 180.05px 424 | 180.48px 425 | 180.9px 426 | 181.33px 427 | 181.76px 428 | 182.18px 429 | 182.61px 430 | 183.04px 431 | 183.46px 432 | 183.89px 433 | 184.32px 434 | 184.74px 435 | 185.17px 436 | 185.6px 437 | 186.02px 438 | 186.45px 439 | 186.88px 440 | 187.3px 441 | 187.73px 442 | 188.16px 443 | 188.58px 444 | 189.01px 445 | 189.44px 446 | 189.86px 447 | 190.29px 448 | 190.72px 449 | 191.14px 450 | 191.57px 451 | 192.0px 452 | 192.42px 453 | 192.85px 454 | 193.28px 455 | 193.7px 456 | 194.13px 457 | 194.56px 458 | 194.98px 459 | 195.41px 460 | 195.84px 461 | 196.26px 462 | 196.69px 463 | 197.12px 464 | 197.54px 465 | 197.97px 466 | 198.4px 467 | 198.82px 468 | 199.25px 469 | 199.68px 470 | 200.1px 471 | 200.53px 472 | 200.96px 473 | 201.38px 474 | 201.81px 475 | 202.24px 476 | 202.66px 477 | 203.09px 478 | 203.52px 479 | 203.94px 480 | 204.37px 481 | 204.8px 482 | 205.22px 483 | 205.65px 484 | 206.08px 485 | 206.5px 486 | 206.93px 487 | 207.36px 488 | 207.78px 489 | 208.21px 490 | 208.64px 491 | 209.06px 492 | 209.49px 493 | 209.92px 494 | 210.34px 495 | 210.77px 496 | 211.2px 497 | 211.62px 498 | 212.05px 499 | 212.48px 500 | 212.9px 501 | 213.33px 502 | 213.76px 503 | 214.18px 504 | 214.61px 505 | 215.04px 506 | 215.46px 507 | 215.89px 508 | 216.32px 509 | 216.74px 510 | 217.17px 511 | 217.6px 512 | 218.02px 513 | 218.45px 514 | 218.88px 515 | 219.3px 516 | 219.73px 517 | 220.16px 518 | 220.58px 519 | 221.01px 520 | 221.44px 521 | 221.86px 522 | 222.29px 523 | 222.72px 524 | 223.14px 525 | 223.57px 526 | 224.0px 527 | 224.42px 528 | 224.85px 529 | 225.28px 530 | 225.7px 531 | 226.13px 532 | 226.56px 533 | 226.98px 534 | 227.41px 535 | 227.84px 536 | 228.26px 537 | 228.69px 538 | 229.12px 539 | 229.54px 540 | 229.97px 541 | 230.4px 542 | 230.82px 543 | 231.25px 544 | 231.68px 545 | 232.1px 546 | 232.53px 547 | 232.96px 548 | 233.38px 549 | 233.81px 550 | 234.24px 551 | 234.66px 552 | 235.09px 553 | 235.52px 554 | 235.94px 555 | 236.37px 556 | 236.8px 557 | 237.22px 558 | 237.65px 559 | 238.08px 560 | 238.5px 561 | 238.93px 562 | 239.36px 563 | 239.78px 564 | 240.21px 565 | 240.64px 566 | 241.06px 567 | 241.49px 568 | 241.92px 569 | 242.34px 570 | 242.77px 571 | 243.2px 572 | 243.62px 573 | 244.05px 574 | 244.48px 575 | 244.9px 576 | 245.33px 577 | 245.76px 578 | 246.18px 579 | 246.61px 580 | 247.04px 581 | 247.46px 582 | 247.89px 583 | 248.32px 584 | 248.74px 585 | 249.17px 586 | 249.6px 587 | 250.02px 588 | 250.45px 589 | 250.88px 590 | 251.3px 591 | 251.73px 592 | 252.16px 593 | 252.58px 594 | 253.01px 595 | 253.44px 596 | 253.86px 597 | 254.29px 598 | 254.72px 599 | 255.14px 600 | 255.57px 601 | 256.0px 602 | 256.42px 603 | 256.85px 604 | 257.28px 605 | 257.7px 606 | 258.13px 607 | 258.56px 608 | 258.98px 609 | 259.41px 610 | 259.84px 611 | 260.26px 612 | 260.69px 613 | 261.12px 614 | 261.54px 615 | 261.97px 616 | 262.4px 617 | 262.82px 618 | 263.25px 619 | 263.68px 620 | 264.1px 621 | 264.53px 622 | 264.96px 623 | 265.38px 624 | 265.81px 625 | 266.24px 626 | 266.66px 627 | 267.09px 628 | 267.52px 629 | 267.94px 630 | 268.37px 631 | 268.8px 632 | 269.22px 633 | 269.65px 634 | 270.08px 635 | 270.5px 636 | 270.93px 637 | 271.36px 638 | 271.78px 639 | 272.21px 640 | 272.64px 641 | 273.06px 642 | 273.49px 643 | 273.92px 644 | 274.34px 645 | 274.77px 646 | 275.2px 647 | 275.62px 648 | 276.05px 649 | 276.48px 650 | 276.9px 651 | 277.33px 652 | 277.76px 653 | 278.18px 654 | 278.61px 655 | 279.04px 656 | 279.46px 657 | 279.89px 658 | 280.32px 659 | 280.74px 660 | 281.17px 661 | 281.6px 662 | 282.02px 663 | 282.45px 664 | 282.88px 665 | 283.3px 666 | 283.73px 667 | 284.16px 668 | 284.58px 669 | 285.01px 670 | 285.44px 671 | 285.86px 672 | 286.29px 673 | 286.72px 674 | 287.14px 675 | 287.57px 676 | 288.0px 677 | 288.42px 678 | 288.85px 679 | 289.28px 680 | 289.7px 681 | 290.13px 682 | 290.56px 683 | 290.98px 684 | 291.41px 685 | 291.84px 686 | 292.26px 687 | 292.69px 688 | 293.12px 689 | 293.54px 690 | 293.97px 691 | 294.4px 692 | 294.82px 693 | 295.25px 694 | 295.68px 695 | 296.1px 696 | 296.53px 697 | 296.96px 698 | 297.38px 699 | 297.81px 700 | 298.24px 701 | 298.66px 702 | 299.09px 703 | 299.52px 704 | 299.94px 705 | 300.37px 706 | 300.8px 707 | 301.22px 708 | 301.65px 709 | 302.08px 710 | 302.5px 711 | 302.93px 712 | 303.36px 713 | 303.78px 714 | 304.21px 715 | 304.64px 716 | 305.06px 717 | 305.49px 718 | 305.92px 719 | 306.34px 720 | 306.77px 721 | 307.2px 722 | 307.62px 723 | 308.05px 724 | 308.48px 725 | 308.9px 726 | 309.33px 727 | 309.76px 728 | 310.18px 729 | 310.61px 730 | 311.04px 731 | 311.46px 732 | 311.89px 733 | 312.32px 734 | 312.74px 735 | 313.17px 736 | 313.6px 737 | 314.02px 738 | 314.45px 739 | 314.88px 740 | 315.3px 741 | 315.73px 742 | 316.16px 743 | 316.58px 744 | 317.01px 745 | 317.44px 746 | 317.86px 747 | 318.29px 748 | 318.72px 749 | 319.14px 750 | 319.57px 751 | 320px 752 | -------------------------------------------------------------------------------- /app/src/main/res/values-480x320/lay_x.xml: -------------------------------------------------------------------------------- 1 | 2 | 0.42px 3 | 0.85px 4 | 1.28px 5 | 1.7px 6 | 2.13px 7 | 2.56px 8 | 2.98px 9 | 3.41px 10 | 3.84px 11 | 4.26px 12 | 4.69px 13 | 5.12px 14 | 5.54px 15 | 5.97px 16 | 6.4px 17 | 6.82px 18 | 7.25px 19 | 7.68px 20 | 8.1px 21 | 8.53px 22 | 8.96px 23 | 9.38px 24 | 9.81px 25 | 10.24px 26 | 10.66px 27 | 11.09px 28 | 11.52px 29 | 11.94px 30 | 12.37px 31 | 12.8px 32 | 13.22px 33 | 13.65px 34 | 14.08px 35 | 14.5px 36 | 14.93px 37 | 15.36px 38 | 15.78px 39 | 16.21px 40 | 16.64px 41 | 17.06px 42 | 17.49px 43 | 17.92px 44 | 18.34px 45 | 18.77px 46 | 19.2px 47 | 19.62px 48 | 20.05px 49 | 20.48px 50 | 20.9px 51 | 21.33px 52 | 21.76px 53 | 22.18px 54 | 22.61px 55 | 23.04px 56 | 23.46px 57 | 23.89px 58 | 24.32px 59 | 24.74px 60 | 25.17px 61 | 25.6px 62 | 26.02px 63 | 26.45px 64 | 26.88px 65 | 27.3px 66 | 27.73px 67 | 28.16px 68 | 28.58px 69 | 29.01px 70 | 29.44px 71 | 29.86px 72 | 30.29px 73 | 30.72px 74 | 31.14px 75 | 31.57px 76 | 32.0px 77 | 32.42px 78 | 32.85px 79 | 33.28px 80 | 33.7px 81 | 34.13px 82 | 34.56px 83 | 34.98px 84 | 35.41px 85 | 35.84px 86 | 36.26px 87 | 36.69px 88 | 37.12px 89 | 37.54px 90 | 37.97px 91 | 38.4px 92 | 38.82px 93 | 39.25px 94 | 39.68px 95 | 40.1px 96 | 40.53px 97 | 40.96px 98 | 41.38px 99 | 41.81px 100 | 42.24px 101 | 42.66px 102 | 43.09px 103 | 43.52px 104 | 43.94px 105 | 44.37px 106 | 44.8px 107 | 45.22px 108 | 45.65px 109 | 46.08px 110 | 46.5px 111 | 46.93px 112 | 47.36px 113 | 47.78px 114 | 48.21px 115 | 48.64px 116 | 49.06px 117 | 49.49px 118 | 49.92px 119 | 50.34px 120 | 50.77px 121 | 51.2px 122 | 51.62px 123 | 52.05px 124 | 52.48px 125 | 52.9px 126 | 53.33px 127 | 53.76px 128 | 54.18px 129 | 54.61px 130 | 55.04px 131 | 55.46px 132 | 55.89px 133 | 56.32px 134 | 56.74px 135 | 57.17px 136 | 57.6px 137 | 58.02px 138 | 58.45px 139 | 58.88px 140 | 59.3px 141 | 59.73px 142 | 60.16px 143 | 60.58px 144 | 61.01px 145 | 61.44px 146 | 61.86px 147 | 62.29px 148 | 62.72px 149 | 63.14px 150 | 63.57px 151 | 64.0px 152 | 64.42px 153 | 64.85px 154 | 65.28px 155 | 65.7px 156 | 66.13px 157 | 66.56px 158 | 66.98px 159 | 67.41px 160 | 67.84px 161 | 68.26px 162 | 68.69px 163 | 69.12px 164 | 69.54px 165 | 69.97px 166 | 70.4px 167 | 70.82px 168 | 71.25px 169 | 71.68px 170 | 72.1px 171 | 72.53px 172 | 72.96px 173 | 73.38px 174 | 73.81px 175 | 74.24px 176 | 74.66px 177 | 75.09px 178 | 75.52px 179 | 75.94px 180 | 76.37px 181 | 76.8px 182 | 77.22px 183 | 77.65px 184 | 78.08px 185 | 78.5px 186 | 78.93px 187 | 79.36px 188 | 79.78px 189 | 80.21px 190 | 80.64px 191 | 81.06px 192 | 81.49px 193 | 81.92px 194 | 82.34px 195 | 82.77px 196 | 83.2px 197 | 83.62px 198 | 84.05px 199 | 84.48px 200 | 84.9px 201 | 85.33px 202 | 85.76px 203 | 86.18px 204 | 86.61px 205 | 87.04px 206 | 87.46px 207 | 87.89px 208 | 88.32px 209 | 88.74px 210 | 89.17px 211 | 89.6px 212 | 90.02px 213 | 90.45px 214 | 90.88px 215 | 91.3px 216 | 91.73px 217 | 92.16px 218 | 92.58px 219 | 93.01px 220 | 93.44px 221 | 93.86px 222 | 94.29px 223 | 94.72px 224 | 95.14px 225 | 95.57px 226 | 96.0px 227 | 96.42px 228 | 96.85px 229 | 97.28px 230 | 97.7px 231 | 98.13px 232 | 98.56px 233 | 98.98px 234 | 99.41px 235 | 99.84px 236 | 100.26px 237 | 100.69px 238 | 101.12px 239 | 101.54px 240 | 101.97px 241 | 102.4px 242 | 102.82px 243 | 103.25px 244 | 103.68px 245 | 104.1px 246 | 104.53px 247 | 104.96px 248 | 105.38px 249 | 105.81px 250 | 106.24px 251 | 106.66px 252 | 107.09px 253 | 107.52px 254 | 107.94px 255 | 108.37px 256 | 108.8px 257 | 109.22px 258 | 109.65px 259 | 110.08px 260 | 110.5px 261 | 110.93px 262 | 111.36px 263 | 111.78px 264 | 112.21px 265 | 112.64px 266 | 113.06px 267 | 113.49px 268 | 113.92px 269 | 114.34px 270 | 114.77px 271 | 115.2px 272 | 115.62px 273 | 116.05px 274 | 116.48px 275 | 116.9px 276 | 117.33px 277 | 117.76px 278 | 118.18px 279 | 118.61px 280 | 119.04px 281 | 119.46px 282 | 119.89px 283 | 120.32px 284 | 120.74px 285 | 121.17px 286 | 121.6px 287 | 122.02px 288 | 122.45px 289 | 122.88px 290 | 123.3px 291 | 123.73px 292 | 124.16px 293 | 124.58px 294 | 125.01px 295 | 125.44px 296 | 125.86px 297 | 126.29px 298 | 126.72px 299 | 127.14px 300 | 127.57px 301 | 128.0px 302 | 128.42px 303 | 128.85px 304 | 129.28px 305 | 129.7px 306 | 130.13px 307 | 130.56px 308 | 130.98px 309 | 131.41px 310 | 131.84px 311 | 132.26px 312 | 132.69px 313 | 133.12px 314 | 133.54px 315 | 133.97px 316 | 134.4px 317 | 134.82px 318 | 135.25px 319 | 135.68px 320 | 136.1px 321 | 136.53px 322 | 136.96px 323 | 137.38px 324 | 137.81px 325 | 138.24px 326 | 138.66px 327 | 139.09px 328 | 139.52px 329 | 139.94px 330 | 140.37px 331 | 140.8px 332 | 141.22px 333 | 141.65px 334 | 142.08px 335 | 142.5px 336 | 142.93px 337 | 143.36px 338 | 143.78px 339 | 144.21px 340 | 144.64px 341 | 145.06px 342 | 145.49px 343 | 145.92px 344 | 146.34px 345 | 146.77px 346 | 147.2px 347 | 147.62px 348 | 148.05px 349 | 148.48px 350 | 148.9px 351 | 149.33px 352 | 149.76px 353 | 150.18px 354 | 150.61px 355 | 151.04px 356 | 151.46px 357 | 151.89px 358 | 152.32px 359 | 152.74px 360 | 153.17px 361 | 153.6px 362 | 154.02px 363 | 154.45px 364 | 154.88px 365 | 155.3px 366 | 155.73px 367 | 156.16px 368 | 156.58px 369 | 157.01px 370 | 157.44px 371 | 157.86px 372 | 158.29px 373 | 158.72px 374 | 159.14px 375 | 159.57px 376 | 160.0px 377 | 160.42px 378 | 160.85px 379 | 161.28px 380 | 161.7px 381 | 162.13px 382 | 162.56px 383 | 162.98px 384 | 163.41px 385 | 163.84px 386 | 164.26px 387 | 164.69px 388 | 165.12px 389 | 165.54px 390 | 165.97px 391 | 166.4px 392 | 166.82px 393 | 167.25px 394 | 167.68px 395 | 168.1px 396 | 168.53px 397 | 168.96px 398 | 169.38px 399 | 169.81px 400 | 170.24px 401 | 170.66px 402 | 171.09px 403 | 171.52px 404 | 171.94px 405 | 172.37px 406 | 172.8px 407 | 173.22px 408 | 173.65px 409 | 174.08px 410 | 174.5px 411 | 174.93px 412 | 175.36px 413 | 175.78px 414 | 176.21px 415 | 176.64px 416 | 177.06px 417 | 177.49px 418 | 177.92px 419 | 178.34px 420 | 178.77px 421 | 179.2px 422 | 179.62px 423 | 180.05px 424 | 180.48px 425 | 180.9px 426 | 181.33px 427 | 181.76px 428 | 182.18px 429 | 182.61px 430 | 183.04px 431 | 183.46px 432 | 183.89px 433 | 184.32px 434 | 184.74px 435 | 185.17px 436 | 185.6px 437 | 186.02px 438 | 186.45px 439 | 186.88px 440 | 187.3px 441 | 187.73px 442 | 188.16px 443 | 188.58px 444 | 189.01px 445 | 189.44px 446 | 189.86px 447 | 190.29px 448 | 190.72px 449 | 191.14px 450 | 191.57px 451 | 192.0px 452 | 192.42px 453 | 192.85px 454 | 193.28px 455 | 193.7px 456 | 194.13px 457 | 194.56px 458 | 194.98px 459 | 195.41px 460 | 195.84px 461 | 196.26px 462 | 196.69px 463 | 197.12px 464 | 197.54px 465 | 197.97px 466 | 198.4px 467 | 198.82px 468 | 199.25px 469 | 199.68px 470 | 200.1px 471 | 200.53px 472 | 200.96px 473 | 201.38px 474 | 201.81px 475 | 202.24px 476 | 202.66px 477 | 203.09px 478 | 203.52px 479 | 203.94px 480 | 204.37px 481 | 204.8px 482 | 205.22px 483 | 205.65px 484 | 206.08px 485 | 206.5px 486 | 206.93px 487 | 207.36px 488 | 207.78px 489 | 208.21px 490 | 208.64px 491 | 209.06px 492 | 209.49px 493 | 209.92px 494 | 210.34px 495 | 210.77px 496 | 211.2px 497 | 211.62px 498 | 212.05px 499 | 212.48px 500 | 212.9px 501 | 213.33px 502 | 213.76px 503 | 214.18px 504 | 214.61px 505 | 215.04px 506 | 215.46px 507 | 215.89px 508 | 216.32px 509 | 216.74px 510 | 217.17px 511 | 217.6px 512 | 218.02px 513 | 218.45px 514 | 218.88px 515 | 219.3px 516 | 219.73px 517 | 220.16px 518 | 220.58px 519 | 221.01px 520 | 221.44px 521 | 221.86px 522 | 222.29px 523 | 222.72px 524 | 223.14px 525 | 223.57px 526 | 224.0px 527 | 224.42px 528 | 224.85px 529 | 225.28px 530 | 225.7px 531 | 226.13px 532 | 226.56px 533 | 226.98px 534 | 227.41px 535 | 227.84px 536 | 228.26px 537 | 228.69px 538 | 229.12px 539 | 229.54px 540 | 229.97px 541 | 230.4px 542 | 230.82px 543 | 231.25px 544 | 231.68px 545 | 232.1px 546 | 232.53px 547 | 232.96px 548 | 233.38px 549 | 233.81px 550 | 234.24px 551 | 234.66px 552 | 235.09px 553 | 235.52px 554 | 235.94px 555 | 236.37px 556 | 236.8px 557 | 237.22px 558 | 237.65px 559 | 238.08px 560 | 238.5px 561 | 238.93px 562 | 239.36px 563 | 239.78px 564 | 240.21px 565 | 240.64px 566 | 241.06px 567 | 241.49px 568 | 241.92px 569 | 242.34px 570 | 242.77px 571 | 243.2px 572 | 243.62px 573 | 244.05px 574 | 244.48px 575 | 244.9px 576 | 245.33px 577 | 245.76px 578 | 246.18px 579 | 246.61px 580 | 247.04px 581 | 247.46px 582 | 247.89px 583 | 248.32px 584 | 248.74px 585 | 249.17px 586 | 249.6px 587 | 250.02px 588 | 250.45px 589 | 250.88px 590 | 251.3px 591 | 251.73px 592 | 252.16px 593 | 252.58px 594 | 253.01px 595 | 253.44px 596 | 253.86px 597 | 254.29px 598 | 254.72px 599 | 255.14px 600 | 255.57px 601 | 256.0px 602 | 256.42px 603 | 256.85px 604 | 257.28px 605 | 257.7px 606 | 258.13px 607 | 258.56px 608 | 258.98px 609 | 259.41px 610 | 259.84px 611 | 260.26px 612 | 260.69px 613 | 261.12px 614 | 261.54px 615 | 261.97px 616 | 262.4px 617 | 262.82px 618 | 263.25px 619 | 263.68px 620 | 264.1px 621 | 264.53px 622 | 264.96px 623 | 265.38px 624 | 265.81px 625 | 266.24px 626 | 266.66px 627 | 267.09px 628 | 267.52px 629 | 267.94px 630 | 268.37px 631 | 268.8px 632 | 269.22px 633 | 269.65px 634 | 270.08px 635 | 270.5px 636 | 270.93px 637 | 271.36px 638 | 271.78px 639 | 272.21px 640 | 272.64px 641 | 273.06px 642 | 273.49px 643 | 273.92px 644 | 274.34px 645 | 274.77px 646 | 275.2px 647 | 275.62px 648 | 276.05px 649 | 276.48px 650 | 276.9px 651 | 277.33px 652 | 277.76px 653 | 278.18px 654 | 278.61px 655 | 279.04px 656 | 279.46px 657 | 279.89px 658 | 280.32px 659 | 280.74px 660 | 281.17px 661 | 281.6px 662 | 282.02px 663 | 282.45px 664 | 282.88px 665 | 283.3px 666 | 283.73px 667 | 284.16px 668 | 284.58px 669 | 285.01px 670 | 285.44px 671 | 285.86px 672 | 286.29px 673 | 286.72px 674 | 287.14px 675 | 287.57px 676 | 288.0px 677 | 288.42px 678 | 288.85px 679 | 289.28px 680 | 289.7px 681 | 290.13px 682 | 290.56px 683 | 290.98px 684 | 291.41px 685 | 291.84px 686 | 292.26px 687 | 292.69px 688 | 293.12px 689 | 293.54px 690 | 293.97px 691 | 294.4px 692 | 294.82px 693 | 295.25px 694 | 295.68px 695 | 296.1px 696 | 296.53px 697 | 296.96px 698 | 297.38px 699 | 297.81px 700 | 298.24px 701 | 298.66px 702 | 299.09px 703 | 299.52px 704 | 299.94px 705 | 300.37px 706 | 300.8px 707 | 301.22px 708 | 301.65px 709 | 302.08px 710 | 302.5px 711 | 302.93px 712 | 303.36px 713 | 303.78px 714 | 304.21px 715 | 304.64px 716 | 305.06px 717 | 305.49px 718 | 305.92px 719 | 306.34px 720 | 306.77px 721 | 307.2px 722 | 307.62px 723 | 308.05px 724 | 308.48px 725 | 308.9px 726 | 309.33px 727 | 309.76px 728 | 310.18px 729 | 310.61px 730 | 311.04px 731 | 311.46px 732 | 311.89px 733 | 312.32px 734 | 312.74px 735 | 313.17px 736 | 313.6px 737 | 314.02px 738 | 314.45px 739 | 314.88px 740 | 315.3px 741 | 315.73px 742 | 316.16px 743 | 316.58px 744 | 317.01px 745 | 317.44px 746 | 317.86px 747 | 318.29px 748 | 318.72px 749 | 319.14px 750 | 319.57px 751 | 320px 752 | --------------------------------------------------------------------------------