├── README.md ├── app ├── .gitignore ├── app.iml ├── build.gradle ├── proguard-rules.pro └── src │ └── main │ ├── AndroidManifest.xml │ ├── java │ └── com │ │ └── vrgsoft │ │ └── calendarview │ │ ├── CustomDayUtils.java │ │ ├── CustomView.java │ │ ├── GlideCalendarExtension.java │ │ ├── GlideCalendarModule.java │ │ └── MainActivity.java │ └── res │ ├── drawable-hdpi │ ├── ic_next.png │ ├── ic_next_button_example.png │ ├── ic_previous.png │ └── ic_stat_name.png │ ├── drawable-mdpi │ ├── ic_next.png │ ├── ic_next_button_example.png │ ├── ic_previous.png │ └── ic_stat_name.png │ ├── drawable-xhdpi │ ├── ic_next.png │ ├── ic_next_button_example.png │ ├── ic_previous.png │ └── ic_stat_name.png │ ├── drawable-xxhdpi │ ├── giphy.gif │ ├── ic_next.png │ ├── ic_next_button_example.png │ ├── ic_previous.png │ ├── ic_stat_name.png │ └── simple_ex.jpg │ ├── drawable │ ├── background.xml │ └── background_sample.xml │ ├── layout │ ├── activity_main.xml │ └── custom_view.xml │ ├── mipmap-hdpi │ ├── ic_launcher.png │ └── ic_launcher_round.png │ ├── mipmap-mdpi │ ├── ic_launcher.png │ └── ic_launcher_round.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 │ ├── colors.xml │ ├── strings.xml │ └── styles.xml ├── build.gradle ├── calendar.jpg ├── calendar ├── .gitignore ├── build.gradle ├── calendar.iml ├── proguard-rules.pro └── src │ └── main │ ├── AndroidManifest.xml │ ├── java │ └── com │ │ └── vrgsoft │ │ └── calendar │ │ ├── CalendarAdapter.java │ │ ├── CalendarPagerAdapter.java │ │ ├── CalendarRecyclerView.java │ │ ├── CalendarSettingWrapper.java │ │ ├── DensityUtils.java │ │ ├── Settings.java │ │ ├── VRCalendarCustomViewCallback.java │ │ ├── VRCalendarHolder.java │ │ ├── VRCalendarView.java │ │ ├── VrCalendarDay.java │ │ ├── VrCalendarDaySettings.java │ │ ├── VrCalendarUtils.java │ │ ├── WrapContentHeightViewPager.java │ │ └── calendar_listeners │ │ ├── OnCalendarClickListener.java │ │ ├── OnCalendarLongClickListener.java │ │ ├── VRCalendarCustomViewCallback.java │ │ ├── VRCalendarMonthCallback.java │ │ └── VRCalendarUpdateListener.java │ └── res │ ├── drawable-hdpi │ ├── ic_keyboard_arrow_left_black_24dp.png │ └── ic_keyboard_arrow_right_black_24dp.png │ ├── drawable-mdpi │ ├── ic_keyboard_arrow_left_black_24dp.png │ └── ic_keyboard_arrow_right_black_24dp.png │ ├── drawable-xhdpi │ ├── ic_keyboard_arrow_left_black_24dp.png │ └── ic_keyboard_arrow_right_black_24dp.png │ ├── drawable-xxhdpi │ ├── ic_keyboard_arrow_left_black_24dp.png │ └── ic_keyboard_arrow_right_black_24dp.png │ ├── drawable-xxxhdpi │ ├── ic_keyboard_arrow_left_black_24dp.png │ └── ic_keyboard_arrow_right_black_24dp.png │ ├── layout │ ├── calendar_view.xml │ ├── item_calendar_day.xml │ └── recycler_calendar.xml │ └── values │ ├── attrs.xml │ ├── colors.xml │ └── strings.xml ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── image.jpg ├── local.properties └── settings.gradle /README.md: -------------------------------------------------------------------------------- 1 | # VRCalendarView 2 | 3 | 4 | 5 | # Usage 6 | 7 | *For a working implementation, Have a look at the Sample Project - app* 8 | 9 | 1. Include the library as local library project. 10 | ```gradle 11 | allprojects { 12 | repositories { 13 | maven { url 'https://jitpack.io' } 14 | } 15 | } 16 | 17 | dependencies { 18 | 19 | compile 'com.github.VRGsoftUA:VRCalendarView:1.0.3' 20 | 21 | } 22 | ``` 23 | 2. Include the VRCalendarView widget in your layout. 24 | 25 | ```xml 26 | 43 | ``` 44 | 3. You can do same with java 45 | ```java 46 | vrCalendarView.getSettings() 47 | .setOtherMonthTextStyle(VRCalendarView.BOLD) 48 | .setCurrentMonthBackgroundColor(Color.CYAN) 49 | .updateCalendar(); 50 | ``` 51 | 52 | or 53 | 54 | ```java 55 | vrCalendarView.getSettings() 56 | .setOnCalendarClickListener(this) 57 | .setOnCalendarLongClickListener(this) 58 | .setVRCalendarMonthCallback(this); 59 | ``` 60 | 61 | 4. You can update all days by calling VRCalendarView.getSettings().updateCalendar(); 62 | 63 | ```java 64 | vrCalendarView.getSettings() 65 | .setOtherMonthTextStyle(VRCalendarView.BOLD) 66 | .setCurrentMonthBackgroundColor(Color.CYAN) 67 | .updateCalendar(); 68 | ``` 69 | 70 | if VRCalendarView.getSettings().updateCalendar() is called and you want to save some custom day 71 | List getCustomizeDayView(Calendar calendar) method should be overridden 72 | getCustomizeDayView(Calendar calendar) is return all days you need to make custom. 73 | With parameter calendar you can get the year and the month to return customised days from specific month 74 | ```java 75 | @Override 76 | public List getCustomizeDayView(Calendar calendar) { 77 | List vrCalendarDays = new ArrayList<>(); 78 | VrCalendarDay today = new VrCalendarDay(); 79 | today.setDate(new Date()); 80 | 81 | VrCalendarDaySettings todaySettings = new VrCalendarDaySettings(); 82 | todaySettings.setDayTextColor(Color.CYAN); 83 | today.setVrCalendarDaySettings(todaySettings); 84 | today.setVRCalendarCustomViewCallback(new VRCalendarCustomViewCallback() { 85 | @Override 86 | public View getNewCustomiseView() { 87 | ImageView imageView = new ImageView(MainActivity.this); 88 | imageView.setImageResource(R.drawable.ic_stat_name); 89 | return imageView; 90 | } 91 | }); 92 | 93 | vrCalendarDays.add(today); 94 | 95 | VrCalendarDay tomorrow = new VrCalendarDay(); 96 | Date d = new Date(1513435110633L); // December 16, 2017 97 | tomorrow.setDate(d); 98 | VrCalendarDaySettings vrtomorCalendarDaySettings = new VrCalendarDaySettings(); 99 | vrtomorCalendarDaySettings.setDayTextStyle(VRCalendarView.BOLD); 100 | vrtomorCalendarDaySettings.setDayBackgroundColor(ContextCompat.getColor(this, R.color.colorAccent)); 101 | vrtomorCalendarDaySettings.setDayTextColor(ContextCompat.getColor(this, R.color.colorYellow)); 102 | tomorrow.setVrCalendarDaySettings(vrtomorCalendarDaySettings); 103 | 104 | vrCalendarDays.add(tomorrow); 105 | 106 | return vrCalendarDays; 107 | } 108 | ``` 109 | You can set set whatever view you want and customise it like you want if standard customisation does not fit 110 | 111 | Attention!!! 112 | 113 | View getNewCustomiseView() should always return new View. other wise it doesn't work properly 114 | ```java 115 | today.setVRCalendarCustomViewCallback(new VRCalendarCustomViewCallback() { 116 | @Override 117 | public View getNewCustomiseView() { 118 | ImageView imageView = new ImageView(MainActivity.this); 119 | imageView.setImageResource(R.drawable.ic_stat_name); 120 | return imageView; 121 | } 122 | }); 123 | ``` 124 | 125 | but if you need to update specific day it is better to call 126 | 127 | ```java 128 | vrCalendarView.getSettings().updateCalendarDay(VrCalendarDay today, boolean hasToSelect); 129 | ``` 130 | where VrCalendarDay has settings to customise specific day - hasToSelect should be false than 131 | and hasToSelect is boolean that sets specific customisation 132 | not from VrCalendarDay settings but from default settings that has attribute "chosen". Like below 133 | ```xml 134 | app:vr_chosen_day_background_color="@color/colorGreen" 135 | app:vr_chosen_day_background_drawable="@drawable/background" 136 | ``` 137 | to update specific day you have to set VRCalendarDay.setDate(Date date); - it is required 138 | ```java 139 | VrCalendarDay today = new VrCalendarDay(); 140 | today.setVRCalendarCustomViewCallback(new VRCalendarCustomViewCallback() { 141 | @Override 142 | public View getNewCustomiseView() { 143 | ImageView imageView = new ImageView(MainActivity.this); 144 | imageView.setImageResource(R.drawable.ic_stat_name); 145 | return imageView; 146 | } 147 | }); 148 | today.setDate(day.getDate()); 149 | ``` 150 | 151 | Move to date with 152 | 153 | VrCalendarView.moveToDate(Date date); 154 | 155 | 5. There is onClick listener and onLongClick 156 | ```java 157 | 158 | public interface OnCalendarLongClickListener { 159 | void onCalendarDayLongClick(VrCalendarDay day); 160 | } 161 | ``` 162 | 163 | and 164 | 165 | ```java 166 | public interface OnCalendarClickListener { 167 | void onCalendarDayClick(VrCalendarDay day); 168 | } 169 | 170 | that returns VrCalendarDay you click on 171 | 172 | #### Customisation 173 | You can add fields via xml or VrCalendarView or VrCalendarView.getSettings(). 174 | 175 | # Supported fields: 176 | 177 | | Method | Type | 178 | | ------------- | ------------- | 179 | | vr_current_day_text_color | color | 180 | | vr_current_month_text_color | color | 181 | | vr_other_month_text_color | color | 182 | | vr_current_month_other_days_text_color | color | 183 | | vr_chosen_day_text_color |color | 184 | | vr_current_day_background_color | color | 185 | | vr_current_month_background_color | color | 186 | | vr_other_month_background_color | color | 187 | | vr_current_month_other_days_background_color |color | 188 | | vr_chosen_day_background_color | color | 189 | | vr_current_day_background_drawable | integer | 190 | | vr_current_month_background_drawable | integer | 191 | | vr_other_month_background_drawable" | integer | 192 | | vr_current_month_other_days_background_drawable | integer | 193 | | vr_chosen_day_background_drawable | integer | 194 | | vr_calendar_day_text_size | dimension | 195 | | vr_calendar_title_text_size | dimension | 196 | | vr_next_button | integer | 197 | | vr_previous_button | integer | 198 | | vr_title_text_color | color | 199 | | vr_background_color | color | 200 | | vr_week_days_color | color | 201 | | vr_current_day_text_style | normal,bold,italic | 202 | | vr_current_month_text_style | normal,bold,italic | 203 | | vr_other_month_text_style | normal,bold,italic | 204 | | vr_current_month_other_days_text_style | normal,bold,italic | 205 | | vr_chosen_day_text_style | normal,bold,italic | 206 | 207 | #### Contributing 208 | 209 | * Contributions are always welcome 210 | * If you want a feature and can code, feel free to fork and add the change yourself and make a pull request 211 | -------------------------------------------------------------------------------- /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /app/app.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 8 | 9 | 10 | 11 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | -------------------------------------------------------------------------------- /app/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'com.android.application' 2 | 3 | android { 4 | compileSdkVersion 27 5 | buildToolsVersion "27.0.2" 6 | defaultConfig { 7 | applicationId "com.vrgsoft.calendarview" 8 | minSdkVersion 16 9 | targetSdkVersion 27 10 | versionCode 1 11 | versionName "1.0" 12 | testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" 13 | } 14 | buildTypes { 15 | release { 16 | minifyEnabled false 17 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 18 | } 19 | } 20 | } 21 | 22 | dependencies { 23 | compile fileTree(dir: 'libs', include: ['*.jar']) 24 | androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { 25 | exclude group: 'com.android.support', module: 'support-annotations' 26 | }) 27 | compile 'com.android.support:appcompat-v7:27.0.2' 28 | compile 'com.android.support.constraint:constraint-layout:1.0.2' 29 | testCompile 'junit:junit:4.12' 30 | compile 'com.github.VRGsoftUA:VRCalendarView:1.0.3' 31 | compile 'com.github.bumptech.glide:glide:4.5.0' 32 | annotationProcessor 'com.github.bumptech.glide:compiler:4.5.0' 33 | // compile project(path: ':calendar') 34 | 35 | } 36 | -------------------------------------------------------------------------------- /app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # By default, the flags in this file are appended to flags specified 3 | # in C:\Android\sdk/tools/proguard/proguard-android.txt 4 | # You can edit the include path and order by changing the proguardFiles 5 | # directive in build.gradle. 6 | # 7 | # For more details, see 8 | # http://developer.android.com/guide/developing/tools/proguard.html 9 | 10 | # Add any project specific keep options here: 11 | 12 | # If your project uses WebView with JS, uncomment the following 13 | # and specify the fully qualified class name to the JavaScript interface 14 | # class: 15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 16 | # public *; 17 | #} 18 | 19 | # Uncomment this to preserve the line number information for 20 | # debugging stack traces. 21 | #-keepattributes SourceFile,LineNumberTable 22 | 23 | # If you keep the line number information, uncomment this to 24 | # hide the original source file name. 25 | #-renamesourcefileattribute SourceFile 26 | -------------------------------------------------------------------------------- /app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 15 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /app/src/main/java/com/vrgsoft/calendarview/CustomDayUtils.java: -------------------------------------------------------------------------------- 1 | package com.vrgsoft.calendarview; 2 | 3 | import android.content.Context; 4 | import android.graphics.Color; 5 | import android.support.v4.content.ContextCompat; 6 | import android.view.View; 7 | import android.widget.ImageView; 8 | 9 | import com.vrgsoft.calendar.VRCalendarCustomViewCallback; 10 | import com.vrgsoft.calendar.VRCalendarView; 11 | import com.vrgsoft.calendar.VrCalendarDay; 12 | import com.vrgsoft.calendar.VrCalendarDaySettings; 13 | 14 | import java.util.ArrayList; 15 | import java.util.Calendar; 16 | import java.util.Date; 17 | import java.util.List; 18 | 19 | public class CustomDayUtils { 20 | 21 | public List getCustomizeDayView(final Context context) { 22 | List vrCalendarDays = new ArrayList<>(); 23 | 24 | vrCalendarDays.add(getToday(context)); 25 | vrCalendarDays.add(getSomeDay(context)); 26 | vrCalendarDays.add(getSomeDayAgain(context)); 27 | vrCalendarDays.add(getOneMoreDay(context)); 28 | vrCalendarDays.add(getDay0(context)); 29 | vrCalendarDays.add(getDay1(context)); 30 | vrCalendarDays.add(getDay2(context)); 31 | vrCalendarDays.add(getDay3(context)); 32 | 33 | return vrCalendarDays; 34 | } 35 | 36 | private VrCalendarDay getOneMoreDay(final Context context) { 37 | VrCalendarDay tomorrow = new VrCalendarDay(); 38 | Calendar cal = Calendar.getInstance(); 39 | cal.add(Calendar.DAY_OF_MONTH, 1); 40 | Date d = cal.getTime(); 41 | tomorrow.setDate(d); 42 | tomorrow.setVRCalendarCustomViewCallback(new VRCalendarCustomViewCallback() { 43 | @Override 44 | public View getNewCustomiseView() { 45 | CustomView customView = new CustomView(context); 46 | return customView; 47 | } 48 | }); 49 | VrCalendarDaySettings vrtomorCalendarDaySettings = new VrCalendarDaySettings(); 50 | vrtomorCalendarDaySettings.setDayTextStyle(VRCalendarView.BOLD); 51 | vrtomorCalendarDaySettings.setDayTextSize(21); 52 | vrtomorCalendarDaySettings.setDayTextColor(ContextCompat.getColor(context, R.color.colorDark)); 53 | tomorrow.setVrCalendarDaySettings(vrtomorCalendarDaySettings); 54 | 55 | return tomorrow; 56 | } 57 | 58 | private VrCalendarDay getSomeDay(final Context context) { 59 | 60 | VrCalendarDay someDay = new VrCalendarDay(); 61 | 62 | VrCalendarDaySettings someDaySettings = new VrCalendarDaySettings(); 63 | someDaySettings.setDayTextColor(Color.CYAN); 64 | someDay.setVrCalendarDaySettings(someDaySettings); 65 | someDay.setVRCalendarCustomViewCallback(new VRCalendarCustomViewCallback() { 66 | @Override 67 | public View getNewCustomiseView() { 68 | ImageView imageView = new ImageView(context); 69 | imageView.setImageResource(R.drawable.simple_ex); 70 | return imageView; 71 | } 72 | }); 73 | 74 | Calendar cal = Calendar.getInstance(); 75 | cal.add(Calendar.DAY_OF_MONTH, -5); 76 | someDay.setDate(cal.getTime()); 77 | someDay.setVrCalendarDaySettings(someDaySettings); 78 | return someDay; 79 | } 80 | 81 | private VrCalendarDay getSomeDayAgain(final Context context) { 82 | 83 | VrCalendarDay someDay = new VrCalendarDay(); 84 | 85 | VrCalendarDaySettings someDaySettings = new VrCalendarDaySettings(); 86 | someDaySettings.setDayTextColor(Color.TRANSPARENT); 87 | someDaySettings.setDayBackgroundColor(Color.TRANSPARENT); 88 | someDay.setVrCalendarDaySettings(someDaySettings); 89 | someDay.setVRCalendarCustomViewCallback(new VRCalendarCustomViewCallback() { 90 | @Override 91 | public View getNewCustomiseView() { 92 | 93 | ImageView imageView = new ImageView(context); 94 | imageView.setImageResource(R.drawable.simple_ex); 95 | GlideApp.with(context) 96 | .asGif() 97 | .load(R.drawable.giphy) 98 | .into(imageView) 99 | .clearOnDetach(); 100 | return imageView; 101 | } 102 | }); 103 | 104 | Calendar cal = Calendar.getInstance(); 105 | cal.add(Calendar.DAY_OF_MONTH, -6); 106 | someDay.setDate(cal.getTime()); 107 | someDay.setVrCalendarDaySettings(someDaySettings); 108 | return someDay; 109 | } 110 | 111 | private VrCalendarDay getToday(final Context context) { 112 | VrCalendarDay today = new VrCalendarDay(); 113 | today.setDate(new Date()); 114 | 115 | VrCalendarDaySettings todaySettings = new VrCalendarDaySettings(); 116 | todaySettings.setDayTextColor(ContextCompat.getColor(context, R.color.colorTransparent)); 117 | today.setVrCalendarDaySettings(todaySettings); 118 | today.setVRCalendarCustomViewCallback(new VRCalendarCustomViewCallback() { 119 | @Override 120 | public View getNewCustomiseView() { 121 | ImageView imageView = new ImageView(context); 122 | imageView.setImageResource(R.drawable.ic_stat_name); 123 | return imageView; 124 | } 125 | }); 126 | return today; 127 | } 128 | 129 | private VrCalendarDay getDay1(final Context context) { 130 | VrCalendarDay today = new VrCalendarDay(); 131 | Calendar cal = Calendar.getInstance(); 132 | cal.add(Calendar.DAY_OF_MONTH, 5); 133 | today.setDate(cal.getTime()); 134 | VrCalendarDaySettings todaySettings = new VrCalendarDaySettings(); 135 | todaySettings.setDayTextColor(Color.RED); 136 | today.setVrCalendarDaySettings(todaySettings); 137 | return today; 138 | } 139 | 140 | private VrCalendarDay getDay0(final Context context) { 141 | VrCalendarDay today = new VrCalendarDay(); 142 | Calendar cal = Calendar.getInstance(); 143 | cal.add(Calendar.DAY_OF_MONTH, 8); 144 | today.setDate(cal.getTime()); 145 | VrCalendarDaySettings todaySettings = new VrCalendarDaySettings(); 146 | todaySettings.setDayTextColor(Color.WHITE); 147 | todaySettings.setDayTextSize(10); 148 | today.setVrCalendarDaySettings(todaySettings); 149 | return today; 150 | } 151 | 152 | private VrCalendarDay getDay2(final Context context) { 153 | VrCalendarDay today = new VrCalendarDay(); 154 | 155 | Calendar cal = Calendar.getInstance(); 156 | cal.add(Calendar.DAY_OF_MONTH, 6); 157 | today.setDate(cal.getTime()); 158 | VrCalendarDaySettings todaySettings = new VrCalendarDaySettings(); 159 | todaySettings.setDayTextColor(Color.GREEN); 160 | todaySettings.setDayBackgroundDrawable(ContextCompat.getDrawable(context, R.drawable.background_sample)); 161 | today.setVrCalendarDaySettings(todaySettings); 162 | return today; 163 | } 164 | 165 | private VrCalendarDay getDay3(final Context context) { 166 | VrCalendarDay today = new VrCalendarDay(); 167 | 168 | Calendar cal = Calendar.getInstance(); 169 | cal.add(Calendar.DAY_OF_MONTH, 4); 170 | today.setDate(cal.getTime()); 171 | VrCalendarDaySettings todaySettings = new VrCalendarDaySettings(); 172 | todaySettings.setDayTextColor(Color.BLUE); 173 | today.setVrCalendarDaySettings(todaySettings); 174 | return today; 175 | } 176 | 177 | 178 | } 179 | -------------------------------------------------------------------------------- /app/src/main/java/com/vrgsoft/calendarview/CustomView.java: -------------------------------------------------------------------------------- 1 | package com.vrgsoft.calendarview; 2 | 3 | import android.content.Context; 4 | import android.widget.RelativeLayout; 5 | 6 | public class CustomView extends RelativeLayout { 7 | 8 | public CustomView(Context context) { 9 | super(context); 10 | init(); 11 | } 12 | 13 | private void init() { 14 | 15 | inflate(getContext(), R.layout.custom_view, this); 16 | 17 | } 18 | 19 | 20 | } 21 | -------------------------------------------------------------------------------- /app/src/main/java/com/vrgsoft/calendarview/GlideCalendarExtension.java: -------------------------------------------------------------------------------- 1 | package com.vrgsoft.calendarview; 2 | 3 | import com.bumptech.glide.annotation.GlideExtension; 4 | import com.bumptech.glide.load.resource.gif.GifDrawable; 5 | import com.bumptech.glide.request.RequestOptions; 6 | 7 | import static com.bumptech.glide.request.RequestOptions.decodeTypeOf; 8 | 9 | @GlideExtension 10 | public class GlideCalendarExtension { 11 | private GlideCalendarExtension() { } 12 | private static final RequestOptions DECODE_TYPE_GIF = decodeTypeOf(GifDrawable.class).lock(); 13 | 14 | // @GlideType(GifDrawable.class) 15 | // public static void asGif(RequestBuilder requestBuilder) { 16 | // requestBuilder 17 | // .transition(new DrawableTransitionOptions()) 18 | // .apply(DECODE_TYPE_GIF); 19 | // } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /app/src/main/java/com/vrgsoft/calendarview/GlideCalendarModule.java: -------------------------------------------------------------------------------- 1 | package com.vrgsoft.calendarview; 2 | 3 | import com.bumptech.glide.annotation.GlideModule; 4 | import com.bumptech.glide.module.AppGlideModule; 5 | 6 | @GlideModule 7 | public class GlideCalendarModule extends AppGlideModule { 8 | } 9 | -------------------------------------------------------------------------------- /app/src/main/java/com/vrgsoft/calendarview/MainActivity.java: -------------------------------------------------------------------------------- 1 | package com.vrgsoft.calendarview; 2 | 3 | import android.graphics.Color; 4 | import android.os.Bundle; 5 | import android.support.v4.content.ContextCompat; 6 | import android.support.v7.app.AppCompatActivity; 7 | import android.view.View; 8 | import android.widget.ImageView; 9 | import android.widget.Toast; 10 | 11 | import com.vrgsoft.calendar.VRCalendarCustomViewCallback; 12 | import com.vrgsoft.calendar.VRCalendarView; 13 | import com.vrgsoft.calendar.VrCalendarDay; 14 | import com.vrgsoft.calendar.VrCalendarDaySettings; 15 | import com.vrgsoft.calendar.calendar_listeners.OnCalendarClickListener; 16 | import com.vrgsoft.calendar.calendar_listeners.OnCalendarLongClickListener; 17 | import com.vrgsoft.calendar.calendar_listeners.VRCalendarMonthCallback; 18 | 19 | import java.text.DateFormat; 20 | import java.text.SimpleDateFormat; 21 | import java.util.Calendar; 22 | import java.util.Date; 23 | import java.util.List; 24 | import java.util.Locale; 25 | 26 | public class MainActivity extends AppCompatActivity implements OnCalendarClickListener, OnCalendarLongClickListener, VRCalendarMonthCallback { 27 | 28 | private VRCalendarView vrCalendarView; 29 | private DateFormat df = new SimpleDateFormat("yyyy-MMMM-dd", Locale.getDefault()); 30 | 31 | @Override 32 | protected void onCreate(Bundle savedInstanceState) { 33 | super.onCreate(savedInstanceState); 34 | setContentView(R.layout.activity_main); 35 | 36 | vrCalendarView = findViewById(R.id.calendar); 37 | vrCalendarView.getSettings() 38 | .setOnCalendarClickListener(this) 39 | .setOnCalendarLongClickListener(this) 40 | .setVRCalendarMonthCallback(this); 41 | 42 | findViewById(R.id.prev).setOnClickListener(new View.OnClickListener() { 43 | @Override 44 | public void onClick(View v) { 45 | Calendar calendar = Calendar.getInstance(); 46 | calendar.set(Calendar.YEAR, 2019); 47 | calendar.set(Calendar.MONTH, 6); 48 | calendar.set(Calendar.DAY_OF_MONTH, 27); 49 | vrCalendarView.moveToDate(new Date(calendar.getTimeInMillis())); 50 | } 51 | }); 52 | findViewById(R.id.next).setOnClickListener(new View.OnClickListener() { 53 | @Override 54 | public void onClick(View v) { 55 | Calendar calendar = Calendar.getInstance(); 56 | calendar.set(Calendar.YEAR, 2015); 57 | calendar.set(Calendar.MONTH, 6); 58 | calendar.set(Calendar.DAY_OF_MONTH, 27); 59 | vrCalendarView.moveToDate(new Date(calendar.getTimeInMillis())); 60 | } 61 | }); 62 | 63 | findViewById(R.id.update).setOnClickListener(new View.OnClickListener() { 64 | @Override 65 | public void onClick(View v) { 66 | vrCalendarView.getSettings() 67 | .setOtherMonthTextStyle(VRCalendarView.BOLD) 68 | .setCurrentMonthBackgroundColor(Color.CYAN) 69 | .updateCalendar(); 70 | } 71 | }); 72 | 73 | vrCalendarView.setDateFormat(df); 74 | vrCalendarView.getDayOfWeekTextView(VRCalendarView.SATURDAY).setTextSize(20); 75 | vrCalendarView.getDayOfWeekTextView(VRCalendarView.SUNDAY).setTextSize(20); 76 | vrCalendarView.getDayOfWeekTextView(VRCalendarView.SATURDAY).setTextColor(Color.RED); 77 | vrCalendarView.getDayOfWeekTextView(VRCalendarView.SUNDAY).setTextColor(Color.RED); 78 | vrCalendarView.weekContainer().setBackgroundColor(ContextCompat.getColor(this, R.color.colorToday)); 79 | vrCalendarView.titleContainer().setBackgroundColor(ContextCompat.getColor(this, R.color.colorTitle)); 80 | } 81 | 82 | @Override 83 | public void onCalendarDayClick(VrCalendarDay day) { 84 | Toast.makeText(MainActivity.this, " " + df.format(day.getDate()), Toast.LENGTH_SHORT).show(); 85 | 86 | VrCalendarDay today = new VrCalendarDay(); 87 | today.setVRCalendarCustomViewCallback(new VRCalendarCustomViewCallback() { 88 | @Override 89 | public View getNewCustomiseView() { 90 | ImageView imageView = new ImageView(MainActivity.this); 91 | imageView.setImageResource(R.drawable.ic_stat_name); 92 | return imageView; 93 | } 94 | }); 95 | today.setDate(day.getDate()); 96 | 97 | vrCalendarView.getSettings().updateCalendarDay(today, true); 98 | 99 | } 100 | 101 | @Override 102 | public void onCalendarDayLongClick(VrCalendarDay day) { 103 | Toast.makeText(MainActivity.this, "Long " + df.format(day.getDate()), Toast.LENGTH_SHORT).show(); 104 | 105 | VrCalendarDay today = new VrCalendarDay(); 106 | today.setDate(day.getDate()); 107 | VrCalendarDaySettings vrCalendarDaySettings = new VrCalendarDaySettings(); 108 | vrCalendarDaySettings.setDayTextStyle(VRCalendarView.BOLD); 109 | vrCalendarDaySettings.setDayTextSize(13); 110 | vrCalendarDaySettings.setDayBackgroundColor(ContextCompat.getColor(this, R.color.colorPrimary)); 111 | vrCalendarDaySettings.setDayTextColor(ContextCompat.getColor(this, R.color.colorToday)); 112 | today.setVrCalendarDaySettings(vrCalendarDaySettings); 113 | 114 | vrCalendarView.getSettings().updateCalendarDay(today, false); 115 | } 116 | 117 | @Override 118 | public List getCustomizeDayView(Calendar calendar) { 119 | 120 | CustomDayUtils customDayUtils = new CustomDayUtils(); 121 | 122 | return customDayUtils.getCustomizeDayView(this); 123 | } 124 | } 125 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_next.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VRGsoftUA/VRCalendarView/562847df5b08cc81519727665baef2996fda7925/app/src/main/res/drawable-hdpi/ic_next.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_next_button_example.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VRGsoftUA/VRCalendarView/562847df5b08cc81519727665baef2996fda7925/app/src/main/res/drawable-hdpi/ic_next_button_example.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_previous.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VRGsoftUA/VRCalendarView/562847df5b08cc81519727665baef2996fda7925/app/src/main/res/drawable-hdpi/ic_previous.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_stat_name.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VRGsoftUA/VRCalendarView/562847df5b08cc81519727665baef2996fda7925/app/src/main/res/drawable-hdpi/ic_stat_name.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_next.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VRGsoftUA/VRCalendarView/562847df5b08cc81519727665baef2996fda7925/app/src/main/res/drawable-mdpi/ic_next.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_next_button_example.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VRGsoftUA/VRCalendarView/562847df5b08cc81519727665baef2996fda7925/app/src/main/res/drawable-mdpi/ic_next_button_example.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_previous.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VRGsoftUA/VRCalendarView/562847df5b08cc81519727665baef2996fda7925/app/src/main/res/drawable-mdpi/ic_previous.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_stat_name.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VRGsoftUA/VRCalendarView/562847df5b08cc81519727665baef2996fda7925/app/src/main/res/drawable-mdpi/ic_stat_name.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_next.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VRGsoftUA/VRCalendarView/562847df5b08cc81519727665baef2996fda7925/app/src/main/res/drawable-xhdpi/ic_next.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_next_button_example.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VRGsoftUA/VRCalendarView/562847df5b08cc81519727665baef2996fda7925/app/src/main/res/drawable-xhdpi/ic_next_button_example.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_previous.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VRGsoftUA/VRCalendarView/562847df5b08cc81519727665baef2996fda7925/app/src/main/res/drawable-xhdpi/ic_previous.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_stat_name.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VRGsoftUA/VRCalendarView/562847df5b08cc81519727665baef2996fda7925/app/src/main/res/drawable-xhdpi/ic_stat_name.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/giphy.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VRGsoftUA/VRCalendarView/562847df5b08cc81519727665baef2996fda7925/app/src/main/res/drawable-xxhdpi/giphy.gif -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_next.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VRGsoftUA/VRCalendarView/562847df5b08cc81519727665baef2996fda7925/app/src/main/res/drawable-xxhdpi/ic_next.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_next_button_example.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VRGsoftUA/VRCalendarView/562847df5b08cc81519727665baef2996fda7925/app/src/main/res/drawable-xxhdpi/ic_next_button_example.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_previous.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VRGsoftUA/VRCalendarView/562847df5b08cc81519727665baef2996fda7925/app/src/main/res/drawable-xxhdpi/ic_previous.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_stat_name.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VRGsoftUA/VRCalendarView/562847df5b08cc81519727665baef2996fda7925/app/src/main/res/drawable-xxhdpi/ic_stat_name.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/simple_ex.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VRGsoftUA/VRCalendarView/562847df5b08cc81519727665baef2996fda7925/app/src/main/res/drawable-xxhdpi/simple_ex.jpg -------------------------------------------------------------------------------- /app/src/main/res/drawable/background.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 8 | 9 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/background_sample.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 8 | 9 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_main.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 26 | 27 | 28 |