From 9e45c52c5441f42a634024f08f6128897fbc6025 Mon Sep 17 00:00:00 2001 From: Heonjae Jang Date: Wed, 15 Mar 2017 16:44:53 +0900 Subject: [PATCH] Auto Scrolling 1. Add OnFocusCommand in AppItemCell 2. Add ScrollToIndex in AppListView Change-Id: I9f76289febb1a21a58403ca1d54df4a753b5ce80 --- TVApps/TVApps/Controls/AppItemCell.xaml.cs | 14 +++---- TVApps/TVApps/Controls/AppListView.xaml | 2 +- TVApps/TVApps/Controls/AppListView.xaml.cs | 44 +++++++++++++++++++++- TVApps/TVApps/Views/MainPage.xaml.cs | 2 +- 4 files changed, 50 insertions(+), 12 deletions(-) diff --git a/TVApps/TVApps/Controls/AppItemCell.xaml.cs b/TVApps/TVApps/Controls/AppItemCell.xaml.cs index 29ef59a..1d8cd43 100755 --- a/TVApps/TVApps/Controls/AppItemCell.xaml.cs +++ b/TVApps/TVApps/Controls/AppItemCell.xaml.cs @@ -27,13 +27,10 @@ namespace TVApps.Controls /// hahaha /// public partial class AppItemCell : ViewCell - { - public static readonly BindableProperty OnClickedCommandProperty = BindableProperty.Create("OnClickedCommand", typeof(ICommand), typeof(AppItemCell), default(ICommand)); - public ICommand OnClickedCommand - { - get { return (ICommand)GetValue(OnClickedCommandProperty); } - set { SetValue(OnClickedCommandProperty, value); } - } + { + public ICommand OnClickedCommand { get; set; } + + public ICommand OnFocusedCommand { get; set; } public static readonly BindableProperty IsPinnedProperty = BindableProperty.Create("IsPinned", typeof(bool), typeof(AppItemCell), default(bool)); public bool IsPinned @@ -104,11 +101,12 @@ namespace TVApps.Controls private void OnClicked(object sender, EventArgs e) { - OnClickedCommand.Execute(""); + OnClickedCommand?.Execute(""); } private void OnFocused(object sender, EventArgs e) { + OnFocusedCommand?.Execute(""); ButtonImage.ScaleTo(1.32, 300); ButtonImage.TranslateTo(0.0, 2.0, 300); TextArea.TranslateTo(0.0, 26.0, 300); diff --git a/TVApps/TVApps/Controls/AppListView.xaml b/TVApps/TVApps/Controls/AppListView.xaml index 67a36cb..82ad28e 100755 --- a/TVApps/TVApps/Controls/AppListView.xaml +++ b/TVApps/TVApps/Controls/AppListView.xaml @@ -8,7 +8,7 @@ Orientation="Horizontal"> + Padding="58,0,58,0"> diff --git a/TVApps/TVApps/Controls/AppListView.xaml.cs b/TVApps/TVApps/Controls/AppListView.xaml.cs index bf92647..24bcef8 100644 --- a/TVApps/TVApps/Controls/AppListView.xaml.cs +++ b/TVApps/TVApps/Controls/AppListView.xaml.cs @@ -23,6 +23,8 @@ using System.ComponentModel; using LibTVRefCommmonPortable.DataModels; using LibTVRefCommmonPortable.Utils; using System.Collections.Generic; +using System; +using System.Threading.Tasks; namespace TVApps.Controls { @@ -72,6 +74,9 @@ namespace TVApps.Controls return; } + // For Test Code + //for (var test = 0; test < 4; test++) + //{ foreach (var item in ItemsSource) { var viewCell = ItemTemplate.CreateContent() as AppItemCell; @@ -82,6 +87,11 @@ namespace TVApps.Controls { item.DoAction(); }); + var index = AppCount / 2; + viewCell.OnFocusedCommand = new Command(() => + { + ScrollToIndex(index); + }); if (AppCount % 2 == 0) { AppUpperList.Children.Add(viewCell.View); @@ -93,11 +103,41 @@ namespace TVApps.Controls AppCount = AppCount + 1; } + //} + + InitializeFocus(); + } - FocusInitialize(); + private async void ScrollToIndex(int index) + { + var StartX = AppUpperList.Children[index].X; + var LowerBound = StartX - 16 - 57 - (256 * 6) + 58; + LowerBound = LowerBound > 0 ? LowerBound : 0; + var UpperBound = StartX - 16 - 57 + 58; + UpperBound = UpperBound > 0 ? UpperBound : 0; + + // Is Focusable. + if (ScrollX >= LowerBound && ScrollX <= UpperBound) + { + return; + } + + var Ldiff = Math.Abs(ScrollX - LowerBound); + var Rdiff = Math.Abs(ScrollX - UpperBound); + + if (Ldiff > Rdiff) + { + await Task.Delay(1); + await ScrollToAsync(UpperBound, 0, true); + } + else + { + await Task.Delay(1); + await ScrollToAsync(LowerBound, 0, true); + } } - public void FocusInitialize() + public void InitializeFocus() { if (AppUpperList.Children.Count > 0) { diff --git a/TVApps/TVApps/Views/MainPage.xaml.cs b/TVApps/TVApps/Views/MainPage.xaml.cs index bb68cfb..2452570 100644 --- a/TVApps/TVApps/Views/MainPage.xaml.cs +++ b/TVApps/TVApps/Views/MainPage.xaml.cs @@ -66,7 +66,7 @@ namespace TVApps.Views break; } - AppList.FocusInitialize(); + AppList.InitializeFocus(); } private void MainPage_PropertyChanged(object sender, PropertyChangedEventArgs e) -- 2.34.1