Stuart, Have you made any more changes to this code? Also, do you have a photo of how this looks? I'm thinking of adding a pager control to my app--I use a UIPagerController in my iPhone version and am looking for something like the UIPagerControl (http://books.google.com/books?id=lFe0EwHUREEC&pg=PA125&lpg=PA125&dq=uipagercontrol&source=bl&ots=-SNjmXH5Z3&sig=Aa0tUicP1yWkcJ0cA8i8STg6_3w&hl=en&sa=X&ei=2yA3T8WzA8mEsALg-fSiAg&ved=0CC8Q6AEwAg#v=onepage&q=uipagercontrol&f=false)
Thanks, Gerry On Feb 4, 2012, at 2:33 PM, Stuart Lodge wrote: > If it helps I've also just ported a Page Indicator from the Java sample on > this blog: > http://buildmobile.com/how-to-build-an-android-pager-component/#fbid=TnZmgHdBfhF > (license unclear?) > > Still some sizing issues to sort out - and it would be nice to make it more > "animated" - but it basically works > > Stuart > using System; > using Android.Content; > using Android.Graphics; > using Android.Util; > using Android.Views; > > namespace SocialStorm.Android.Controls > { > public class HorizontalPagerIndicator : View > { > private HorizontalPager _pager; > private Paint _textPaint; > private Paint _dotPaint; > private int _textHeight; > private int _ascent; > private int _cellSize; > > public HorizontalPagerIndicator(Context context, IAttributeSet attrs) > : base(context, attrs) > { > InitPaints(); > } > > > public HorizontalPagerIndicator(Context context) > : base(context) > { > InitPaints(); > } > > private void InitPaints() > { > _textPaint = new Paint {AntiAlias = true, TextSize = 10, Color = > Color.Black}; > > _dotPaint = new Paint {AntiAlias = true, Color = Color.Gray}; > > _ascent = -(int)_textPaint.Ascent(); > _textHeight = (int)(_ascent + _textPaint.Descent()); > _cellSize = _textHeight + 6; > } > > > public HorizontalPager Pager > { > get { return _pager; } > set > { > > if (_pager != null) > { > _pager.ScreenChanged -= PagerOnScreenChanged; > } > _pager = value; > if (_pager != null) > { > _pager.ScreenChanged += PagerOnScreenChanged; > } > UpdatePageCount(); > } > } > > private void PagerOnScreenChanged(object sender, EventArgs eventArgs) > { > Invalidate(); > } > > public void UpdatePageCount() > { > RequestLayout(); > Invalidate(); > } > > private int NumPages > { > get > { > return _pager == null ? 1 : _pager.ChildCount; > } > } > > private int ActivePage > { > get > { > return _pager == null ? 0 : _pager.CurrentScreen; > } > } > > > protected override void OnMeasure(int widthMeasureSpec, int > heightMeasureSpec) > { > SetMeasuredDimension(MeasureWidth(widthMeasureSpec), > MeasureHeight(heightMeasureSpec)); > } > > private int MeasureWidth(int measureSpec) > { > var result = 0; > var specMode = MeasureSpec.GetMode(measureSpec); > var specSize = MeasureSpec.GetSize(measureSpec); > > if (specMode == MeasureSpecMode.Exactly) > { > // We were told how big to be > result = specSize; > } > else > { > result = NumPages * _cellSize; > if (specMode == MeasureSpecMode.AtMost) > { > // Respect AT_MOST value if that was what is called for by > // measureSpec > result = Math.Min(result, specSize); > } > } > return result; > } > > private int MeasureHeight(int measureSpec) > { > var result = 0; > var specMode = MeasureSpec.GetMode(measureSpec); > var specSize = MeasureSpec.GetSize(measureSpec); > > > if (specMode == MeasureSpecMode.Exactly) > { > // We were told how big to be > result = specSize; > } > else > { > result = _cellSize; > if (specMode == MeasureSpecMode.AtMost) > { > // Respect AT_MOST value if that was what is called for by > // measureSpec > result = Math.Min(result, specSize); > } > } > return result; > } > > protected override void OnDraw(Canvas canvas) > { > base.OnDraw(canvas); > > var count = NumPages; > var current = ActivePage; > > int x = 0; > for (int i = 0; i < count; i++, x += _cellSize) > { > if (i == current) > { > String txt = (i + 1).ToString(); > var bounds = new Rect(); > _textPaint.GetTextBounds(txt, 0, txt.Length, bounds); > var oval = new RectF(x + 1, 1, x + _cellSize - 2, > _cellSize - 2); > canvas.DrawOval(oval, _dotPaint); > canvas.DrawText(txt, x + (_cellSize - bounds.Width()) / > 2, (_cellSize - _textHeight) / 2 + _ascent, _textPaint); > } > else > { > const int dotSize = 5; > var dotOffset = (_cellSize - dotSize) / 2; > var oval = new RectF(x + dotOffset, dotOffset, x + > dotOffset + dotSize, dotOffset + dotSize); > canvas.DrawOval(oval, _dotPaint); > } > } > } > > } > } > > On 25 January 2012 21:20, Tomasz Cielecki <tom...@ostebaronen.dk> wrote: > Do what you want as long as it does not violate the License :) > > On Wed, Jan 25, 2012 at 8:47 PM, Miljenko Cvjetko > <mcvje...@holisticware.net> wrote: > > Hi > > > > On 2012.01.25 14:12, Tomasz Cielecki wrote: > > > > I have made a port of a Horizontal Pager which can be found > > here: https://github.com/Cheesebaron/MonoDroid.HorizontalPager > > > > Great job! > > Thanks. > > > > may I put it together as VS item template? > > ... and publish it of course ... > > > > regards > > > > mel > > > > > > It works in a similar manner. This is an entirely C# implementation. > > > > On Jan 25, 2012 12:52 PM, "Stuart Lodge" <m...@slodge.com> wrote: > >> > >> I don't suppose anyone has already done this and would like to share the > >> source (just asking in case) > >> > >> If not, then I'll have a go... as I'd quite like to use the ViewPager in > >> this app. > >> > >> On 23 January 2012 21:24, Jonathan Pryor <j...@xamarin.com> wrote: > >>> > >>> On Jan 21, 2012, at 7:36 AM, k0ng wrote: > >>> > I want to use ViewPager as demo in this website > >>> > > >>> > http://geekyouup.blogspot.com/2011/07/viewpager-example-from-paug.html > >>> > >>> Right now, it won't be easy, as you need to manually bind the Java types. > >>> > >>> In a future release, we'll be providing a tool to simplify the binding > >>> process. > >>> > >>> If you really want to hand-bind them now, see: > >>> > >>> The base Java class: > >>> https://github.com/xamarin/monodroid-samples/blob/master/SanityTests/Adder.java > >>> The C# glue code for inheritance: > >>> https://github.com/xamarin/monodroid-samples/blob/master/SanityTests/ManagedAdder.cs > >>> > >>> - Jon > >>> > >>> _______________________________________________ > >>> Monodroid mailing list > >>> Monodroid@lists.ximian.com > >>> > >>> UNSUBSCRIBE INFORMATION: > >>> http://lists.ximian.com/mailman/listinfo/monodroid > >>> > >> > >> > >> _______________________________________________ > >> Monodroid mailing list > >> Monodroid@lists.ximian.com > >> > >> UNSUBSCRIBE INFORMATION: > >> http://lists.ximian.com/mailman/listinfo/monodroid > >> > > > > > > _______________________________________________ > > Monodroid mailing list > > Monodroid@lists.ximian.com > > > > UNSUBSCRIBE INFORMATION: > > http://lists.ximian.com/mailman/listinfo/monodroid > > > > > > > > -- > > Miljenko Cvjetko dipl.ing. ET > > Direktor/CEO > > Projektant rješenja/Solution Architect > > Razvojni programer/Senior developer > > Voditelj projekta/Project Manager > > > > IX južna obala 13 > > Kajzerica Zagreb > > T: 385 1 7775555 > > M: 385 91 557 447 3 > > F: 385 1 7779556 > > e: mcvje...@holisticware.net > > w: http://www.holisticware.net > > > > -- > Med Venlig Hilsen / With Best Regards > Tomasz Cielecki > http://ostebaronen.dk > _______________________________________________ > Monodroid mailing list > Monodroid@lists.ximian.com > > UNSUBSCRIBE INFORMATION: > http://lists.ximian.com/mailman/listinfo/monodroid > > _______________________________________________ > Monodroid mailing list > Monodroid@lists.ximian.com > > UNSUBSCRIBE INFORMATION: > http://lists.ximian.com/mailman/listinfo/monodroid
_______________________________________________ Monodroid mailing list Monodroid@lists.ximian.com UNSUBSCRIBE INFORMATION: http://lists.ximian.com/mailman/listinfo/monodroid