diff --git a/BCL.csproj b/BCL.csproj
index bc71a73a0..d422f85f1 100644
--- a/BCL.csproj
+++ b/BCL.csproj
@@ -279,6 +279,10 @@
button.d.ts
+
+
+
+
diff --git a/ui/slider/index.ts b/ui/slider/index.ts
new file mode 100644
index 000000000..98b71d5c8
--- /dev/null
+++ b/ui/slider/index.ts
@@ -0,0 +1,2 @@
+declare var module, require;
+module.exports = require("ui/slider/slider");
\ No newline at end of file
diff --git a/ui/slider/slider.android.ts b/ui/slider/slider.android.ts
new file mode 100644
index 000000000..b5dd6ec08
--- /dev/null
+++ b/ui/slider/slider.android.ts
@@ -0,0 +1,88 @@
+
+import observable = require("ui/core/observable");
+import view = require("ui/core/view");
+import application = require("application");
+
+export class Slider extends view.View {
+ private static valueProperty = "value";
+ private static maxValueProperty = "maxValue";
+
+ private _android: android.widget.SeekBar;
+ private _changeListener: android.widget.SeekBar.OnSeekBarChangeListener;
+
+ private _preValue: number;
+ private _preMaxValue: number;
+
+ constructor() {
+ super();
+ this._preValue = 0;
+ this._preMaxValue = 100;
+ }
+
+ private createUI(context: android.content.Context) {
+ this._android = new android.widget.SeekBar(context);
+
+ this._android.setMax(this._preMaxValue);
+ this._android.setProgress(this._preValue);
+
+ var that = this;
+ this._changeListener = new android.widget.SeekBar.OnSeekBarChangeListener({
+ onProgressChanged: function (seekBar: android.widget.SeekBar, progress: number, fromUser: boolean) {
+ //console.log("changed");
+ that.setProperty(Slider.valueProperty, seekBar.getProgress());
+ },
+
+ onStartTrackingTouch: function (seekBar: android.widget.SeekBar) {
+
+ },
+
+ onStopTrackingTouch: function (seekBar: android.widget.SeekBar) {
+
+ }
+ });
+ this._android.setOnSeekBarChangeListener(this._changeListener);
+ }
+
+ public onInitialized(context: android.content.Context) {
+ if (!this._android) {
+ // TODO: We need to decide whether we will support context switching and if yes - to implement it.
+ this.createUI(context);
+ }
+ }
+
+ get android(): android.widget.SeekBar {
+ return this._android;
+ }
+
+ get maxValue(): number {
+ return this._android.getMax();
+ }
+
+ set maxValue(value: number) {
+ this.setProperty(Slider.maxValueProperty, value);
+ }
+
+ get value(): number {
+ return this._android.getProgress();
+ }
+
+ set value(value: number) {
+ this.setProperty(Slider.valueProperty, value);
+ }
+
+ public setNativeProperty(data: observable.PropertyChangeData) {
+ // TODO: Will this be a gigantic if-else switch?
+ if (data.propertyName === Slider.maxValueProperty) {
+ if (this._android)
+ this._android.setMax(data.value);
+ else
+ this._preMaxValue = data.value;
+ } else if (data.propertyName === Slider.valueProperty) {
+ if (this._android)
+ this._android.setProgress(data.value);
+ else
+ this._preValue = data.value;
+ } else if (true) {
+ }
+ }
+}
diff --git a/ui/slider/slider.d.ts b/ui/slider/slider.d.ts
new file mode 100644
index 000000000..c79f30b8f
--- /dev/null
+++ b/ui/slider/slider.d.ts
@@ -0,0 +1,10 @@
+declare module "ui/slider" {
+
+ class Slider {
+ android: android.widget.SeekBar;
+ ios: UIKit.UISlider;
+
+ value: number;
+ maxValue: number;
+ }
+}
\ No newline at end of file
diff --git a/ui/slider/slider.ios.ts b/ui/slider/slider.ios.ts
new file mode 100644
index 000000000..afd236f36
--- /dev/null
+++ b/ui/slider/slider.ios.ts
@@ -0,0 +1,63 @@
+
+import observable = require("ui/core/observable");
+import view = require("ui/core/view");
+
+export class Slider extends view.View {
+ private static valueProperty = "value";
+ private static maxValueProperty = "maxValue";
+ private _ios: UIKit.UISlider;
+ private changeHandler: Foundation.NSObject;
+
+ constructor() {
+ super();
+ this._ios = new UIKit.UISlider();
+
+ // default values
+ this._ios.minimumValue = 0;
+ this._ios.maximumValue = 100;
+
+ var that = this;
+ var ChangeHandler = Foundation.NSObject.extends(
+ {
+ sliderValueChanged: function (sender: UIKit.UISlider) {
+ that.setProperty(Slider.valueProperty, sender.value);
+ }
+ }, {
+ exposedMethods: {
+ 'sliderValueChanged': 'v@:@'
+ }
+ });
+
+ this.changeHandler = new ChangeHandler();
+ this._ios.addTargetActionForControlEvents(this.changeHandler, "sliderValueChanged", UIKit.UIControlEvents.UIControlEventValueChanged);
+ }
+
+ get ios(): UIKit.UISlider {
+ return this._ios;
+ }
+
+ get maxValue(): number {
+ return this._ios.maximumValue;
+ }
+
+ set maxValue(value: number) {
+ this.setProperty(Slider.maxValueProperty, value);
+ }
+
+ get value(): number {
+ return this._ios.value;
+ }
+
+ set value(value: number) {
+ this.setProperty(Slider.valueProperty, value);
+ }
+
+ public setNativeProperty(data: observable.PropertyChangeData) {
+ if (data.propertyName === Slider.maxValueProperty) {
+ this._ios.maximumValue = data.value;
+ } else if (data.propertyName === Slider.valueProperty) {
+ this._ios.value = data.value;
+ } else if (true) {
+ }
+ }
+}
\ No newline at end of file