Skip to content

Commit

Permalink
Merge pull request prolificinteractive#488 from yodle/future-1.x
Browse files Browse the repository at this point in the history
Bug Fix: decorator rendering with customer tile dimensions on API Level 21
  • Loading branch information
quentin41500 authored Feb 14, 2017
2 parents bfbaaed + 79cf93d commit 46dbe98
Show file tree
Hide file tree
Showing 3 changed files with 43 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -167,6 +167,7 @@ protected void setupSelection(@ShowOtherDates int showOtherDates, boolean inRang
}

private final Rect tempRect = new Rect();
private final Rect circleDrawableRect = new Rect();

@Override
protected void onDraw(@NonNull Canvas canvas) {
Expand All @@ -176,7 +177,7 @@ protected void onDraw(@NonNull Canvas canvas) {
customBackground.draw(canvas);
}

mCircleDrawable.setBounds(tempRect);
mCircleDrawable.setBounds(circleDrawableRect);

super.onDraw(canvas);
}
Expand All @@ -185,7 +186,7 @@ private void regenerateBackground() {
if (selectionDrawable != null) {
setBackgroundDrawable(selectionDrawable);
} else {
mCircleDrawable = generateBackground(selectionColor, fadeTime, tempRect);
mCircleDrawable = generateBackground(selectionColor, fadeTime, circleDrawableRect);
setBackgroundDrawable(mCircleDrawable);
}
}
Expand Down Expand Up @@ -265,14 +266,17 @@ protected void onLayout(boolean changed, int left, int top, int right, int botto

private void calculateBounds(int width, int height) {
final int radius = Math.min(height, width);
// Lollipop platform bug. Rect offset needs to be divided by 4 instead of 2
final int offsetDivisor = Build.VERSION.SDK_INT == Build.VERSION_CODES.LOLLIPOP ? 4 : 2;
final int offset = Math.abs(height - width) / offsetDivisor;
final int offset = Math.abs(height - width) / 2;

// Lollipop platform bug. Circle drawable offset needs to be half of normal offset
final int circleOffset = Build.VERSION.SDK_INT == Build.VERSION_CODES.LOLLIPOP ? offset / 2 : offset;

if (width >= height) {
tempRect.set(offset, 0, radius + offset, height);
circleDrawableRect.set(circleOffset, 0, radius + circleOffset, height);
} else {
tempRect.set(0, offset, width, radius + offset);
circleDrawableRect.set(0, circleOffset, width, radius + circleOffset);
}
}
}
Original file line number Diff line number Diff line change
@@ -1,13 +1,17 @@
package com.prolificinteractive.materialcalendarview.sample;

import android.content.DialogInterface;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.widget.LinearLayout;
import android.widget.NumberPicker;

import com.prolificinteractive.materialcalendarview.CalendarDay;
import com.prolificinteractive.materialcalendarview.DayViewDecorator;
import com.prolificinteractive.materialcalendarview.DayViewFacade;
import com.prolificinteractive.materialcalendarview.MaterialCalendarView;

import butterknife.Bind;
Expand All @@ -33,6 +37,8 @@ protected void onCreate(Bundle savedInstanceState) {

currentTileWidth = MaterialCalendarView.DEFAULT_TILE_SIZE_DP;
currentTileHeight = MaterialCalendarView.DEFAULT_TILE_SIZE_DP;

widget.addDecorator(new TodayDecorator());
}

@OnClick(R.id.custom_tile_match_parent)
Expand Down Expand Up @@ -87,4 +93,25 @@ public void onClick(@NonNull DialogInterface dialog, int which) {
})
.show();
}

private class TodayDecorator implements DayViewDecorator {

private final CalendarDay today;
private final Drawable backgroundDrawable;

public TodayDecorator() {
today = CalendarDay.today();
backgroundDrawable = getResources().getDrawable(R.drawable.today_circle_background);
}

@Override
public boolean shouldDecorate(CalendarDay day) {
return today.equals(day);
}

@Override
public void decorate(DayViewFacade view) {
view.setBackgroundDrawable(backgroundDrawable);
}
}
}
7 changes: 7 additions & 0 deletions sample/src/main/res/drawable/today_circle_background.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">

<solid android:color="#44afcc" />

</shape>

0 comments on commit 46dbe98

Please sign in to comment.