Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Скролинг в listview - Xamarin

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Xamarin Изображения, image, imageview, версии xmlns и другие интересности http://www.cyberforum.ru/xamarin/thread1797707.html
совсем запутался в этом ксамарине. ересь какая-то. ну, начну по порядку: самое первое - какая разница между проектами, которые можно создать? есть Blank App (Native portable), Blank App (Xamarin...
Xamarin Изменение картинки в imageview по нажатию button Делаю первые шаги в изучении xamarin. Пишу для android и не могу понять как сделать, чтобы менялась картинка при нажатии клавиши. В вижуале подходила примерно следующая команда pictureBox1.Image =... http://www.cyberforum.ru/xamarin/thread1797641.html
Visual Studio 2015. Выполнить код при запуске Xamarin
Тривиальная задача, но нигде не могу найти решение. Каким образом можно сделать так, тобы некоторый код выполнялся однократно при запуске приложения?
Новый проект Xamarin в Microsoft Visual Studio Community 2015 создается с ошибками Xamarin
Здравствуйте. При создании нового проекта в Microsoft Visual Studio Community 2015, новый проект создается с ошибками. Поначалу появляются многочисленные предупреждения, а далее, при переходе...
Xamarin Сколько весит Xamarin? http://www.cyberforum.ru/xamarin/thread1796335.html
Сколько весят файлы, которые нужно скачать? И сколько он займёт места на жёстком диске? Добавлено через 13 часов 10 минут То есть у кого не удалёны те файлы, которые используются при установки,...
Xamarin Анимированные объекты в приложении Продолжая атаку на форум... задумал я в приложение запилить что-то типа главного героя. к примеру это будет кролик. когда приложение не активно - кроль выполняет какие-то действия - к примеру,... подробнее

Показать сообщение отдельно
levivas
1 / 1 / 0
Регистрация: 29.10.2015
Сообщений: 14

Скролинг в listview - Xamarin

23.08.2016, 15:31. Просмотров 406. Ответов 0
Метки (Все метки)

Здравствуйте. Проблема из работой scroll в listview. Есть viewcell в котором есть текст, картинка и разное количество картинок(то есть viewcell не повторяется, а view елементов может быть разное количество, по этой же причине я не могу использовать ListViewCachingStrategy.RecycleElement, т.к. стратегия работает только, если в каждом елементе listview одинаковое количество view елементов

Что можна попробовать еще сделать. (добавил библиотеку FFImageLoading для картинок), но результат почти не заметен.

Код страницы
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
using System.Collections.Generic;
using FFImageLoading.Forms;
using ScrollList.ViewModels;
using Xamarin.Forms;
 
namespace ScrollList
{
    public partial class MainPage : ContentPage
    {
        public MainPage()
        {
            InitializeComponent();
            var listView = new ListView()
            {
                HasUnevenRows = true,
                ItemTemplate = new DataTemplate(typeof(CustomProfileCell)),
                SeparatorVisibility = SeparatorVisibility.None
            };
            Content = listView;
 
            listView.ItemsSource = posts;
        }
 
        async void WallItemTapped(object sender, ItemTappedEventArgs e)
        {
 
        }
    }
 
    public class PostStackLayout : StackLayout
    {
        private Grid _imageGridLayout = null;
 
        protected override void OnBindingContextChanged()
        {
            var wallPostViewModel = (MainPageViewModel)BindingContext;
            switch (wallPostViewModel.Images.Count)
            {
                case 1:
                    _imageGridLayout = GetGridOnePhoto(wallPostViewModel);
                    break;
 
                case 2:
                    _imageGridLayout = GetGridTwoPhotos(wallPostViewModel);
                    break;
 
                case 3:
                    _imageGridLayout = GetGridThreePhotos(wallPostViewModel);
                    break;
 
             // skip some code
 
                case 8:
                    _imageGridLayout = GetGridEightPhotos(wallPostViewModel);
                    break;
            }
 
            Children.Add(_imageGridLayout);
        }
 
        private Grid GetGridOnePhoto(MainPageViewModel model)
        {
            var postImage1_0 = new CachedImage
            {
                Aspect = Aspect.AspectFit,
                HorizontalOptions = LayoutOptions.FillAndExpand,
                VerticalOptions = LayoutOptions.FillAndExpand,
                Source = model.Images[0]
            };
            //Image grids for 1 post images
            _imageGridLayout = new Grid()
            {
                ColumnDefinitions = new ColumnDefinitionCollection
                {
                    new ColumnDefinition {Width = new GridLength(1, GridUnitType.Auto)}
                },
                RowDefinitions = new RowDefinitionCollection
                {
                    new RowDefinition {Height = new GridLength(1, GridUnitType.Auto)}
                }
            };
            _imageGridLayout.Children.Add(postImage1_0, 0, 0);
            return _imageGridLayout;
        }
 
        private Grid GetGridTwoPhotos(MainPageViewModel model)
        {
            var postImage2_0 = new CachedImage
            {
                Aspect = Aspect.AspectFit,
                HorizontalOptions = LayoutOptions.FillAndExpand,
                VerticalOptions = LayoutOptions.FillAndExpand,
                Source = model.Images[0],
            };
            var postImage2_1 = new CachedImage
            {
                Aspect = Aspect.AspectFit,
                HorizontalOptions = LayoutOptions.FillAndExpand,
                VerticalOptions = LayoutOptions.FillAndExpand,
                Source = model.Images[1],
            };
            //Image grids for 2 post images
            _imageGridLayout = new Grid()
            {
                ColumnDefinitions = new ColumnDefinitionCollection
                {
                    new ColumnDefinition {Width = new GridLength(1, GridUnitType.Star)},
                    new ColumnDefinition {Width = new GridLength(1, GridUnitType.Star)}
                },
                RowDefinitions = new RowDefinitionCollection
                {
                    new RowDefinition {Height = new GridLength(1, GridUnitType.Auto)}
                }
            };
            _imageGridLayout.Children.Add(postImage2_0, 0, 0);
            _imageGridLayout.Children.Add(postImage2_1, 1, 0);
            return _imageGridLayout;
        }
 
        private Grid GetGridThreePhotos(MainPageViewModel model)
        {
            var postImage3_0 = new CachedImage
            {
                Aspect = Aspect.AspectFit,
                HorizontalOptions = LayoutOptions.FillAndExpand,
                VerticalOptions = LayoutOptions.FillAndExpand,
                Source = model.Images[0],
            };
            var postImage3_1 = new CachedImage
            {
                Aspect = Aspect.AspectFit,
                HorizontalOptions = LayoutOptions.FillAndExpand,
                VerticalOptions = LayoutOptions.FillAndExpand,
                Source = model.Images[1],
            };
            var postImage3_2 = new CachedImage
            {
                Aspect = Aspect.AspectFit,
                HorizontalOptions = LayoutOptions.FillAndExpand,
                VerticalOptions = LayoutOptions.FillAndExpand,
                Source = model.Images[2],
            };
            //Image grids for 3 post images
            _imageGridLayout = new Grid()
            {
                ColumnDefinitions = new ColumnDefinitionCollection
                {
                    new ColumnDefinition {Width = new GridLength(1, GridUnitType.Star)},
                    new ColumnDefinition {Width = new GridLength(1, GridUnitType.Star)}
                },
                RowDefinitions = new RowDefinitionCollection
                {
                    new RowDefinition {Height = new GridLength(1, GridUnitType.Auto)},
                    new RowDefinition {Height = new GridLength(1, GridUnitType.Auto)}
                },
            };
            _imageGridLayout.Children.Add(postImage3_0, 0, 2, 0, 1);
            _imageGridLayout.Children.Add(postImage3_1, 0, 1);
            _imageGridLayout.Children.Add(postImage3_2, 1, 1);
            return _imageGridLayout;
        }
 
        // skip some code
        private Grid GetGridEightPhotos(MainPageViewModel model)
        {
            var postImage8_0 = new CachedImage
            {
                Aspect = Aspect.AspectFit,
                HorizontalOptions = LayoutOptions.FillAndExpand,
                VerticalOptions = LayoutOptions.FillAndExpand,
                Source = model.Images[0],
            };
            var postImage8_1 = new CachedImage
            {
                Aspect = Aspect.AspectFit,
                HorizontalOptions = LayoutOptions.FillAndExpand,
                VerticalOptions = LayoutOptions.FillAndExpand,
                Source = model.Images[1],
            };
            var postImage8_2 = new CachedImage
            {
                Aspect = Aspect.AspectFit,
                HorizontalOptions = LayoutOptions.FillAndExpand,
                VerticalOptions = LayoutOptions.FillAndExpand,
                Source = model.Images[2],
            };
            var postImage8_3 = new CachedImage
            {
                Aspect = Aspect.AspectFit,
                HorizontalOptions = LayoutOptions.FillAndExpand,
                VerticalOptions = LayoutOptions.FillAndExpand,
                Source = model.Images[3],
            };
            var postImage8_4 = new CachedImage
            {
                Aspect = Aspect.AspectFit,
                HorizontalOptions = LayoutOptions.FillAndExpand,
                VerticalOptions = LayoutOptions.FillAndExpand,
                Source = model.Images[4],
            };
            var postImage8_5 = new CachedImage
            {
                Aspect = Aspect.AspectFit,
                HorizontalOptions = LayoutOptions.FillAndExpand,
                VerticalOptions = LayoutOptions.FillAndExpand,
                Source = model.Images[5],
            };
            var postImage8_6 = new CachedImage
            {
                Aspect = Aspect.AspectFit,
                HorizontalOptions = LayoutOptions.FillAndExpand,
                VerticalOptions = LayoutOptions.FillAndExpand,
                Source = model.Images[6],
            };
            var postImage8_7 = new CachedImage
            {
                Aspect = Aspect.AspectFit,
                HorizontalOptions = LayoutOptions.FillAndExpand,
                VerticalOptions = LayoutOptions.FillAndExpand,
                Source = model.Images[7],
            };
            //Image grids for 8 post images
            _imageGridLayout = new Grid
            {
                ColumnDefinitions = new ColumnDefinitionCollection
                {
                    new ColumnDefinition {Width = new GridLength(1, GridUnitType.Star)},
                    new ColumnDefinition {Width = new GridLength(1, GridUnitType.Star)},
                    new ColumnDefinition {Width = new GridLength(1, GridUnitType.Star)},
                    new ColumnDefinition {Width = new GridLength(1, GridUnitType.Star)}
                },
                RowDefinitions = new RowDefinitionCollection
                {
                    new RowDefinition {Height = new GridLength(1, GridUnitType.Auto)},
                    new RowDefinition {Height = new GridLength(1, GridUnitType.Auto)}
                }
            };
            _imageGridLayout.Children.Add(postImage8_0, 0, 0);
            _imageGridLayout.Children.Add(postImage8_1, 1, 0);
            _imageGridLayout.Children.Add(postImage8_2, 2, 0);
            _imageGridLayout.Children.Add(postImage8_3, 3, 0);
            _imageGridLayout.Children.Add(postImage8_4, 0, 1);
            _imageGridLayout.Children.Add(postImage8_5, 1, 1);
            _imageGridLayout.Children.Add(postImage8_6, 2, 1);
            _imageGridLayout.Children.Add(postImage8_7, 3, 1);
            return _imageGridLayout;
        }
    }
 
    public class CustomProfileCell : ViewCell
    {
        public CustomProfileCell()
        {
            //mainLayout
            StackLayout mainLayout = new StackLayout() { Padding = new Thickness(0, 0, 0, 8) };
            Grid postGrid = new Grid
            {
                BackgroundColor = Color.White,
                Padding = new Thickness(10, 5, 10, 5),
                ColumnDefinitions = new ColumnDefinitionCollection
                {
                    new ColumnDefinition {Width = GridLength.Auto},
                    new ColumnDefinition {Width = new GridLength(1, GridUnitType.Star)}
                },
                RowDefinitions = new RowDefinitionCollection
                {
                    new RowDefinition {Height = GridLength.Auto},
                    new RowDefinition {Height = GridLength.Auto},
                    new RowDefinition {Height = GridLength.Auto}
                }
            };
            mainLayout.Children.Add(postGrid);
 
            //Avatar Layout
            var avatarLayout = new StackLayout();
            postGrid.Children.Add(avatarLayout, 0, 0);
 
            var avatarImage = new Image
            {
                Aspect = Aspect.AspectFill,
                WidthRequest = Device.OnPlatform(55, 55, 75),
                HeightRequest = Device.OnPlatform(55, 55, 75)
            };
            avatarImage.SetBinding(Image.SourceProperty, new Binding("UserImage"));
            avatarLayout.Children.Add(avatarImage);
 
            //User Name Layout
            var userNameLayout = new StackLayout();
            postGrid.Children.Add(userNameLayout, 1, 0);
            var userNameLabel = new Label()
            {
                TextColor = Color.Black
            };
            userNameLabel.SetBinding(Label.TextProperty, new Binding("UserName"));
            userNameLayout.Children.Add(userNameLabel);
 
            //Post Text Layout
            var textLayout = new StackLayout();
            var textLabel = new Label()
            {
                TextColor = Color.Black
            };
            textLabel.SetBinding(Label.TextProperty, new Binding("Text"));
            textLayout.Children.Add(textLabel);
            postGrid.Children.Add(textLayout, 0, 2, 1, 2);
 
            //insert photos
            var postStackLayout = new PostStackLayout();
            postGrid.Children.Add(postStackLayout, 0, 2, 2, 3);
 
            this.View = mainLayout;
        }
    }
 }
Сам скрол:
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru