diff --git a/android/src/main/java/com/henninghall/date_picker/DatePickerManager.java b/android/src/main/java/com/henninghall/date_picker/DatePickerManager.java index da4898a..63e7a13 100644 --- a/android/src/main/java/com/henninghall/date_picker/DatePickerManager.java +++ b/android/src/main/java/com/henninghall/date_picker/DatePickerManager.java @@ -1,7 +1,10 @@ package com.henninghall.date_picker; import android.support.annotation.Nullable; +import android.util.Log; import android.view.View; + +import com.facebook.react.bridge.ReadableMap; import com.facebook.react.common.MapBuilder; import com.facebook.react.uimanager.SimpleViewManager; import com.facebook.react.uimanager.ThemedReactContext; @@ -59,6 +62,11 @@ public class DatePickerManager extends SimpleViewManager { view.setMaximumDate(Utils.unixToDate(date)); } + @ReactProp(name = "fadeToColor") + public void setFadeToColor(PickerView view, @Nullable String color) { + view.style.setFadeToColor(color); + } + @ReactProp(name = "minuteInterval") public void setMinuteInterval(PickerView view, @Nullable int interval) throws Exception { if (interval < 0 || interval > 59) throw new Exception("Minute interval out of bounds"); diff --git a/android/src/main/java/com/henninghall/date_picker/PickerView.java b/android/src/main/java/com/henninghall/date_picker/PickerView.java index d4a054a..5c87356 100644 --- a/android/src/main/java/com/henninghall/date_picker/PickerView.java +++ b/android/src/main/java/com/henninghall/date_picker/PickerView.java @@ -5,6 +5,7 @@ import android.view.View; import android.widget.RelativeLayout; import com.facebook.react.bridge.Arguments; +import com.facebook.react.bridge.ReadableMap; import com.facebook.react.bridge.WritableMap; import com.facebook.react.uimanager.events.RCTEventEmitter; import com.henninghall.date_picker.wheelFunctions.AnimateToDate; @@ -46,10 +47,12 @@ public class PickerView extends RelativeLayout { public int minuteInterval = 1; public Locale locale; public Mode mode; + public Style style; public PickerView() { super(DatePickerManager.context); View rootView = inflate(getContext(), R.layout.datepicker_view, this); + this.style = new Style(this); RelativeLayout wheelsWrapper = (RelativeLayout) rootView.findViewById(R.id.wheelsWrapper); wheelsWrapper.setWillNotDraw(false); diff --git a/android/src/main/java/com/henninghall/date_picker/Style.java b/android/src/main/java/com/henninghall/date_picker/Style.java new file mode 100644 index 0000000..0d935b7 --- /dev/null +++ b/android/src/main/java/com/henninghall/date_picker/Style.java @@ -0,0 +1,35 @@ +package com.henninghall.date_picker; + +import android.graphics.Color; +import android.graphics.drawable.GradientDrawable; +import android.widget.ImageView; + + +class Style { + private final GradientDrawable gradientBottom; + private final GradientDrawable gradientTop; + + public Style(PickerView pickerView) { + ImageView overlayTop = (ImageView) pickerView.findViewById(R.id.overlay_top); + ImageView overlayBottom = (ImageView) pickerView.findViewById(R.id.overlay_bottom); + this.gradientTop = (GradientDrawable) overlayTop.getDrawable(); + this.gradientBottom = (GradientDrawable) overlayBottom.getDrawable(); + } + + public void setFadeToColor(String color) { + int alpha = validColor(color) ? 255 : 0; + gradientTop.setAlpha(alpha); + gradientBottom.setAlpha(alpha); + if(validColor(color)) { + int startColor = Color.parseColor("#FF"+ color.substring(1)); + int endColor = Color.parseColor("#00" + color.substring(1)); + gradientTop.setColors(new int[] {startColor, endColor}); + gradientBottom.setColors(new int[] {startColor, endColor}); + } + } + + private boolean validColor(String color){ + return color != null && color.length() == 7; + } + +} diff --git a/android/src/main/res/drawable/overlay.xml b/android/src/main/res/drawable/overlay.xml index 9a562a0..77d78de 100644 --- a/android/src/main/res/drawable/overlay.xml +++ b/android/src/main/res/drawable/overlay.xml @@ -1,5 +1,7 @@ - + + Examples {!this.state.picker && this.renderButtons()} {!!this.state.picker && this.renderBackButton()} {!!this.state.picker && this.renderPicker()} - + ); } - renderPicker = () => examples[this.state.picker].component + setBackgroundColor = backgroundColor => this.setState({ backgroundColor }) + + renderPicker = () => { + const Picker = examples[this.state.picker].component; + return + } renderButtons = () => Object.keys(examples) @@ -52,10 +62,12 @@ export default class App extends Component { const styles = StyleSheet.create({ container: { flex: 1, - alignItems: 'center', - backgroundColor: 'white', + backgroundColor: '#abcdef', marginTop: 15, }, + content: { + alignItems: 'center', + }, text: { color: 'dodgerblue', fontSize: 16, diff --git a/example/examples.js b/example/examples.js index 4efa8be..38f1b41 100644 --- a/example/examples.js +++ b/example/examples.js @@ -7,14 +7,14 @@ import { EXAMPLE_KEYS } from './exampleKeys' export default { [EXAMPLE_KEYS.MINIMAL]: { buttonTitle: 'Minimal', - component: + component: Minimal }, [EXAMPLE_KEYS.ADVANCED]: { buttonTitle: 'Advanced', - component: + component: Advanced }, [EXAMPLE_KEYS.TIME_MODE]: { buttonTitle: 'Time mode', - component: + component: TimeMode } } diff --git a/example/examples/Advanced.js b/example/examples/Advanced.js index e3b1d4d..c86d1b4 100644 --- a/example/examples/Advanced.js +++ b/example/examples/Advanced.js @@ -5,12 +5,12 @@ import DeviceInfo from 'react-native-device-info'; import DatePicker from 'react-native-date-picker-x'; import locales from '../locales'; -Date.prototype.addHours = function(h) { - this.setTime(this.getTime() + (h*60*60*1000)); - return this; +Date.prototype.addHours = function (h) { + this.setTime(this.getTime() + (h * 60 * 60 * 1000)); + return this; } -export default class App extends Component { +export default class Advanced extends Component { state = { chosenDate: new Date(), @@ -19,8 +19,7 @@ export default class App extends Component { } render() { - const result = locales.filter(createFilter(this.state.searchTerm)).slice(0, 5); - + const result = locales.filter(createFilter(this.state.searchTerm)).slice(0, 5); return ( Current locale: {this.state.locale} Current date: {this.state.chosenDate.toISOString()} - +