├── .gitignore
├── Assets
├── DribBank
│ ├── demo.gif
│ └── original.gif
├── DribCakes
│ ├── appdemo.gif
│ └── original.webp
├── DribComp
│ ├── demo.gif
│ ├── demo2.gif
│ ├── original.gif
│ └── original.png
└── DribGroc
│ ├── demo.gif
│ ├── demo2.gif
│ └── original.gif
├── LICENSE
├── README.md
└── XampleUI
├── XampleUI.Android
├── Assets
│ └── AboutAssets.txt
├── MainActivity.cs
├── Properties
│ ├── AndroidManifest.xml
│ └── AssemblyInfo.cs
├── Resources
│ ├── AboutResources.txt
│ ├── Resource.designer.cs
│ ├── drawable
│ │ ├── bank_back.png
│ │ ├── bank_cancel.png
│ │ ├── bank_share.png
│ │ ├── bank_user.png
│ │ ├── bankcard1a.png
│ │ ├── bankcard1b.png
│ │ ├── bankcard2a.png
│ │ ├── bankcard2b.png
│ │ ├── bankcard3a.png
│ │ ├── bankcard3b.png
│ │ ├── btncake.png
│ │ ├── btndk.png
│ │ ├── btnpd.png
│ │ ├── cake_bg.png
│ │ ├── grocs_dlv.png
│ │ ├── grocs_item0.jpg
│ │ ├── grocs_item00.jpg
│ │ ├── grocs_item1.jpg
│ │ ├── grocs_item2.jpg
│ │ ├── grocs_item3.jpg
│ │ ├── grocs_item4.jpg
│ │ ├── icon_arrow.jpg
│ │ ├── icon_arrow2.jpg
│ │ ├── icon_back.png
│ │ ├── icon_cart.png
│ │ ├── icon_check.png
│ │ ├── icon_clock.png
│ │ ├── icon_dollar.png
│ │ ├── icon_heart.png
│ │ ├── icon_indicator.png
│ │ ├── icon_menu.png
│ │ ├── icon_more.png
│ │ ├── icon_star.png
│ │ ├── item1.png
│ │ ├── item2.png
│ │ ├── item2large.png
│ │ ├── item3.png
│ │ ├── item4.png
│ │ ├── itemair1.png
│ │ ├── itemair2.png
│ │ ├── itemair3.png
│ │ ├── itemair4.png
│ │ ├── itemair5.png
│ │ ├── tab_about.png
│ │ ├── tab_feed.png
│ │ └── xamarin_logo.png
│ ├── layout
│ │ ├── Tabbar.xml
│ │ └── Toolbar.xml
│ ├── mipmap-anydpi-v26
│ │ ├── icon.xml
│ │ └── icon_round.xml
│ ├── mipmap-hdpi
│ │ ├── icon.png
│ │ └── launcher_foreground.png
│ ├── mipmap-mdpi
│ │ ├── icon.png
│ │ └── launcher_foreground.png
│ ├── mipmap-xhdpi
│ │ ├── icon.png
│ │ └── launcher_foreground.png
│ ├── mipmap-xxhdpi
│ │ ├── icon.png
│ │ └── launcher_foreground.png
│ ├── mipmap-xxxhdpi
│ │ ├── icon.png
│ │ └── launcher_foreground.png
│ └── values
│ │ ├── colors.xml
│ │ └── styles.xml
└── XampleUI.Android.csproj
├── XampleUI.iOS
├── AppDelegate.cs
├── Assets.xcassets
│ └── AppIcon.appiconset
│ │ ├── Contents.json
│ │ ├── Icon1024.png
│ │ ├── Icon120.png
│ │ ├── Icon152.png
│ │ ├── Icon167.png
│ │ ├── Icon180.png
│ │ ├── Icon20.png
│ │ ├── Icon29.png
│ │ ├── Icon40.png
│ │ ├── Icon58.png
│ │ ├── Icon60.png
│ │ ├── Icon76.png
│ │ ├── Icon80.png
│ │ └── Icon87.png
├── Entitlements.plist
├── Info.plist
├── Main.cs
├── Properties
│ └── AssemblyInfo.cs
├── Resources
│ ├── Default-568h@2x.png
│ ├── Default-Portrait.png
│ ├── Default-Portrait@2x.png
│ ├── Default.png
│ ├── Default@2x.png
│ ├── LaunchScreen.storyboard
│ ├── tab_about.png
│ ├── tab_about@2x.png
│ ├── tab_about@3x.png
│ ├── tab_feed.png
│ ├── tab_feed@2x.png
│ ├── tab_feed@3x.png
│ ├── xamarin_logo.png
│ ├── xamarin_logo@2x.png
│ └── xamarin_logo@3x.png
└── XampleUI.iOS.csproj
├── XampleUI.sln
└── XampleUI
├── App.xaml
├── App.xaml.cs
├── AppShell.xaml
├── AppShell.xaml.cs
├── AssemblyInfo.cs
├── Assest
└── License
│ └── Mobile App License Monotype.pdf
├── GettingStarted.txt
├── Models
├── Item.cs
├── ItemAir.cs
├── ItemBank.cs
└── ItemCart.cs
├── Services
├── IDataStore.cs
└── MockDataStore.cs
├── ViewModels
├── BaseViewModel.cs
├── Groc
│ ├── GrocDetailViewModel.cs
│ └── GrocsViewModel.cs
└── XFShell
│ ├── AboutViewModel.cs
│ ├── ItemDetailViewModel.cs
│ ├── ItemsViewModel.cs
│ └── NewItemViewModel.cs
├── Views
├── DribBank
│ ├── CardList.xaml
│ ├── CardList.xaml.cs
│ ├── CardTransaction.xaml
│ └── CardTransaction.xaml.cs
├── DribCakes
│ ├── CakeDetail.xaml
│ ├── CakeDetail.xaml.cs
│ ├── CakeList.xaml
│ ├── CakeList.xaml.cs
│ ├── DribCakes.xaml
│ └── DribCakes.xaml.cs
├── DribComp
│ ├── CompAir.xaml
│ └── CompAir.xaml.cs
├── DribGrocs
│ ├── GrocDetail.xaml
│ ├── GrocDetail.xaml.cs
│ ├── GrocList.xaml
│ └── GrocList.xaml.cs
└── XFShell
│ ├── AboutPage.xaml
│ ├── AboutPage.xaml.cs
│ ├── AboutTransitionPage.xaml
│ ├── AboutTransitionPage.xaml.cs
│ ├── ItemDetailPage.xaml
│ ├── ItemDetailPage.xaml.cs
│ ├── ItemsPage.xaml
│ ├── ItemsPage.xaml.cs
│ ├── NewItemPage.xaml
│ └── NewItemPage.xaml.cs
└── XampleUI.csproj
/.gitignore:
--------------------------------------------------------------------------------
1 | ## Ignore Visual Studio temporary files, build results, and
2 | ## files generated by popular Visual Studio add-ons.
3 | ##
4 | ## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
5 |
6 | # User-specific files
7 | *.rsuser
8 | *.suo
9 | *.user
10 | *.userosscache
11 | *.sln.docstates
12 |
13 | # User-specific files (MonoDevelop/Xamarin Studio)
14 | *.userprefs
15 |
16 | # Mono auto generated files
17 | mono_crash.*
18 |
19 | # Build results
20 | [Dd]ebug/
21 | [Dd]ebugPublic/
22 | [Rr]elease/
23 | [Rr]eleases/
24 | x64/
25 | x86/
26 | [Aa][Rr][Mm]/
27 | [Aa][Rr][Mm]64/
28 | bld/
29 | [Bb]in/
30 | [Oo]bj/
31 | [Ll]og/
32 | [Ll]ogs/
33 |
34 | # Visual Studio 2015/2017 cache/options directory
35 | .vs/
36 | # Uncomment if you have tasks that create the project's static files in wwwroot
37 | #wwwroot/
38 |
39 | # Visual Studio 2017 auto generated files
40 | Generated\ Files/
41 |
42 | # MSTest test Results
43 | [Tt]est[Rr]esult*/
44 | [Bb]uild[Ll]og.*
45 |
46 | # NUnit
47 | *.VisualState.xml
48 | TestResult.xml
49 | nunit-*.xml
50 |
51 | # Build Results of an ATL Project
52 | [Dd]ebugPS/
53 | [Rr]eleasePS/
54 | dlldata.c
55 |
56 | # Benchmark Results
57 | BenchmarkDotNet.Artifacts/
58 |
59 | # .NET Core
60 | project.lock.json
61 | project.fragment.lock.json
62 | artifacts/
63 |
64 | # StyleCop
65 | StyleCopReport.xml
66 |
67 | # Files built by Visual Studio
68 | *_i.c
69 | *_p.c
70 | *_h.h
71 | *.ilk
72 | *.meta
73 | *.obj
74 | *.iobj
75 | *.pch
76 | *.pdb
77 | *.ipdb
78 | *.pgc
79 | *.pgd
80 | *.rsp
81 | *.sbr
82 | *.tlb
83 | *.tli
84 | *.tlh
85 | *.tmp
86 | *.tmp_proj
87 | *_wpftmp.csproj
88 | *.log
89 | *.vspscc
90 | *.vssscc
91 | .builds
92 | *.pidb
93 | *.svclog
94 | *.scc
95 |
96 | # Chutzpah Test files
97 | _Chutzpah*
98 |
99 | # Visual C++ cache files
100 | ipch/
101 | *.aps
102 | *.ncb
103 | *.opendb
104 | *.opensdf
105 | *.sdf
106 | *.cachefile
107 | *.VC.db
108 | *.VC.VC.opendb
109 |
110 | # Visual Studio profiler
111 | *.psess
112 | *.vsp
113 | *.vspx
114 | *.sap
115 |
116 | # Visual Studio Trace Files
117 | *.e2e
118 |
119 | # TFS 2012 Local Workspace
120 | $tf/
121 |
122 | # Guidance Automation Toolkit
123 | *.gpState
124 |
125 | # ReSharper is a .NET coding add-in
126 | _ReSharper*/
127 | *.[Rr]e[Ss]harper
128 | *.DotSettings.user
129 |
130 | # TeamCity is a build add-in
131 | _TeamCity*
132 |
133 | # DotCover is a Code Coverage Tool
134 | *.dotCover
135 |
136 | # AxoCover is a Code Coverage Tool
137 | .axoCover/*
138 | !.axoCover/settings.json
139 |
140 | # Visual Studio code coverage results
141 | *.coverage
142 | *.coveragexml
143 |
144 | # NCrunch
145 | _NCrunch_*
146 | .*crunch*.local.xml
147 | nCrunchTemp_*
148 |
149 | # MightyMoose
150 | *.mm.*
151 | AutoTest.Net/
152 |
153 | # Web workbench (sass)
154 | .sass-cache/
155 |
156 | # Installshield output folder
157 | [Ee]xpress/
158 |
159 | # DocProject is a documentation generator add-in
160 | DocProject/buildhelp/
161 | DocProject/Help/*.HxT
162 | DocProject/Help/*.HxC
163 | DocProject/Help/*.hhc
164 | DocProject/Help/*.hhk
165 | DocProject/Help/*.hhp
166 | DocProject/Help/Html2
167 | DocProject/Help/html
168 |
169 | # Click-Once directory
170 | publish/
171 |
172 | # Publish Web Output
173 | *.[Pp]ublish.xml
174 | *.azurePubxml
175 | # Note: Comment the next line if you want to checkin your web deploy settings,
176 | # but database connection strings (with potential passwords) will be unencrypted
177 | *.pubxml
178 | *.publishproj
179 |
180 | # Microsoft Azure Web App publish settings. Comment the next line if you want to
181 | # checkin your Azure Web App publish settings, but sensitive information contained
182 | # in these scripts will be unencrypted
183 | PublishScripts/
184 |
185 | # NuGet Packages
186 | *.nupkg
187 | # NuGet Symbol Packages
188 | *.snupkg
189 | # The packages folder can be ignored because of Package Restore
190 | **/[Pp]ackages/*
191 | # except build/, which is used as an MSBuild target.
192 | !**/[Pp]ackages/build/
193 | # Uncomment if necessary however generally it will be regenerated when needed
194 | #!**/[Pp]ackages/repositories.config
195 | # NuGet v3's project.json files produces more ignorable files
196 | *.nuget.props
197 | *.nuget.targets
198 |
199 | # Microsoft Azure Build Output
200 | csx/
201 | *.build.csdef
202 |
203 | # Microsoft Azure Emulator
204 | ecf/
205 | rcf/
206 |
207 | # Windows Store app package directories and files
208 | AppPackages/
209 | BundleArtifacts/
210 | Package.StoreAssociation.xml
211 | _pkginfo.txt
212 | *.appx
213 | *.appxbundle
214 | *.appxupload
215 |
216 | # Visual Studio cache files
217 | # files ending in .cache can be ignored
218 | *.[Cc]ache
219 | # but keep track of directories ending in .cache
220 | !?*.[Cc]ache/
221 |
222 | # Others
223 | ClientBin/
224 | ~$*
225 | *~
226 | *.dbmdl
227 | *.dbproj.schemaview
228 | *.jfm
229 | *.pfx
230 | *.publishsettings
231 | orleans.codegen.cs
232 |
233 | # Including strong name files can present a security risk
234 | # (https://github.com/github/gitignore/pull/2483#issue-259490424)
235 | #*.snk
236 |
237 | # Since there are multiple workflows, uncomment next line to ignore bower_components
238 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
239 | #bower_components/
240 |
241 | # RIA/Silverlight projects
242 | Generated_Code/
243 |
244 | # Backup & report files from converting an old project file
245 | # to a newer Visual Studio version. Backup files are not needed,
246 | # because we have git ;-)
247 | _UpgradeReport_Files/
248 | Backup*/
249 | UpgradeLog*.XML
250 | UpgradeLog*.htm
251 | ServiceFabricBackup/
252 | *.rptproj.bak
253 |
254 | # SQL Server files
255 | *.mdf
256 | *.ldf
257 | *.ndf
258 |
259 | # Business Intelligence projects
260 | *.rdl.data
261 | *.bim.layout
262 | *.bim_*.settings
263 | *.rptproj.rsuser
264 | *- [Bb]ackup.rdl
265 | *- [Bb]ackup ([0-9]).rdl
266 | *- [Bb]ackup ([0-9][0-9]).rdl
267 |
268 | # Microsoft Fakes
269 | FakesAssemblies/
270 |
271 | # GhostDoc plugin setting file
272 | *.GhostDoc.xml
273 |
274 | # Node.js Tools for Visual Studio
275 | .ntvs_analysis.dat
276 | node_modules/
277 |
278 | # Visual Studio 6 build log
279 | *.plg
280 |
281 | # Visual Studio 6 workspace options file
282 | *.opt
283 |
284 | # Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
285 | *.vbw
286 |
287 | # Visual Studio LightSwitch build output
288 | **/*.HTMLClient/GeneratedArtifacts
289 | **/*.DesktopClient/GeneratedArtifacts
290 | **/*.DesktopClient/ModelManifest.xml
291 | **/*.Server/GeneratedArtifacts
292 | **/*.Server/ModelManifest.xml
293 | _Pvt_Extensions
294 |
295 | # Paket dependency manager
296 | .paket/paket.exe
297 | paket-files/
298 |
299 | # FAKE - F# Make
300 | .fake/
301 |
302 | # CodeRush personal settings
303 | .cr/personal
304 |
305 | # Python Tools for Visual Studio (PTVS)
306 | __pycache__/
307 | *.pyc
308 |
309 | # Cake - Uncomment if you are using it
310 | # tools/**
311 | # !tools/packages.config
312 |
313 | # Tabs Studio
314 | *.tss
315 |
316 | # Telerik's JustMock configuration file
317 | *.jmconfig
318 |
319 | # BizTalk build output
320 | *.btp.cs
321 | *.btm.cs
322 | *.odx.cs
323 | *.xsd.cs
324 |
325 | # OpenCover UI analysis results
326 | OpenCover/
327 |
328 | # Azure Stream Analytics local run output
329 | ASALocalRun/
330 |
331 | # MSBuild Binary and Structured Log
332 | *.binlog
333 |
334 | # NVidia Nsight GPU debugger configuration file
335 | *.nvuser
336 |
337 | # MFractors (Xamarin productivity tool) working folder
338 | .mfractor/
339 |
340 | # Local History for Visual Studio
341 | .localhistory/
342 |
343 | # BeatPulse healthcheck temp database
344 | healthchecksdb
345 |
346 | # Backup folder for Package Reference Convert tool in Visual Studio 2017
347 | MigrationBackup/
348 |
349 | # Ionide (cross platform F# VS Code tools) working folder
350 | .ionide/
351 | XampleUI/XampleUI/Assest/Gilroy-ExtraBold.otf
352 | XampleUI/XampleUI/Assest/Gilroy-Light.otf
353 |
--------------------------------------------------------------------------------
/Assets/DribBank/demo.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shawyunz/XampleUI/83b0ff0c469be3ffee10db4084aae37f8e0399e3/Assets/DribBank/demo.gif
--------------------------------------------------------------------------------
/Assets/DribBank/original.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shawyunz/XampleUI/83b0ff0c469be3ffee10db4084aae37f8e0399e3/Assets/DribBank/original.gif
--------------------------------------------------------------------------------
/Assets/DribCakes/appdemo.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shawyunz/XampleUI/83b0ff0c469be3ffee10db4084aae37f8e0399e3/Assets/DribCakes/appdemo.gif
--------------------------------------------------------------------------------
/Assets/DribCakes/original.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shawyunz/XampleUI/83b0ff0c469be3ffee10db4084aae37f8e0399e3/Assets/DribCakes/original.webp
--------------------------------------------------------------------------------
/Assets/DribComp/demo.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shawyunz/XampleUI/83b0ff0c469be3ffee10db4084aae37f8e0399e3/Assets/DribComp/demo.gif
--------------------------------------------------------------------------------
/Assets/DribComp/demo2.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shawyunz/XampleUI/83b0ff0c469be3ffee10db4084aae37f8e0399e3/Assets/DribComp/demo2.gif
--------------------------------------------------------------------------------
/Assets/DribComp/original.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shawyunz/XampleUI/83b0ff0c469be3ffee10db4084aae37f8e0399e3/Assets/DribComp/original.gif
--------------------------------------------------------------------------------
/Assets/DribComp/original.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shawyunz/XampleUI/83b0ff0c469be3ffee10db4084aae37f8e0399e3/Assets/DribComp/original.png
--------------------------------------------------------------------------------
/Assets/DribGroc/demo.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shawyunz/XampleUI/83b0ff0c469be3ffee10db4084aae37f8e0399e3/Assets/DribGroc/demo.gif
--------------------------------------------------------------------------------
/Assets/DribGroc/demo2.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shawyunz/XampleUI/83b0ff0c469be3ffee10db4084aae37f8e0399e3/Assets/DribGroc/demo2.gif
--------------------------------------------------------------------------------
/Assets/DribGroc/original.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shawyunz/XampleUI/83b0ff0c469be3ffee10db4084aae37f8e0399e3/Assets/DribGroc/original.gif
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2020 Shaw Yu
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # XampleUI
2 |
3 | // A Xamarin.Forms solution to replicate interesting UI design.
4 |
5 | var XampleUI = "Xamarin sample UI";
6 |
7 | var Template = "[XF.Shell](https://docs.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/shell/)";
8 |
9 | var HandyTools = {"[XamlStyler](https://github.com/Xavalon/XamlStyler/)", "[Snipast](https://www.snipaste.com/)"};
10 |
11 | var TableOfContents = {
12 |
13 | **[01 Cakes Mobile App](#01-cakes-mobile-app)**
14 |
15 | **[02 Groceries Shopping App](#02-groceries-shopping-app)**
16 |
17 | **[03 Comparison Chart](#03-comparison-chart)**
18 |
19 | };
20 |
21 |
22 |
23 | ## 01 Cakes Mobile App
24 |
25 | | App Preview | Original design ([Ghulam Rasool](https://dribbble.com/shots/14018398-Cakes-Mobile-App-UX-UI-Design/attachments/5634963?mode=media)) |
26 | | ---------------------------------------------------- | ------------------------------------------------------------ |
27 | |
|
|
28 |
29 |
30 |
31 | ### :video_camera: Video Recording
32 |
33 | https://youtu.be/Lq7-2PzsSpY
34 |
35 |
36 |
37 | ### :memo: Notes
38 |
39 | - Margin or padding in the same row or column might not be consistent (as a rookie image cutter).
40 | - Different item size makes it difficult to turn into an infinite list.
41 | - Pin a screenshot ([Snipast](https://www.snipaste.com/)) made UI QA easier.
42 | - Cropping and editing images are time-consuming.
43 | - Rendering a video requires a better CPU.
44 | - Font in "this" page is different from the gif above (By the font license, font files are not pushed).
45 |
46 |
47 |
48 |
49 |
50 | ## 02 Groceries Shopping App
51 |
52 | | App Preview | Original design ([Cuberto](https://dribbble.com/shots/6120171-Groceries-Shopping-App-Interaction)) |
53 | | ---------------------------------------------------- | ------------------------------------------------------------ |
54 | |
|
|
55 |
56 |
57 |
58 | ### :memo: Tasks
59 |
60 | - [ ] item transition to detail
61 | - [x] item transition to cart
62 | - [x] real cart
63 | - [x] scroll animation
64 | - [x] Uneven list view
65 |
66 |
67 |
68 | ### :package: Nuget Used
69 |
70 | [Xamarin.Plugin.SharedTransitions](https://www.nuget.org/packages/Xamarin.Plugin.SharedTransitions/)
71 |
72 |
73 |
74 |
75 | ## 03 Comparison Chart
76 |
77 |
78 | | App Preview | Original design ([Shaun Paduano](https://dribbble.com/shots/5099331-Mobile-Comparison-Chart/attachments/5099331-Mobile-Comparison-Chart?mode=media)) |
79 | | ------------------------------------------------------------ | ------------------------------------------------------------ |
80 | |
|
|
81 |
82 |
83 |
84 | ### :video_camera: Video Recording
85 |
86 | https://youtu.be/2hE8r1cWRB4
87 |
88 |
89 |
90 | ### :memo: Notes
91 |
92 | Issues out of the video:
93 |
94 | - [x] PIN button position and switch issue,
95 | - [x] use a new property for the pinned list
96 | - [x] Update the mock data and page binding
97 | - [ ] Scroll page height
98 | - [ ] disposed object issue
99 |
100 |
101 |
102 | ## 04 Bank Cards
103 |
104 |
105 | | App Preview | Original design ([Dimest](https://dribbble.com/shots/9323126/attachments/1425260?mode=media)) |
106 | | ----------------------------------------------------------- | ------------------------------------------------------------ |
107 | |
|
|
108 |
109 |
110 |
111 | ### :memo:Tasks
112 |
113 | #### 1. Assets:
114 |
115 | - [x] Card Images
116 | - [x] Icons
117 | - [x] Colors
118 |
119 |
120 |
121 |
122 | #### 2. Animation:
123 |
124 | - [ ] Number update animation.
125 | - [ ] Card swipe away.
126 | - [ ] Transition to the detail page.
127 | - [x] Flip animation. (demo done in XampleControl)
128 |
129 |
130 |
131 |
132 |
133 |
134 | ## More coming
135 |
136 | :construction: Loading...
--------------------------------------------------------------------------------
/XampleUI/XampleUI.Android/Assets/AboutAssets.txt:
--------------------------------------------------------------------------------
1 | Any raw assets you want to be deployed with your application can be placed in
2 | this directory (and child directories) and given a Build Action of "AndroidAsset".
3 |
4 | These files will be deployed with your package and will be accessible using Android's
5 | AssetManager, like this:
6 |
7 | public class ReadAsset : Activity
8 | {
9 | protected override void OnCreate (Bundle bundle)
10 | {
11 | base.OnCreate (bundle);
12 |
13 | InputStream input = Assets.Open ("my_asset.txt");
14 | }
15 | }
16 |
17 | Additionally, some Android functions will automatically load asset files:
18 |
19 | Typeface tf = Typeface.CreateFromAsset (Context.Assets, "fonts/samplefont.ttf");
20 |
--------------------------------------------------------------------------------
/XampleUI/XampleUI.Android/MainActivity.cs:
--------------------------------------------------------------------------------
1 | using System;
2 |
3 | using Android.App;
4 | using Android.Content.PM;
5 | using Android.Runtime;
6 | using Android.Views;
7 | using Android.Widget;
8 | using Android.OS;
9 |
10 | namespace XampleUI.Droid
11 | {
12 | [Activity(Label = "XampleUI", Icon = "@mipmap/icon", Theme = "@style/MainTheme", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation | ConfigChanges.UiMode | ConfigChanges.ScreenLayout | ConfigChanges.SmallestScreenSize )]
13 | public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
14 | {
15 | protected override void OnCreate(Bundle savedInstanceState)
16 | {
17 | TabLayoutResource = Resource.Layout.Tabbar;
18 | ToolbarResource = Resource.Layout.Toolbar;
19 |
20 | base.OnCreate(savedInstanceState);
21 |
22 | Xamarin.Essentials.Platform.Init(this, savedInstanceState);
23 | global::Xamarin.Forms.Forms.Init(this, savedInstanceState);
24 | LoadApplication(new App());
25 | }
26 | public override void OnRequestPermissionsResult(int requestCode, string[] permissions, [GeneratedEnum] Android.Content.PM.Permission[] grantResults)
27 | {
28 | Xamarin.Essentials.Platform.OnRequestPermissionsResult(requestCode, permissions, grantResults);
29 |
30 | base.OnRequestPermissionsResult(requestCode, permissions, grantResults);
31 | }
32 | }
33 | }
--------------------------------------------------------------------------------
/XampleUI/XampleUI.Android/Properties/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/XampleUI/XampleUI.Android/Properties/AssemblyInfo.cs:
--------------------------------------------------------------------------------
1 | using System.Reflection;
2 | using System.Runtime.CompilerServices;
3 | using System.Runtime.InteropServices;
4 | using Android.App;
5 |
6 | // General Information about an assembly is controlled through the following
7 | // set of attributes. Change these attribute values to modify the information
8 | // associated with an assembly.
9 | [assembly: AssemblyTitle("XampleUI.Android")]
10 | [assembly: AssemblyDescription("")]
11 | [assembly: AssemblyConfiguration("")]
12 | [assembly: AssemblyCompany("")]
13 | [assembly: AssemblyProduct("XampleUI.Android")]
14 | [assembly: AssemblyCopyright("Copyright © 2014")]
15 | [assembly: AssemblyTrademark("")]
16 | [assembly: AssemblyCulture("")]
17 | [assembly: ComVisible(false)]
18 |
19 | // Version information for an assembly consists of the following four values:
20 | //
21 | // Major Version
22 | // Minor Version
23 | // Build Number
24 | // Revision
25 | [assembly: AssemblyVersion("1.0.0.0")]
26 | [assembly: AssemblyFileVersion("1.0.0.0")]
27 |
28 | // Add some common permissions, these can be removed if not needed
29 | [assembly: UsesPermission(Android.Manifest.Permission.Internet)]
30 | [assembly: UsesPermission(Android.Manifest.Permission.WriteExternalStorage)]
31 |
--------------------------------------------------------------------------------
/XampleUI/XampleUI.Android/Resources/AboutResources.txt:
--------------------------------------------------------------------------------
1 | Images, layout descriptions, binary blobs and string dictionaries can be included
2 | in your application as resource files. Various Android APIs are designed to
3 | operate on the resource IDs instead of dealing with images, strings or binary blobs
4 | directly.
5 |
6 | For example, a sample Android app that contains a user interface layout (main.xml),
7 | an internationalization string table (strings.xml) and some icons (drawable-XXX/icon.png)
8 | would keep its resources in the "Resources" directory of the application:
9 |
10 | Resources/
11 | drawable-hdpi/
12 | icon.png
13 |
14 | drawable-ldpi/
15 | icon.png
16 |
17 | drawable-mdpi/
18 | icon.png
19 |
20 | layout/
21 | main.xml
22 |
23 | values/
24 | strings.xml
25 |
26 | In order to get the build system to recognize Android resources, set the build action to
27 | "AndroidResource". The native Android APIs do not operate directly with filenames, but
28 | instead operate on resource IDs. When you compile an Android application that uses resources,
29 | the build system will package the resources for distribution and generate a class called
30 | "Resource" that contains the tokens for each one of the resources included. For example,
31 | for the above Resources layout, this is what the Resource class would expose:
32 |
33 | public class Resource {
34 | public class drawable {
35 | public const int icon = 0x123;
36 | }
37 |
38 | public class layout {
39 | public const int main = 0x456;
40 | }
41 |
42 | public class strings {
43 | public const int first_string = 0xabc;
44 | public const int second_string = 0xbcd;
45 | }
46 | }
47 |
48 | You would then use R.drawable.icon to reference the drawable/icon.png file, or Resource.layout.main
49 | to reference the layout/main.xml file, or Resource.strings.first_string to reference the first
50 | string in the dictionary file values/strings.xml.
51 |
--------------------------------------------------------------------------------
/XampleUI/XampleUI.Android/Resources/drawable/bank_back.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shawyunz/XampleUI/83b0ff0c469be3ffee10db4084aae37f8e0399e3/XampleUI/XampleUI.Android/Resources/drawable/bank_back.png
--------------------------------------------------------------------------------
/XampleUI/XampleUI.Android/Resources/drawable/bank_cancel.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shawyunz/XampleUI/83b0ff0c469be3ffee10db4084aae37f8e0399e3/XampleUI/XampleUI.Android/Resources/drawable/bank_cancel.png
--------------------------------------------------------------------------------
/XampleUI/XampleUI.Android/Resources/drawable/bank_share.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shawyunz/XampleUI/83b0ff0c469be3ffee10db4084aae37f8e0399e3/XampleUI/XampleUI.Android/Resources/drawable/bank_share.png
--------------------------------------------------------------------------------
/XampleUI/XampleUI.Android/Resources/drawable/bank_user.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shawyunz/XampleUI/83b0ff0c469be3ffee10db4084aae37f8e0399e3/XampleUI/XampleUI.Android/Resources/drawable/bank_user.png
--------------------------------------------------------------------------------
/XampleUI/XampleUI.Android/Resources/drawable/bankcard1a.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shawyunz/XampleUI/83b0ff0c469be3ffee10db4084aae37f8e0399e3/XampleUI/XampleUI.Android/Resources/drawable/bankcard1a.png
--------------------------------------------------------------------------------
/XampleUI/XampleUI.Android/Resources/drawable/bankcard1b.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shawyunz/XampleUI/83b0ff0c469be3ffee10db4084aae37f8e0399e3/XampleUI/XampleUI.Android/Resources/drawable/bankcard1b.png
--------------------------------------------------------------------------------
/XampleUI/XampleUI.Android/Resources/drawable/bankcard2a.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shawyunz/XampleUI/83b0ff0c469be3ffee10db4084aae37f8e0399e3/XampleUI/XampleUI.Android/Resources/drawable/bankcard2a.png
--------------------------------------------------------------------------------
/XampleUI/XampleUI.Android/Resources/drawable/bankcard2b.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shawyunz/XampleUI/83b0ff0c469be3ffee10db4084aae37f8e0399e3/XampleUI/XampleUI.Android/Resources/drawable/bankcard2b.png
--------------------------------------------------------------------------------
/XampleUI/XampleUI.Android/Resources/drawable/bankcard3a.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shawyunz/XampleUI/83b0ff0c469be3ffee10db4084aae37f8e0399e3/XampleUI/XampleUI.Android/Resources/drawable/bankcard3a.png
--------------------------------------------------------------------------------
/XampleUI/XampleUI.Android/Resources/drawable/bankcard3b.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shawyunz/XampleUI/83b0ff0c469be3ffee10db4084aae37f8e0399e3/XampleUI/XampleUI.Android/Resources/drawable/bankcard3b.png
--------------------------------------------------------------------------------
/XampleUI/XampleUI.Android/Resources/drawable/btncake.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shawyunz/XampleUI/83b0ff0c469be3ffee10db4084aae37f8e0399e3/XampleUI/XampleUI.Android/Resources/drawable/btncake.png
--------------------------------------------------------------------------------
/XampleUI/XampleUI.Android/Resources/drawable/btndk.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shawyunz/XampleUI/83b0ff0c469be3ffee10db4084aae37f8e0399e3/XampleUI/XampleUI.Android/Resources/drawable/btndk.png
--------------------------------------------------------------------------------
/XampleUI/XampleUI.Android/Resources/drawable/btnpd.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shawyunz/XampleUI/83b0ff0c469be3ffee10db4084aae37f8e0399e3/XampleUI/XampleUI.Android/Resources/drawable/btnpd.png
--------------------------------------------------------------------------------
/XampleUI/XampleUI.Android/Resources/drawable/cake_bg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shawyunz/XampleUI/83b0ff0c469be3ffee10db4084aae37f8e0399e3/XampleUI/XampleUI.Android/Resources/drawable/cake_bg.png
--------------------------------------------------------------------------------
/XampleUI/XampleUI.Android/Resources/drawable/grocs_dlv.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shawyunz/XampleUI/83b0ff0c469be3ffee10db4084aae37f8e0399e3/XampleUI/XampleUI.Android/Resources/drawable/grocs_dlv.png
--------------------------------------------------------------------------------
/XampleUI/XampleUI.Android/Resources/drawable/grocs_item0.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shawyunz/XampleUI/83b0ff0c469be3ffee10db4084aae37f8e0399e3/XampleUI/XampleUI.Android/Resources/drawable/grocs_item0.jpg
--------------------------------------------------------------------------------
/XampleUI/XampleUI.Android/Resources/drawable/grocs_item00.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shawyunz/XampleUI/83b0ff0c469be3ffee10db4084aae37f8e0399e3/XampleUI/XampleUI.Android/Resources/drawable/grocs_item00.jpg
--------------------------------------------------------------------------------
/XampleUI/XampleUI.Android/Resources/drawable/grocs_item1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shawyunz/XampleUI/83b0ff0c469be3ffee10db4084aae37f8e0399e3/XampleUI/XampleUI.Android/Resources/drawable/grocs_item1.jpg
--------------------------------------------------------------------------------
/XampleUI/XampleUI.Android/Resources/drawable/grocs_item2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shawyunz/XampleUI/83b0ff0c469be3ffee10db4084aae37f8e0399e3/XampleUI/XampleUI.Android/Resources/drawable/grocs_item2.jpg
--------------------------------------------------------------------------------
/XampleUI/XampleUI.Android/Resources/drawable/grocs_item3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shawyunz/XampleUI/83b0ff0c469be3ffee10db4084aae37f8e0399e3/XampleUI/XampleUI.Android/Resources/drawable/grocs_item3.jpg
--------------------------------------------------------------------------------
/XampleUI/XampleUI.Android/Resources/drawable/grocs_item4.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shawyunz/XampleUI/83b0ff0c469be3ffee10db4084aae37f8e0399e3/XampleUI/XampleUI.Android/Resources/drawable/grocs_item4.jpg
--------------------------------------------------------------------------------
/XampleUI/XampleUI.Android/Resources/drawable/icon_arrow.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shawyunz/XampleUI/83b0ff0c469be3ffee10db4084aae37f8e0399e3/XampleUI/XampleUI.Android/Resources/drawable/icon_arrow.jpg
--------------------------------------------------------------------------------
/XampleUI/XampleUI.Android/Resources/drawable/icon_arrow2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shawyunz/XampleUI/83b0ff0c469be3ffee10db4084aae37f8e0399e3/XampleUI/XampleUI.Android/Resources/drawable/icon_arrow2.jpg
--------------------------------------------------------------------------------
/XampleUI/XampleUI.Android/Resources/drawable/icon_back.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shawyunz/XampleUI/83b0ff0c469be3ffee10db4084aae37f8e0399e3/XampleUI/XampleUI.Android/Resources/drawable/icon_back.png
--------------------------------------------------------------------------------
/XampleUI/XampleUI.Android/Resources/drawable/icon_cart.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shawyunz/XampleUI/83b0ff0c469be3ffee10db4084aae37f8e0399e3/XampleUI/XampleUI.Android/Resources/drawable/icon_cart.png
--------------------------------------------------------------------------------
/XampleUI/XampleUI.Android/Resources/drawable/icon_check.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shawyunz/XampleUI/83b0ff0c469be3ffee10db4084aae37f8e0399e3/XampleUI/XampleUI.Android/Resources/drawable/icon_check.png
--------------------------------------------------------------------------------
/XampleUI/XampleUI.Android/Resources/drawable/icon_clock.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shawyunz/XampleUI/83b0ff0c469be3ffee10db4084aae37f8e0399e3/XampleUI/XampleUI.Android/Resources/drawable/icon_clock.png
--------------------------------------------------------------------------------
/XampleUI/XampleUI.Android/Resources/drawable/icon_dollar.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shawyunz/XampleUI/83b0ff0c469be3ffee10db4084aae37f8e0399e3/XampleUI/XampleUI.Android/Resources/drawable/icon_dollar.png
--------------------------------------------------------------------------------
/XampleUI/XampleUI.Android/Resources/drawable/icon_heart.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shawyunz/XampleUI/83b0ff0c469be3ffee10db4084aae37f8e0399e3/XampleUI/XampleUI.Android/Resources/drawable/icon_heart.png
--------------------------------------------------------------------------------
/XampleUI/XampleUI.Android/Resources/drawable/icon_indicator.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shawyunz/XampleUI/83b0ff0c469be3ffee10db4084aae37f8e0399e3/XampleUI/XampleUI.Android/Resources/drawable/icon_indicator.png
--------------------------------------------------------------------------------
/XampleUI/XampleUI.Android/Resources/drawable/icon_menu.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shawyunz/XampleUI/83b0ff0c469be3ffee10db4084aae37f8e0399e3/XampleUI/XampleUI.Android/Resources/drawable/icon_menu.png
--------------------------------------------------------------------------------
/XampleUI/XampleUI.Android/Resources/drawable/icon_more.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shawyunz/XampleUI/83b0ff0c469be3ffee10db4084aae37f8e0399e3/XampleUI/XampleUI.Android/Resources/drawable/icon_more.png
--------------------------------------------------------------------------------
/XampleUI/XampleUI.Android/Resources/drawable/icon_star.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shawyunz/XampleUI/83b0ff0c469be3ffee10db4084aae37f8e0399e3/XampleUI/XampleUI.Android/Resources/drawable/icon_star.png
--------------------------------------------------------------------------------
/XampleUI/XampleUI.Android/Resources/drawable/item1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shawyunz/XampleUI/83b0ff0c469be3ffee10db4084aae37f8e0399e3/XampleUI/XampleUI.Android/Resources/drawable/item1.png
--------------------------------------------------------------------------------
/XampleUI/XampleUI.Android/Resources/drawable/item2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shawyunz/XampleUI/83b0ff0c469be3ffee10db4084aae37f8e0399e3/XampleUI/XampleUI.Android/Resources/drawable/item2.png
--------------------------------------------------------------------------------
/XampleUI/XampleUI.Android/Resources/drawable/item2large.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shawyunz/XampleUI/83b0ff0c469be3ffee10db4084aae37f8e0399e3/XampleUI/XampleUI.Android/Resources/drawable/item2large.png
--------------------------------------------------------------------------------
/XampleUI/XampleUI.Android/Resources/drawable/item3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shawyunz/XampleUI/83b0ff0c469be3ffee10db4084aae37f8e0399e3/XampleUI/XampleUI.Android/Resources/drawable/item3.png
--------------------------------------------------------------------------------
/XampleUI/XampleUI.Android/Resources/drawable/item4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shawyunz/XampleUI/83b0ff0c469be3ffee10db4084aae37f8e0399e3/XampleUI/XampleUI.Android/Resources/drawable/item4.png
--------------------------------------------------------------------------------
/XampleUI/XampleUI.Android/Resources/drawable/itemair1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shawyunz/XampleUI/83b0ff0c469be3ffee10db4084aae37f8e0399e3/XampleUI/XampleUI.Android/Resources/drawable/itemair1.png
--------------------------------------------------------------------------------
/XampleUI/XampleUI.Android/Resources/drawable/itemair2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shawyunz/XampleUI/83b0ff0c469be3ffee10db4084aae37f8e0399e3/XampleUI/XampleUI.Android/Resources/drawable/itemair2.png
--------------------------------------------------------------------------------
/XampleUI/XampleUI.Android/Resources/drawable/itemair3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shawyunz/XampleUI/83b0ff0c469be3ffee10db4084aae37f8e0399e3/XampleUI/XampleUI.Android/Resources/drawable/itemair3.png
--------------------------------------------------------------------------------
/XampleUI/XampleUI.Android/Resources/drawable/itemair4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shawyunz/XampleUI/83b0ff0c469be3ffee10db4084aae37f8e0399e3/XampleUI/XampleUI.Android/Resources/drawable/itemair4.png
--------------------------------------------------------------------------------
/XampleUI/XampleUI.Android/Resources/drawable/itemair5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shawyunz/XampleUI/83b0ff0c469be3ffee10db4084aae37f8e0399e3/XampleUI/XampleUI.Android/Resources/drawable/itemair5.png
--------------------------------------------------------------------------------
/XampleUI/XampleUI.Android/Resources/drawable/tab_about.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shawyunz/XampleUI/83b0ff0c469be3ffee10db4084aae37f8e0399e3/XampleUI/XampleUI.Android/Resources/drawable/tab_about.png
--------------------------------------------------------------------------------
/XampleUI/XampleUI.Android/Resources/drawable/tab_feed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shawyunz/XampleUI/83b0ff0c469be3ffee10db4084aae37f8e0399e3/XampleUI/XampleUI.Android/Resources/drawable/tab_feed.png
--------------------------------------------------------------------------------
/XampleUI/XampleUI.Android/Resources/drawable/xamarin_logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shawyunz/XampleUI/83b0ff0c469be3ffee10db4084aae37f8e0399e3/XampleUI/XampleUI.Android/Resources/drawable/xamarin_logo.png
--------------------------------------------------------------------------------
/XampleUI/XampleUI.Android/Resources/layout/Tabbar.xml:
--------------------------------------------------------------------------------
1 |
2 |
12 |
--------------------------------------------------------------------------------
/XampleUI/XampleUI.Android/Resources/layout/Toolbar.xml:
--------------------------------------------------------------------------------
1 |
9 |
10 |
--------------------------------------------------------------------------------
/XampleUI/XampleUI.Android/Resources/mipmap-anydpi-v26/icon.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/XampleUI/XampleUI.Android/Resources/mipmap-anydpi-v26/icon_round.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/XampleUI/XampleUI.Android/Resources/mipmap-hdpi/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shawyunz/XampleUI/83b0ff0c469be3ffee10db4084aae37f8e0399e3/XampleUI/XampleUI.Android/Resources/mipmap-hdpi/icon.png
--------------------------------------------------------------------------------
/XampleUI/XampleUI.Android/Resources/mipmap-hdpi/launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shawyunz/XampleUI/83b0ff0c469be3ffee10db4084aae37f8e0399e3/XampleUI/XampleUI.Android/Resources/mipmap-hdpi/launcher_foreground.png
--------------------------------------------------------------------------------
/XampleUI/XampleUI.Android/Resources/mipmap-mdpi/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shawyunz/XampleUI/83b0ff0c469be3ffee10db4084aae37f8e0399e3/XampleUI/XampleUI.Android/Resources/mipmap-mdpi/icon.png
--------------------------------------------------------------------------------
/XampleUI/XampleUI.Android/Resources/mipmap-mdpi/launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shawyunz/XampleUI/83b0ff0c469be3ffee10db4084aae37f8e0399e3/XampleUI/XampleUI.Android/Resources/mipmap-mdpi/launcher_foreground.png
--------------------------------------------------------------------------------
/XampleUI/XampleUI.Android/Resources/mipmap-xhdpi/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shawyunz/XampleUI/83b0ff0c469be3ffee10db4084aae37f8e0399e3/XampleUI/XampleUI.Android/Resources/mipmap-xhdpi/icon.png
--------------------------------------------------------------------------------
/XampleUI/XampleUI.Android/Resources/mipmap-xhdpi/launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shawyunz/XampleUI/83b0ff0c469be3ffee10db4084aae37f8e0399e3/XampleUI/XampleUI.Android/Resources/mipmap-xhdpi/launcher_foreground.png
--------------------------------------------------------------------------------
/XampleUI/XampleUI.Android/Resources/mipmap-xxhdpi/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shawyunz/XampleUI/83b0ff0c469be3ffee10db4084aae37f8e0399e3/XampleUI/XampleUI.Android/Resources/mipmap-xxhdpi/icon.png
--------------------------------------------------------------------------------
/XampleUI/XampleUI.Android/Resources/mipmap-xxhdpi/launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shawyunz/XampleUI/83b0ff0c469be3ffee10db4084aae37f8e0399e3/XampleUI/XampleUI.Android/Resources/mipmap-xxhdpi/launcher_foreground.png
--------------------------------------------------------------------------------
/XampleUI/XampleUI.Android/Resources/mipmap-xxxhdpi/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shawyunz/XampleUI/83b0ff0c469be3ffee10db4084aae37f8e0399e3/XampleUI/XampleUI.Android/Resources/mipmap-xxxhdpi/icon.png
--------------------------------------------------------------------------------
/XampleUI/XampleUI.Android/Resources/mipmap-xxxhdpi/launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shawyunz/XampleUI/83b0ff0c469be3ffee10db4084aae37f8e0399e3/XampleUI/XampleUI.Android/Resources/mipmap-xxxhdpi/launcher_foreground.png
--------------------------------------------------------------------------------
/XampleUI/XampleUI.Android/Resources/values/colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | #FFFFFF
4 | #3F51B5
5 | #303F9F
6 | #FF4081
7 |
8 |
--------------------------------------------------------------------------------
/XampleUI/XampleUI.Android/Resources/values/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
18 |
--------------------------------------------------------------------------------
/XampleUI/XampleUI.Android/XampleUI.Android.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Debug
5 | AnyCPU
6 | {FF9A57C3-7498-4987-831D-DF3490076C46}
7 | {EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
8 | {6968b3a4-1835-46a3-ac5c-1ae33b475983}
9 | Library
10 | XampleUI.Droid
11 | XampleUI.Android
12 | True
13 | True
14 | Resources\Resource.designer.cs
15 | Resource
16 | Properties\AndroidManifest.xml
17 | Resources
18 | Assets
19 | false
20 | v10.0
21 | true
22 | true
23 | Xamarin.Android.Net.AndroidClientHandler
24 |
25 |
26 |
27 |
28 | true
29 | portable
30 | false
31 | bin\Debug
32 | DEBUG;
33 | prompt
34 | 4
35 | None
36 | false
37 | false
38 | false
39 | false
40 |
41 |
42 |
43 | false
44 | portable
45 | true
46 | bin\Release
47 | prompt
48 | 4
49 | true
50 | false
51 | false
52 | false
53 | false
54 | false
55 | r8
56 | true
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 | 2.4.0
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 | {5C1FC0DD-8EE6-45FE-87D8-C01649F0B67B}
108 | XampleUI
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 |
--------------------------------------------------------------------------------
/XampleUI/XampleUI.iOS/AppDelegate.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 |
5 | using Foundation;
6 | using UIKit;
7 |
8 | namespace XampleUI.iOS
9 | {
10 | // The UIApplicationDelegate for the application. This class is responsible for launching the
11 | // User Interface of the application, as well as listening (and optionally responding) to
12 | // application events from iOS.
13 | [Register("AppDelegate")]
14 | public partial class AppDelegate : global::Xamarin.Forms.Platform.iOS.FormsApplicationDelegate
15 | {
16 | //
17 | // This method is invoked when the application has loaded and is ready to run. In this
18 | // method you should instantiate the window, load the UI into it and then make the window
19 | // visible.
20 | //
21 | // You have 17 seconds to return from this method, or iOS will terminate your application.
22 | //
23 | public override bool FinishedLaunching(UIApplication app, NSDictionary options)
24 | {
25 | global::Xamarin.Forms.Forms.SetFlags("CollectionView_Experimental");
26 | global::Xamarin.Forms.Forms.Init();
27 | LoadApplication(new App());
28 |
29 | return base.FinishedLaunching(app, options);
30 | }
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/XampleUI/XampleUI.iOS/Assets.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images": [
3 | {
4 | "scale": "2x",
5 | "size": "20x20",
6 | "idiom": "iphone",
7 | "filename": "Icon40.png"
8 | },
9 | {
10 | "scale": "3x",
11 | "size": "20x20",
12 | "idiom": "iphone",
13 | "filename": "Icon60.png"
14 | },
15 | {
16 | "scale": "2x",
17 | "size": "29x29",
18 | "idiom": "iphone",
19 | "filename": "Icon58.png"
20 | },
21 | {
22 | "scale": "3x",
23 | "size": "29x29",
24 | "idiom": "iphone",
25 | "filename": "Icon87.png"
26 | },
27 | {
28 | "scale": "2x",
29 | "size": "40x40",
30 | "idiom": "iphone",
31 | "filename": "Icon80.png"
32 | },
33 | {
34 | "scale": "3x",
35 | "size": "40x40",
36 | "idiom": "iphone",
37 | "filename": "Icon120.png"
38 | },
39 | {
40 | "scale": "2x",
41 | "size": "60x60",
42 | "idiom": "iphone",
43 | "filename": "Icon120.png"
44 | },
45 | {
46 | "scale": "3x",
47 | "size": "60x60",
48 | "idiom": "iphone",
49 | "filename": "Icon180.png"
50 | },
51 | {
52 | "scale": "1x",
53 | "size": "20x20",
54 | "idiom": "ipad",
55 | "filename": "Icon20.png"
56 | },
57 | {
58 | "scale": "2x",
59 | "size": "20x20",
60 | "idiom": "ipad",
61 | "filename": "Icon40.png"
62 | },
63 | {
64 | "scale": "1x",
65 | "size": "29x29",
66 | "idiom": "ipad",
67 | "filename": "Icon29.png"
68 | },
69 | {
70 | "scale": "2x",
71 | "size": "29x29",
72 | "idiom": "ipad",
73 | "filename": "Icon58.png"
74 | },
75 | {
76 | "scale": "1x",
77 | "size": "40x40",
78 | "idiom": "ipad",
79 | "filename": "Icon40.png"
80 | },
81 | {
82 | "scale": "2x",
83 | "size": "40x40",
84 | "idiom": "ipad",
85 | "filename": "Icon80.png"
86 | },
87 | {
88 | "scale": "1x",
89 | "size": "76x76",
90 | "idiom": "ipad",
91 | "filename": "Icon76.png"
92 | },
93 | {
94 | "scale": "2x",
95 | "size": "76x76",
96 | "idiom": "ipad",
97 | "filename": "Icon152.png"
98 | },
99 | {
100 | "scale": "2x",
101 | "size": "83.5x83.5",
102 | "idiom": "ipad",
103 | "filename": "Icon167.png"
104 | },
105 | {
106 | "scale": "1x",
107 | "size": "1024x1024",
108 | "idiom": "ios-marketing",
109 | "filename": "Icon1024.png"
110 | }
111 | ],
112 | "properties": {},
113 | "info": {
114 | "version": 1,
115 | "author": "xcode"
116 | }
117 | }
--------------------------------------------------------------------------------
/XampleUI/XampleUI.iOS/Assets.xcassets/AppIcon.appiconset/Icon1024.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shawyunz/XampleUI/83b0ff0c469be3ffee10db4084aae37f8e0399e3/XampleUI/XampleUI.iOS/Assets.xcassets/AppIcon.appiconset/Icon1024.png
--------------------------------------------------------------------------------
/XampleUI/XampleUI.iOS/Assets.xcassets/AppIcon.appiconset/Icon120.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shawyunz/XampleUI/83b0ff0c469be3ffee10db4084aae37f8e0399e3/XampleUI/XampleUI.iOS/Assets.xcassets/AppIcon.appiconset/Icon120.png
--------------------------------------------------------------------------------
/XampleUI/XampleUI.iOS/Assets.xcassets/AppIcon.appiconset/Icon152.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shawyunz/XampleUI/83b0ff0c469be3ffee10db4084aae37f8e0399e3/XampleUI/XampleUI.iOS/Assets.xcassets/AppIcon.appiconset/Icon152.png
--------------------------------------------------------------------------------
/XampleUI/XampleUI.iOS/Assets.xcassets/AppIcon.appiconset/Icon167.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shawyunz/XampleUI/83b0ff0c469be3ffee10db4084aae37f8e0399e3/XampleUI/XampleUI.iOS/Assets.xcassets/AppIcon.appiconset/Icon167.png
--------------------------------------------------------------------------------
/XampleUI/XampleUI.iOS/Assets.xcassets/AppIcon.appiconset/Icon180.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shawyunz/XampleUI/83b0ff0c469be3ffee10db4084aae37f8e0399e3/XampleUI/XampleUI.iOS/Assets.xcassets/AppIcon.appiconset/Icon180.png
--------------------------------------------------------------------------------
/XampleUI/XampleUI.iOS/Assets.xcassets/AppIcon.appiconset/Icon20.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shawyunz/XampleUI/83b0ff0c469be3ffee10db4084aae37f8e0399e3/XampleUI/XampleUI.iOS/Assets.xcassets/AppIcon.appiconset/Icon20.png
--------------------------------------------------------------------------------
/XampleUI/XampleUI.iOS/Assets.xcassets/AppIcon.appiconset/Icon29.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shawyunz/XampleUI/83b0ff0c469be3ffee10db4084aae37f8e0399e3/XampleUI/XampleUI.iOS/Assets.xcassets/AppIcon.appiconset/Icon29.png
--------------------------------------------------------------------------------
/XampleUI/XampleUI.iOS/Assets.xcassets/AppIcon.appiconset/Icon40.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shawyunz/XampleUI/83b0ff0c469be3ffee10db4084aae37f8e0399e3/XampleUI/XampleUI.iOS/Assets.xcassets/AppIcon.appiconset/Icon40.png
--------------------------------------------------------------------------------
/XampleUI/XampleUI.iOS/Assets.xcassets/AppIcon.appiconset/Icon58.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shawyunz/XampleUI/83b0ff0c469be3ffee10db4084aae37f8e0399e3/XampleUI/XampleUI.iOS/Assets.xcassets/AppIcon.appiconset/Icon58.png
--------------------------------------------------------------------------------
/XampleUI/XampleUI.iOS/Assets.xcassets/AppIcon.appiconset/Icon60.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shawyunz/XampleUI/83b0ff0c469be3ffee10db4084aae37f8e0399e3/XampleUI/XampleUI.iOS/Assets.xcassets/AppIcon.appiconset/Icon60.png
--------------------------------------------------------------------------------
/XampleUI/XampleUI.iOS/Assets.xcassets/AppIcon.appiconset/Icon76.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shawyunz/XampleUI/83b0ff0c469be3ffee10db4084aae37f8e0399e3/XampleUI/XampleUI.iOS/Assets.xcassets/AppIcon.appiconset/Icon76.png
--------------------------------------------------------------------------------
/XampleUI/XampleUI.iOS/Assets.xcassets/AppIcon.appiconset/Icon80.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shawyunz/XampleUI/83b0ff0c469be3ffee10db4084aae37f8e0399e3/XampleUI/XampleUI.iOS/Assets.xcassets/AppIcon.appiconset/Icon80.png
--------------------------------------------------------------------------------
/XampleUI/XampleUI.iOS/Assets.xcassets/AppIcon.appiconset/Icon87.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shawyunz/XampleUI/83b0ff0c469be3ffee10db4084aae37f8e0399e3/XampleUI/XampleUI.iOS/Assets.xcassets/AppIcon.appiconset/Icon87.png
--------------------------------------------------------------------------------
/XampleUI/XampleUI.iOS/Entitlements.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/XampleUI/XampleUI.iOS/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | UIDeviceFamily
6 |
7 | 1
8 | 2
9 |
10 | UISupportedInterfaceOrientations
11 |
12 | UIInterfaceOrientationPortrait
13 | UIInterfaceOrientationLandscapeLeft
14 | UIInterfaceOrientationLandscapeRight
15 |
16 | UISupportedInterfaceOrientations~ipad
17 |
18 | UIInterfaceOrientationPortrait
19 | UIInterfaceOrientationPortraitUpsideDown
20 | UIInterfaceOrientationLandscapeLeft
21 | UIInterfaceOrientationLandscapeRight
22 |
23 | MinimumOSVersion
24 | 8.0
25 | CFBundleDisplayName
26 | XampleUI
27 | CFBundleIdentifier
28 | com.companyname.XampleUI
29 | CFBundleVersion
30 | 1.0
31 | UILaunchStoryboardName
32 | LaunchScreen
33 | CFBundleName
34 | XampleUI
35 | XSAppIconAssets
36 | Assets.xcassets/AppIcon.appiconset
37 |
38 |
39 |
--------------------------------------------------------------------------------
/XampleUI/XampleUI.iOS/Main.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 |
5 | using Foundation;
6 | using UIKit;
7 |
8 | namespace XampleUI.iOS
9 | {
10 | public class Application
11 | {
12 | // This is the main entry point of the application.
13 | static void Main(string[] args)
14 | {
15 | // if you want to use a different Application Delegate class from "AppDelegate"
16 | // you can specify it here.
17 | UIApplication.Main(args, null, "AppDelegate");
18 | }
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/XampleUI/XampleUI.iOS/Properties/AssemblyInfo.cs:
--------------------------------------------------------------------------------
1 | using System.Reflection;
2 | using System.Runtime.CompilerServices;
3 | using System.Runtime.InteropServices;
4 |
5 | // General Information about an assembly is controlled through the following
6 | // set of attributes. Change these attribute values to modify the information
7 | // associated with an assembly.
8 | [assembly: AssemblyTitle("XampleUI.iOS")]
9 | [assembly: AssemblyDescription("")]
10 | [assembly: AssemblyConfiguration("")]
11 | [assembly: AssemblyCompany("")]
12 | [assembly: AssemblyProduct("XampleUI.iOS")]
13 | [assembly: AssemblyCopyright("Copyright © 2014")]
14 | [assembly: AssemblyTrademark("")]
15 | [assembly: AssemblyCulture("")]
16 |
17 | // Setting ComVisible to false makes the types in this assembly not visible
18 | // to COM components. If you need to access a type in this assembly from
19 | // COM, set the ComVisible attribute to true on that type.
20 | [assembly: ComVisible(false)]
21 |
22 | // The following GUID is for the ID of the typelib if this project is exposed to COM
23 | [assembly: Guid("72bdc44f-c588-44f3-b6df-9aace7daafdd")]
24 |
25 | // Version information for an assembly consists of the following four values:
26 | //
27 | // Major Version
28 | // Minor Version
29 | // Build Number
30 | // Revision
31 | //
32 | // You can specify all the values or you can default the Build and Revision Numbers
33 | // by using the '*' as shown below:
34 | // [assembly: AssemblyVersion("1.0.*")]
35 | [assembly: AssemblyVersion("1.0.0.0")]
36 | [assembly: AssemblyFileVersion("1.0.0.0")]
37 |
--------------------------------------------------------------------------------
/XampleUI/XampleUI.iOS/Resources/Default-568h@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shawyunz/XampleUI/83b0ff0c469be3ffee10db4084aae37f8e0399e3/XampleUI/XampleUI.iOS/Resources/Default-568h@2x.png
--------------------------------------------------------------------------------
/XampleUI/XampleUI.iOS/Resources/Default-Portrait.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shawyunz/XampleUI/83b0ff0c469be3ffee10db4084aae37f8e0399e3/XampleUI/XampleUI.iOS/Resources/Default-Portrait.png
--------------------------------------------------------------------------------
/XampleUI/XampleUI.iOS/Resources/Default-Portrait@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shawyunz/XampleUI/83b0ff0c469be3ffee10db4084aae37f8e0399e3/XampleUI/XampleUI.iOS/Resources/Default-Portrait@2x.png
--------------------------------------------------------------------------------
/XampleUI/XampleUI.iOS/Resources/Default.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shawyunz/XampleUI/83b0ff0c469be3ffee10db4084aae37f8e0399e3/XampleUI/XampleUI.iOS/Resources/Default.png
--------------------------------------------------------------------------------
/XampleUI/XampleUI.iOS/Resources/Default@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shawyunz/XampleUI/83b0ff0c469be3ffee10db4084aae37f8e0399e3/XampleUI/XampleUI.iOS/Resources/Default@2x.png
--------------------------------------------------------------------------------
/XampleUI/XampleUI.iOS/Resources/LaunchScreen.storyboard:
--------------------------------------------------------------------------------
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 |
--------------------------------------------------------------------------------
/XampleUI/XampleUI.iOS/Resources/tab_about.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shawyunz/XampleUI/83b0ff0c469be3ffee10db4084aae37f8e0399e3/XampleUI/XampleUI.iOS/Resources/tab_about.png
--------------------------------------------------------------------------------
/XampleUI/XampleUI.iOS/Resources/tab_about@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shawyunz/XampleUI/83b0ff0c469be3ffee10db4084aae37f8e0399e3/XampleUI/XampleUI.iOS/Resources/tab_about@2x.png
--------------------------------------------------------------------------------
/XampleUI/XampleUI.iOS/Resources/tab_about@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shawyunz/XampleUI/83b0ff0c469be3ffee10db4084aae37f8e0399e3/XampleUI/XampleUI.iOS/Resources/tab_about@3x.png
--------------------------------------------------------------------------------
/XampleUI/XampleUI.iOS/Resources/tab_feed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shawyunz/XampleUI/83b0ff0c469be3ffee10db4084aae37f8e0399e3/XampleUI/XampleUI.iOS/Resources/tab_feed.png
--------------------------------------------------------------------------------
/XampleUI/XampleUI.iOS/Resources/tab_feed@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shawyunz/XampleUI/83b0ff0c469be3ffee10db4084aae37f8e0399e3/XampleUI/XampleUI.iOS/Resources/tab_feed@2x.png
--------------------------------------------------------------------------------
/XampleUI/XampleUI.iOS/Resources/tab_feed@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shawyunz/XampleUI/83b0ff0c469be3ffee10db4084aae37f8e0399e3/XampleUI/XampleUI.iOS/Resources/tab_feed@3x.png
--------------------------------------------------------------------------------
/XampleUI/XampleUI.iOS/Resources/xamarin_logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shawyunz/XampleUI/83b0ff0c469be3ffee10db4084aae37f8e0399e3/XampleUI/XampleUI.iOS/Resources/xamarin_logo.png
--------------------------------------------------------------------------------
/XampleUI/XampleUI.iOS/Resources/xamarin_logo@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shawyunz/XampleUI/83b0ff0c469be3ffee10db4084aae37f8e0399e3/XampleUI/XampleUI.iOS/Resources/xamarin_logo@2x.png
--------------------------------------------------------------------------------
/XampleUI/XampleUI.iOS/Resources/xamarin_logo@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shawyunz/XampleUI/83b0ff0c469be3ffee10db4084aae37f8e0399e3/XampleUI/XampleUI.iOS/Resources/xamarin_logo@3x.png
--------------------------------------------------------------------------------
/XampleUI/XampleUI.iOS/XampleUI.iOS.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Debug
5 | iPhoneSimulator
6 | 8.0.30703
7 | 2.0
8 | {1F628FE2-C1B8-49C7-89C2-D43E75FD6B44}
9 | {FEACFBD2-3405-455C-9665-78FE426C6842};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
10 | {89a4fe7c-635d-49c9-8d8c-5cd363c0d68d}
11 | Exe
12 | XampleUI.iOS
13 | Resources
14 | XampleUI.iOS
15 | true
16 | NSUrlSessionHandler
17 | automatic
18 |
19 |
20 | true
21 | full
22 | false
23 | bin\iPhoneSimulator\Debug
24 | DEBUG
25 | prompt
26 | 4
27 | x86_64
28 | None
29 | true
30 |
31 |
32 | none
33 | true
34 | bin\iPhoneSimulator\Release
35 | prompt
36 | 4
37 | None
38 | x86_64
39 |
40 |
41 | true
42 | full
43 | false
44 | bin\iPhone\Debug
45 | DEBUG
46 | prompt
47 | 4
48 | ARM64
49 | iPhone Developer
50 | true
51 | Entitlements.plist
52 | None
53 | -all
54 |
55 |
56 | none
57 | true
58 | bin\iPhone\Release
59 | prompt
60 | 4
61 | ARM64
62 | iPhone Developer
63 | Entitlements.plist
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 | false
75 |
76 |
77 | false
78 |
79 |
80 | false
81 |
82 |
83 | false
84 |
85 |
86 | false
87 |
88 |
89 | false
90 |
91 |
92 | false
93 |
94 |
95 | false
96 |
97 |
98 | false
99 |
100 |
101 | false
102 |
103 |
104 | false
105 |
106 |
107 | false
108 |
109 |
110 | false
111 |
112 |
113 | false
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 | 2.4.0
139 |
140 |
141 |
142 |
143 |
144 | {5C1FC0DD-8EE6-45FE-87D8-C01649F0B67B}
145 | XampleUI
146 |
147 |
148 |
--------------------------------------------------------------------------------
/XampleUI/XampleUI.sln:
--------------------------------------------------------------------------------
1 |
2 | Microsoft Visual Studio Solution File, Format Version 12.00
3 | # Visual Studio Version 16
4 | VisualStudioVersion = 16.0.30413.136
5 | MinimumVisualStudioVersion = 10.0.40219.1
6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "XampleUI.Android", "XampleUI.Android\XampleUI.Android.csproj", "{FF9A57C3-7498-4987-831D-DF3490076C46}"
7 | EndProject
8 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "XampleUI.iOS", "XampleUI.iOS\XampleUI.iOS.csproj", "{1F628FE2-C1B8-49C7-89C2-D43E75FD6B44}"
9 | EndProject
10 | Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "XampleUI", "XampleUI\XampleUI.csproj", "{6CE41B21-0876-424B-BD4A-A6F5345B001A}"
11 | EndProject
12 | Global
13 | GlobalSection(SolutionConfigurationPlatforms) = preSolution
14 | Debug|Any CPU = Debug|Any CPU
15 | Debug|iPhone = Debug|iPhone
16 | Debug|iPhoneSimulator = Debug|iPhoneSimulator
17 | Release|Any CPU = Release|Any CPU
18 | Release|iPhone = Release|iPhone
19 | Release|iPhoneSimulator = Release|iPhoneSimulator
20 | EndGlobalSection
21 | GlobalSection(ProjectConfigurationPlatforms) = postSolution
22 | {FF9A57C3-7498-4987-831D-DF3490076C46}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
23 | {FF9A57C3-7498-4987-831D-DF3490076C46}.Debug|Any CPU.Build.0 = Debug|Any CPU
24 | {FF9A57C3-7498-4987-831D-DF3490076C46}.Debug|Any CPU.Deploy.0 = Debug|Any CPU
25 | {FF9A57C3-7498-4987-831D-DF3490076C46}.Debug|iPhone.ActiveCfg = Debug|Any CPU
26 | {FF9A57C3-7498-4987-831D-DF3490076C46}.Debug|iPhone.Build.0 = Debug|Any CPU
27 | {FF9A57C3-7498-4987-831D-DF3490076C46}.Debug|iPhone.Deploy.0 = Debug|Any CPU
28 | {FF9A57C3-7498-4987-831D-DF3490076C46}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
29 | {FF9A57C3-7498-4987-831D-DF3490076C46}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
30 | {FF9A57C3-7498-4987-831D-DF3490076C46}.Debug|iPhoneSimulator.Deploy.0 = Debug|Any CPU
31 | {FF9A57C3-7498-4987-831D-DF3490076C46}.Release|Any CPU.ActiveCfg = Release|Any CPU
32 | {FF9A57C3-7498-4987-831D-DF3490076C46}.Release|Any CPU.Build.0 = Release|Any CPU
33 | {FF9A57C3-7498-4987-831D-DF3490076C46}.Release|Any CPU.Deploy.0 = Release|Any CPU
34 | {FF9A57C3-7498-4987-831D-DF3490076C46}.Release|iPhone.ActiveCfg = Release|Any CPU
35 | {FF9A57C3-7498-4987-831D-DF3490076C46}.Release|iPhone.Build.0 = Release|Any CPU
36 | {FF9A57C3-7498-4987-831D-DF3490076C46}.Release|iPhone.Deploy.0 = Release|Any CPU
37 | {FF9A57C3-7498-4987-831D-DF3490076C46}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
38 | {FF9A57C3-7498-4987-831D-DF3490076C46}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
39 | {FF9A57C3-7498-4987-831D-DF3490076C46}.Release|iPhoneSimulator.Deploy.0 = Release|Any CPU
40 | {1F628FE2-C1B8-49C7-89C2-D43E75FD6B44}.Debug|Any CPU.ActiveCfg = Debug|iPhone
41 | {1F628FE2-C1B8-49C7-89C2-D43E75FD6B44}.Debug|Any CPU.Deploy.0 = Debug|iPhone
42 | {1F628FE2-C1B8-49C7-89C2-D43E75FD6B44}.Debug|iPhone.ActiveCfg = Debug|iPhone
43 | {1F628FE2-C1B8-49C7-89C2-D43E75FD6B44}.Debug|iPhone.Build.0 = Debug|iPhone
44 | {1F628FE2-C1B8-49C7-89C2-D43E75FD6B44}.Debug|iPhone.Deploy.0 = Debug|iPhone
45 | {1F628FE2-C1B8-49C7-89C2-D43E75FD6B44}.Debug|iPhoneSimulator.ActiveCfg = Debug|iPhoneSimulator
46 | {1F628FE2-C1B8-49C7-89C2-D43E75FD6B44}.Debug|iPhoneSimulator.Build.0 = Debug|iPhoneSimulator
47 | {1F628FE2-C1B8-49C7-89C2-D43E75FD6B44}.Debug|iPhoneSimulator.Deploy.0 = Debug|iPhoneSimulator
48 | {1F628FE2-C1B8-49C7-89C2-D43E75FD6B44}.Release|Any CPU.ActiveCfg = Release|iPhone
49 | {1F628FE2-C1B8-49C7-89C2-D43E75FD6B44}.Release|Any CPU.Build.0 = Release|iPhone
50 | {1F628FE2-C1B8-49C7-89C2-D43E75FD6B44}.Release|Any CPU.Deploy.0 = Release|iPhone
51 | {1F628FE2-C1B8-49C7-89C2-D43E75FD6B44}.Release|iPhone.ActiveCfg = Release|iPhone
52 | {1F628FE2-C1B8-49C7-89C2-D43E75FD6B44}.Release|iPhone.Build.0 = Release|iPhone
53 | {1F628FE2-C1B8-49C7-89C2-D43E75FD6B44}.Release|iPhone.Deploy.0 = Release|iPhone
54 | {1F628FE2-C1B8-49C7-89C2-D43E75FD6B44}.Release|iPhoneSimulator.ActiveCfg = Release|iPhoneSimulator
55 | {1F628FE2-C1B8-49C7-89C2-D43E75FD6B44}.Release|iPhoneSimulator.Build.0 = Release|iPhoneSimulator
56 | {1F628FE2-C1B8-49C7-89C2-D43E75FD6B44}.Release|iPhoneSimulator.Deploy.0 = Release|iPhoneSimulator
57 | {6CE41B21-0876-424B-BD4A-A6F5345B001A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
58 | {6CE41B21-0876-424B-BD4A-A6F5345B001A}.Debug|Any CPU.Build.0 = Debug|Any CPU
59 | {6CE41B21-0876-424B-BD4A-A6F5345B001A}.Debug|Any CPU.Deploy.0 = Debug|Any CPU
60 | {6CE41B21-0876-424B-BD4A-A6F5345B001A}.Debug|iPhone.ActiveCfg = Debug|Any CPU
61 | {6CE41B21-0876-424B-BD4A-A6F5345B001A}.Debug|iPhone.Build.0 = Debug|Any CPU
62 | {6CE41B21-0876-424B-BD4A-A6F5345B001A}.Debug|iPhone.Deploy.0 = Debug|Any CPU
63 | {6CE41B21-0876-424B-BD4A-A6F5345B001A}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
64 | {6CE41B21-0876-424B-BD4A-A6F5345B001A}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
65 | {6CE41B21-0876-424B-BD4A-A6F5345B001A}.Debug|iPhoneSimulator.Deploy.0 = Debug|Any CPU
66 | {6CE41B21-0876-424B-BD4A-A6F5345B001A}.Release|Any CPU.ActiveCfg = Release|Any CPU
67 | {6CE41B21-0876-424B-BD4A-A6F5345B001A}.Release|Any CPU.Build.0 = Release|Any CPU
68 | {6CE41B21-0876-424B-BD4A-A6F5345B001A}.Release|Any CPU.Deploy.0 = Release|Any CPU
69 | {6CE41B21-0876-424B-BD4A-A6F5345B001A}.Release|iPhone.ActiveCfg = Release|Any CPU
70 | {6CE41B21-0876-424B-BD4A-A6F5345B001A}.Release|iPhone.Build.0 = Release|Any CPU
71 | {6CE41B21-0876-424B-BD4A-A6F5345B001A}.Release|iPhone.Deploy.0 = Release|Any CPU
72 | {6CE41B21-0876-424B-BD4A-A6F5345B001A}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
73 | {6CE41B21-0876-424B-BD4A-A6F5345B001A}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
74 | {6CE41B21-0876-424B-BD4A-A6F5345B001A}.Release|iPhoneSimulator.Deploy.0 = Release|Any CPU
75 | EndGlobalSection
76 | GlobalSection(SolutionProperties) = preSolution
77 | HideSolutionNode = FALSE
78 | EndGlobalSection
79 | GlobalSection(ExtensibilityGlobals) = postSolution
80 | SolutionGuid = {6AF10636-A9E6-40EA-A45F-8EDD1E5EEA40}
81 | EndGlobalSection
82 | EndGlobal
83 |
--------------------------------------------------------------------------------
/XampleUI/XampleUI/App.xaml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
9 |
10 |
11 | #2196F3
12 | #dededd
13 |
32 |
33 |
34 |
35 |
--------------------------------------------------------------------------------
/XampleUI/XampleUI/App.xaml.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using Xamarin.Forms;
3 | using Xamarin.Forms.Xaml;
4 | using XampleUI.Services;
5 | using XampleUI.Views;
6 |
7 | namespace XampleUI
8 | {
9 | public partial class App : Application
10 | {
11 |
12 | public App()
13 | {
14 | InitializeComponent();
15 |
16 | DependencyService.Register();
17 | MainPage = new AppShell();
18 | }
19 |
20 | protected override void OnStart()
21 | {
22 | }
23 |
24 | protected override void OnSleep()
25 | {
26 | }
27 |
28 | protected override void OnResume()
29 | {
30 | }
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/XampleUI/XampleUI/AppShell.xaml:
--------------------------------------------------------------------------------
1 |
2 |
13 |
14 |
19 |
20 |
21 |
22 |
33 |
34 |
35 |
36 |
40 |
43 |
66 |
67 |
70 |
86 |
87 |
88 |
89 |
94 |
95 |
100 |
104 |
108 |
112 |
116 |
120 |
121 |
122 |
123 |
127 |
128 |
134 |
138 |
139 |
171 |
--------------------------------------------------------------------------------
/XampleUI/XampleUI/AppShell.xaml.cs:
--------------------------------------------------------------------------------
1 | using Plugin.SharedTransitions;
2 | using Xamarin.Forms;
3 | using XampleUI.Views.DribBank;
4 | using XampleUI.Views.DribCakes;
5 | using XampleUI.Views.DribComp;
6 | using XampleUI.Views.DribGrocs;
7 | using XampleUI.Views.XFShell;
8 |
9 | namespace XampleUI
10 | {
11 | public partial class AppShell : SharedTransitionShell
12 | {
13 | public AppShell()
14 |
15 | {
16 | InitializeComponent();
17 | Routing.RegisterRoute(nameof(ItemDetailPage), typeof(ItemDetailPage));
18 | Routing.RegisterRoute(nameof(NewItemPage), typeof(NewItemPage));
19 | Routing.RegisterRoute(nameof(AboutTransitionPage), typeof(AboutTransitionPage));
20 |
21 | Routing.RegisterRoute(nameof(DribCakes), typeof(DribCakes));
22 | Routing.RegisterRoute(nameof(CakeList), typeof(CakeList));
23 | Routing.RegisterRoute(nameof(CakeDetail), typeof(CakeDetail));
24 |
25 | Routing.RegisterRoute(nameof(GrocList), typeof(GrocList));
26 | Routing.RegisterRoute(nameof(GrocDetail), typeof(GrocDetail));
27 |
28 | Routing.RegisterRoute(nameof(CompAir), typeof(CompAir));
29 |
30 | Routing.RegisterRoute(nameof(CardList), typeof(CardList));
31 | Routing.RegisterRoute(nameof(CardTransaction), typeof(CardTransaction));
32 | }
33 | }
34 | }
--------------------------------------------------------------------------------
/XampleUI/XampleUI/AssemblyInfo.cs:
--------------------------------------------------------------------------------
1 | using System.Reflection;
2 | using Xamarin.Forms;
3 | using Xamarin.Forms.Xaml;
4 |
5 | [assembly: XamlCompilation(XamlCompilationOptions.Compile)]
--------------------------------------------------------------------------------
/XampleUI/XampleUI/Assest/License/Mobile App License Monotype.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shawyunz/XampleUI/83b0ff0c469be3ffee10db4084aae37f8e0399e3/XampleUI/XampleUI/Assest/License/Mobile App License Monotype.pdf
--------------------------------------------------------------------------------
/XampleUI/XampleUI/GettingStarted.txt:
--------------------------------------------------------------------------------
1 | Welcome to Xamarin.Forms! Here are some tips to get started building your app.
2 |
3 | XAML Hot Reload
4 | ---------------
5 |
6 | XAML Hot Reload quickly applies UI changes as you make them to your running app.
7 |
8 | Try it out:
9 |
10 | 1. Run the app by clicking the Start Debugging (play) button in the above toolbar.
11 | 2. Open AboutPage.xaml (under Views, in the main project).
12 | 3. Change something! Hint: change the Accent color from #96d1ff to Pink. Save the file.
13 | 4. Watch the About screen update, with the logo background changing colors.
14 |
15 | Keep going and try more changes! This is the most productive way to iteratively create your UI.
16 |
17 | QuickStart guide
18 | ----------------
19 |
20 | Learn more of the fundamentals for building apps with Xamarin here: https://aka.ms/xamarin-quickstart
21 |
22 | Your App Shell
23 | --------------
24 |
25 | This template uses Shell, an app container that reduces the complexity of your apps by providing fundamental features including:
26 |
27 | - A single place to describe the app's visual hierarchy
28 | - Common navigation such as a flyout menu and tabs
29 | - A URI-based navigation scheme that permits navigation to any page in the application
30 | - An integrated search handler
31 |
32 | Open AppShell.xaml to begin exploring. To learn more about Shell visit: https://docs.microsoft.com/xamarin/xamarin-forms/app-fundamentals/shell/introduction
--------------------------------------------------------------------------------
/XampleUI/XampleUI/Models/Item.cs:
--------------------------------------------------------------------------------
1 | namespace XampleUI.Models
2 | {
3 | public class Item
4 | {
5 | public string Description { get; set; }
6 | public string Id { get; set; }
7 | public string Image { get; set; }
8 | public double Price { get; set; }
9 | public string Size { get; set; }
10 | public string Text { get; set; } //Title
11 | }
12 | }
--------------------------------------------------------------------------------
/XampleUI/XampleUI/Models/ItemAir.cs:
--------------------------------------------------------------------------------
1 | namespace XampleUI.Models
2 | {
3 | public class ItemAir
4 | {
5 | public string Id { get; set; }
6 | public string Image { get; set; }
7 | public string Text { get; set; } //Title
8 | public string CheckedBags { get; set; }
9 | public string Entertainment { get; set; }
10 | public string InSeatPower { get; set; }
11 | public string LoyaltyTiers { get; set; }
12 | public string PointsExpiration { get; set; }
13 | public string SeatPitch { get; set; }
14 | public string SeatSelection { get; set; }
15 | public string SeatWidth { get; set; }
16 | public string Wifi { get; set; }
17 | }
18 | }
--------------------------------------------------------------------------------
/XampleUI/XampleUI/Models/ItemBank.cs:
--------------------------------------------------------------------------------
1 | namespace XampleUI.Models
2 | {
3 | public class BankCard
4 | {
5 | public string CardCode { get; set; }
6 | public string CardHolder { get; set; }
7 | public string CardNumber { get; set; }
8 | public string CardImageA { get; set; }
9 | public string CardImageB { get; set; }
10 | }
11 |
12 | public class BankTransaction
13 | {
14 | public string Amount { get; set; }
15 | public string Title { get; set; }
16 | public string Type { get; set; }
17 | }
18 | }
--------------------------------------------------------------------------------
/XampleUI/XampleUI/Models/ItemCart.cs:
--------------------------------------------------------------------------------
1 | namespace XampleUI.Models
2 | {
3 | public class ItemCart : Item
4 | {
5 | public int Quantity { get; set; }
6 |
7 | public ItemCart (Item item)
8 | {
9 | Id = item.Id;
10 | Image = item.Image;
11 | Description = item.Description;
12 | Price = item.Price;
13 | Text = item.Text;
14 | }
15 | }
16 | }
--------------------------------------------------------------------------------
/XampleUI/XampleUI/Services/IDataStore.cs:
--------------------------------------------------------------------------------
1 | using System.Collections.Generic;
2 | using System.Threading.Tasks;
3 | using XampleUI.Models;
4 |
5 | namespace XampleUI.Services
6 | {
7 | public interface IDataStore
8 | {
9 | Task AddItemAsync(T item);
10 |
11 | Task UpdateItemAsync(T item);
12 |
13 | Task DeleteItemAsync(string id);
14 |
15 | Task GetItemAsync(string id);
16 |
17 | Task> GetItemsAsync(bool forceRefresh = false);
18 |
19 | Task GetGrocAsync(string id);
20 |
21 | Task> GetGrocsAsync(bool forceRefresh = false);
22 |
23 | Task AddItemToCartAsync(ItemCart item);
24 | Task> GetGrocsCartAsync(bool forceRefresh = false);
25 | }
26 | }
--------------------------------------------------------------------------------
/XampleUI/XampleUI/Services/MockDataStore.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Threading.Tasks;
5 | using XampleUI.Models;
6 |
7 | namespace XampleUI.Services
8 | {
9 | public class MockDataStore : IDataStore-
10 | {
11 | private readonly List
- items;
12 | private readonly List
- grocItems;
13 | private readonly List grocCartItems;
14 |
15 | public MockDataStore()
16 | {
17 | items = new List
- ()
18 | {
19 | new Item { Id = Guid.NewGuid().ToString(), Text = "First item", Description="This is an item description.", Image="item1.png" },
20 | new Item { Id = Guid.NewGuid().ToString(), Text = "Second item", Description="This is an item description.", Image="item2.png" },
21 | new Item { Id = Guid.NewGuid().ToString(), Text = "Third item", Description="This is an item description.", Image="item3.png" },
22 | new Item { Id = Guid.NewGuid().ToString(), Text = "Fourth item", Description="This is an item description.", Image="item4.png" },
23 | new Item { Id = Guid.NewGuid().ToString(), Text = "Fifth item", Description="This is an item description.", Image="item1.png" },
24 | new Item { Id = Guid.NewGuid().ToString(), Text = "Sixth item", Description="This is an item description.", Image="item2.png" }
25 | };
26 |
27 | var desc = "The Lenta Lavorazione method comes directly from the traditional and artisan way of making pasta. Careful research into the best";
28 | grocItems = new List
- ()
29 | {
30 | new Item { Id = Guid.NewGuid().ToString(), Text = "La Vie .", Size="Les Framboises 60g", Image="grocs_item00.png", Price=8.99, Description=desc },
31 | new Item { Id = Guid.NewGuid().ToString(), Text = "La Vie", Size="Les Framboises 60g", Image="grocs_item0.png", Price=8.99, Description=desc },
32 | new Item { Id = Guid.NewGuid().ToString(), Text = "Seggiano Organic Tagliatelle", Size="500g", Image="grocs_item1.png", Price=7.99, Description=desc },
33 | new Item { Id = Guid.NewGuid().ToString(), Text = "Rummo Fusilli No 48 Pasta", Size="500g", Image="grocs_item2.png", Price=14.99, Description=desc },
34 | new Item { Id = Guid.NewGuid().ToString(), Text = "Biona organic White Spelt Fusilli", Size="500g", Image="grocs_item3.png", Price=3.69, Description=desc },
35 | new Item { Id = Guid.NewGuid().ToString(), Text = "Seggiano Organic Tagliatelle .", Size="500g", Image="grocs_item4.png", Price=7.99, Description=desc }
36 | };
37 |
38 | grocCartItems = new List();
39 | }
40 |
41 | public async Task AddItemAsync(Item item)
42 | {
43 | items.Add(item);
44 |
45 | return await Task.FromResult(true);
46 | }
47 |
48 | public async Task AddItemToCartAsync(ItemCart item)
49 | {
50 | grocCartItems.Add(item);
51 |
52 | return await Task.FromResult(true);
53 | }
54 |
55 | public async Task UpdateItemAsync(Item item)
56 | {
57 | var oldItem = items.Where((Item arg) => arg.Id == item.Id).FirstOrDefault();
58 | items.Remove(oldItem);
59 | items.Add(item);
60 |
61 | return await Task.FromResult(true);
62 | }
63 |
64 | public async Task DeleteItemAsync(string id)
65 | {
66 | var oldItem = items.Where((Item arg) => arg.Id == id).FirstOrDefault();
67 | items.Remove(oldItem);
68 |
69 | return await Task.FromResult(true);
70 | }
71 |
72 | public async Task
- GetItemAsync(string id)
73 | {
74 | return await Task.FromResult(items.FirstOrDefault(s => s.Id == id));
75 | }
76 |
77 | public async Task> GetItemsAsync(bool forceRefresh = false)
78 | {
79 | return await Task.FromResult(items);
80 | }
81 |
82 | public async Task
- GetGrocAsync(string id)
83 | {
84 | return await Task.FromResult(grocItems.FirstOrDefault(s => s.Id == id));
85 | }
86 |
87 | public async Task> GetGrocsAsync(bool forceRefresh = false)
88 | {
89 | return await Task.FromResult(grocItems);
90 | }
91 |
92 | public async Task> GetGrocsCartAsync(bool forceRefresh = false)
93 | {
94 | return await Task.FromResult(grocCartItems);
95 | }
96 | }
97 | }
--------------------------------------------------------------------------------
/XampleUI/XampleUI/ViewModels/BaseViewModel.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.ComponentModel;
4 | using System.Runtime.CompilerServices;
5 |
6 | using Xamarin.Forms;
7 |
8 | using XampleUI.Models;
9 | using XampleUI.Services;
10 |
11 | namespace XampleUI.ViewModels
12 | {
13 | public class BaseViewModel : INotifyPropertyChanged
14 | {
15 | public IDataStore
- DataStore => DependencyService.Get>();
16 |
17 | bool isBusy = false;
18 | public bool IsBusy
19 | {
20 | get { return isBusy; }
21 | set { SetProperty(ref isBusy, value); }
22 | }
23 |
24 | string title = string.Empty;
25 | public string Title
26 | {
27 | get { return title; }
28 | set { SetProperty(ref title, value); }
29 | }
30 |
31 | protected bool SetProperty(ref T backingStore, T value,
32 | [CallerMemberName] string propertyName = "",
33 | Action onChanged = null)
34 | {
35 | if (EqualityComparer.Default.Equals(backingStore, value))
36 | return false;
37 |
38 | backingStore = value;
39 | onChanged?.Invoke();
40 | OnPropertyChanged(propertyName);
41 | return true;
42 | }
43 |
44 | #region INotifyPropertyChanged
45 | public event PropertyChangedEventHandler PropertyChanged;
46 | protected void OnPropertyChanged([CallerMemberName] string propertyName = "")
47 | {
48 | var changed = PropertyChanged;
49 | if (changed == null)
50 | return;
51 |
52 | changed.Invoke(this, new PropertyChangedEventArgs(propertyName));
53 | }
54 | #endregion
55 | }
56 | }
57 |
--------------------------------------------------------------------------------
/XampleUI/XampleUI/ViewModels/Groc/GrocDetailViewModel.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Diagnostics;
3 | using Xamarin.Forms;
4 | using XampleUI.Models;
5 |
6 | namespace XampleUI.ViewModels.Groc
7 | {
8 | [QueryProperty(nameof(ItemId), nameof(ItemId))]
9 | internal class GrocDetailViewModel : BaseViewModel
10 | {
11 | private Item item;
12 | private string itemId;
13 | private int quantity;
14 | public Command AddItemCommand => new Command(OnAddItem);
15 | public Command CountAddCommand => new Command(CountAdd);
16 | public Command CountMinusCommand => new Command(CountMinus);
17 |
18 | public Item CurrentItem
19 | {
20 | get => item;
21 | set => SetProperty(ref item, value);
22 | }
23 |
24 | public string ItemId
25 | {
26 | get => itemId;
27 | set
28 | {
29 | itemId = value;
30 | LoadItemId(value);
31 | }
32 | }
33 |
34 | public int Quantity
35 | {
36 | get => quantity;
37 | set => SetProperty(ref quantity, value);
38 | }
39 |
40 | public INavigation Navigation { get; set; }
41 |
42 | public async void LoadItemId(string itemId)
43 | {
44 | try
45 | {
46 | CurrentItem = await DataStore.GetGrocAsync(itemId);
47 | }
48 | catch (Exception)
49 | {
50 | Debug.WriteLine("Failed to Load Item");
51 | }
52 | }
53 |
54 | private void CountAdd()
55 | {
56 | Quantity += 1;
57 | }
58 |
59 | private void CountMinus()
60 | {
61 | if (Quantity > 0)
62 | {
63 | Quantity -= 1;
64 | }
65 | }
66 |
67 | private async void OnAddItem(object obj)
68 | {
69 | if (Quantity < 1)
70 | {
71 | await Application.Current.MainPage.DisplayAlert("Error", "Qty is 0.", "Ok");
72 | return;
73 | }
74 |
75 | var cartItem = new ItemCart(CurrentItem)
76 | {
77 | Quantity = Quantity
78 | };
79 | await DataStore.AddItemToCartAsync(cartItem);
80 |
81 | await Navigation.PopAsync();
82 | }
83 | }
84 | }
--------------------------------------------------------------------------------
/XampleUI/XampleUI/ViewModels/Groc/GrocsViewModel.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.ObjectModel;
3 | using System.Diagnostics;
4 | using System.Linq;
5 | using System.Threading.Tasks;
6 |
7 | using Xamarin.Forms;
8 |
9 | using XampleUI.Models;
10 | using XampleUI.Views.DribGrocs;
11 |
12 | namespace XampleUI.ViewModels.Groc
13 | {
14 | public class GrocsViewModel : BaseViewModel
15 | {
16 | private Item _selectedItem;
17 |
18 | public GrocsViewModel()
19 | {
20 | Title = "Browse";
21 | Grocs = new ObservableCollection
- ();
22 | GrocsCart = new ObservableCollection();
23 | LoadItemsCommand = new Command(async () => await ExecuteLoadItemsCommand());
24 |
25 | ItemTapped = new Command
- (OnItemSelected);
26 | }
27 |
28 | public double CartAmount { get; private set; }
29 | public int CartCount => GrocsCart?.Count ?? 0;
30 | public ObservableCollection
- Grocs { get; }
31 | public ObservableCollection GrocsCart { get; set; }
32 | public bool HasCart { get; set; }
33 | public Command
- ItemTapped { get; }
34 | public Command LoadItemsCommand { get; }
35 |
36 | public Item SelectedItem
37 | {
38 | get => _selectedItem;
39 | set
40 | {
41 | SetProperty(ref _selectedItem, value);
42 | OnItemSelected(value);
43 | }
44 | }
45 |
46 | public async void OnAppearing()
47 | {
48 | IsBusy = true;
49 | SelectedItem = null;
50 |
51 | GrocsCart.Clear();
52 | var items = await DataStore.GetGrocsCartAsync();
53 | if (items is null)
54 | {
55 | return;
56 | }
57 | foreach (var item in items)
58 | {
59 | GrocsCart.Add(item);
60 | }
61 |
62 | OnPropertyChanged(nameof(CartCount));
63 |
64 | var amount = GrocsCart?.Sum(x => x.Price * x.Quantity) ?? 0;
65 | CartAmount = amount < 40 ? amount + 30 : amount;
66 | OnPropertyChanged(nameof(CartAmount));
67 | }
68 |
69 | private async Task ExecuteLoadItemsCommand()
70 | {
71 | IsBusy = true;
72 |
73 | try
74 | {
75 | Grocs.Clear();
76 | var items = await DataStore.GetGrocsAsync(true);
77 | foreach (var item in items)
78 | {
79 | Grocs.Add(item);
80 | }
81 | }
82 | catch (Exception ex)
83 | {
84 | Debug.WriteLine(ex);
85 | }
86 | finally
87 | {
88 | IsBusy = false;
89 | }
90 | }
91 |
92 | private async void OnItemSelected(Item item)
93 | {
94 | if (item == null)
95 | return;
96 |
97 | // This will push the ItemDetailPage onto the navigation stack
98 | await Shell.Current.GoToAsync($"{nameof(GrocDetail)}?{nameof(GrocDetailViewModel.ItemId)}={item.Id}");
99 | }
100 | }
101 | }
--------------------------------------------------------------------------------
/XampleUI/XampleUI/ViewModels/XFShell/AboutViewModel.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Windows.Input;
3 | using Xamarin.Essentials;
4 | using Xamarin.Forms;
5 | using XampleUI.Views.XFShell;
6 |
7 | namespace XampleUI.ViewModels.XFShell
8 | {
9 | public class AboutViewModel : BaseViewModel
10 | {
11 | public AboutViewModel()
12 | {
13 | Title = "Welcome";
14 | OpenWebCommand = new Command(async () => await Browser.OpenAsync("https://github.com/shawyunz"));
15 | NavigateClickCommand = new Command(OnNavClick);
16 | }
17 |
18 | public ICommand OpenWebCommand { get; }
19 | public ICommand NavigateClickCommand { get; }
20 | private async void OnNavClick(object obj)
21 | {
22 | await Shell.Current.GoToAsync(nameof(AboutTransitionPage));
23 | }
24 | }
25 | }
--------------------------------------------------------------------------------
/XampleUI/XampleUI/ViewModels/XFShell/ItemDetailViewModel.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Diagnostics;
3 | using Xamarin.Forms;
4 |
5 | namespace XampleUI.ViewModels.XFShell
6 | {
7 | [QueryProperty(nameof(ItemId), nameof(ItemId))]
8 | public class ItemDetailViewModel : BaseViewModel
9 | {
10 | private string itemId;
11 | private string text;
12 | private string image;
13 | private string description;
14 | public string Id { get; set; }
15 |
16 | public string Text
17 | {
18 | get => text;
19 | set => SetProperty(ref text, value);
20 | }
21 |
22 | public string Image
23 | {
24 | get => image;
25 | set => SetProperty(ref image, value);
26 | }
27 |
28 | public string Description
29 | {
30 | get => description;
31 | set => SetProperty(ref description, value);
32 | }
33 |
34 | public string ItemId
35 | {
36 | get
37 | {
38 | return itemId;
39 | }
40 | set
41 | {
42 | itemId = value;
43 | LoadItemId(value);
44 | }
45 | }
46 |
47 | public async void LoadItemId(string itemId)
48 | {
49 | try
50 | {
51 | var item = await DataStore.GetItemAsync(itemId);
52 | Id = item.Id;
53 | Text = item.Text;
54 | Description = item.Description;
55 | Image = item.Image;
56 | }
57 | catch (Exception)
58 | {
59 | Debug.WriteLine("Failed to Load Item");
60 | }
61 | }
62 | }
63 | }
--------------------------------------------------------------------------------
/XampleUI/XampleUI/ViewModels/XFShell/ItemsViewModel.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.ObjectModel;
3 | using System.Diagnostics;
4 | using System.Threading.Tasks;
5 |
6 | using Xamarin.Forms;
7 |
8 | using XampleUI.Models;
9 | using XampleUI.Views.XFShell;
10 |
11 | namespace XampleUI.ViewModels.XFShell
12 | {
13 | public class ItemsViewModel : BaseViewModel
14 | {
15 | private Item _selectedItem;
16 | public bool HasCart { get; set; }
17 |
18 | public ObservableCollection
- Items { get; }
19 | public Command LoadItemsCommand { get; }
20 | public Command AddItemCommand { get; }
21 | public Command
- ItemTapped { get; }
22 |
23 | public ItemsViewModel()
24 | {
25 | Title = "Browse";
26 | Items = new ObservableCollection
- ();
27 | LoadItemsCommand = new Command(async () => await ExecuteLoadItemsCommand());
28 |
29 | ItemTapped = new Command
- (OnItemSelected);
30 |
31 | AddItemCommand = new Command(OnAddItem);
32 | }
33 |
34 | private async Task ExecuteLoadItemsCommand()
35 | {
36 | IsBusy = true;
37 |
38 | try
39 | {
40 | Items.Clear();
41 | var items = await DataStore.GetItemsAsync(true);
42 | foreach (var item in items)
43 | {
44 | Items.Add(item);
45 | }
46 | }
47 | catch (Exception ex)
48 | {
49 | Debug.WriteLine(ex);
50 | }
51 | finally
52 | {
53 | IsBusy = false;
54 | }
55 | }
56 |
57 | public void OnAppearing()
58 | {
59 | IsBusy = true;
60 | SelectedItem = null;
61 | }
62 |
63 | public Item SelectedItem
64 | {
65 | get => _selectedItem;
66 | set
67 | {
68 | SetProperty(ref _selectedItem, value);
69 | OnItemSelected(value);
70 | }
71 | }
72 |
73 | private async void OnAddItem(object obj)
74 | {
75 | await Shell.Current.GoToAsync(nameof(NewItemPage));
76 | }
77 |
78 | private async void OnItemSelected(Item item)
79 | {
80 | if (item == null)
81 | return;
82 |
83 | // This will push the ItemDetailPage onto the navigation stack
84 | await Shell.Current.GoToAsync($"{nameof(ItemDetailPage)}?{nameof(ItemDetailViewModel.ItemId)}={item.Id}");
85 | }
86 | }
87 | }
--------------------------------------------------------------------------------
/XampleUI/XampleUI/ViewModels/XFShell/NewItemViewModel.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using Xamarin.Forms;
3 | using XampleUI.Models;
4 |
5 | namespace XampleUI.ViewModels.XFShell
6 | {
7 | public class NewItemViewModel : BaseViewModel
8 | {
9 | private string text;
10 | private string description;
11 |
12 | public NewItemViewModel()
13 | {
14 | SaveCommand = new Command(OnSave, ValidateSave);
15 | CancelCommand = new Command(OnCancel);
16 | this.PropertyChanged +=
17 | (_, __) => SaveCommand.ChangeCanExecute();
18 | }
19 |
20 | private bool ValidateSave()
21 | {
22 | return !String.IsNullOrWhiteSpace(text)
23 | && !String.IsNullOrWhiteSpace(description);
24 | }
25 |
26 | public string Text
27 | {
28 | get => text;
29 | set => SetProperty(ref text, value);
30 | }
31 |
32 | public string Description
33 | {
34 | get => description;
35 | set => SetProperty(ref description, value);
36 | }
37 |
38 | public Command SaveCommand { get; }
39 | public Command CancelCommand { get; }
40 |
41 | private async void OnCancel()
42 | {
43 | // This will pop the current page off the navigation stack
44 | await Shell.Current.GoToAsync("..");
45 | }
46 |
47 | private async void OnSave()
48 | {
49 | Item newItem = new Item()
50 | {
51 | Id = Guid.NewGuid().ToString(),
52 | Text = Text,
53 | Description = Description
54 | };
55 |
56 | await DataStore.AddItemAsync(newItem);
57 |
58 | // This will pop the current page off the navigation stack
59 | await Shell.Current.GoToAsync("..");
60 | }
61 | }
62 | }
--------------------------------------------------------------------------------
/XampleUI/XampleUI/Views/DribBank/CardList.xaml:
--------------------------------------------------------------------------------
1 |
2 |
10 |
11 |
12 |
13 |
14 |
17 |
18 |
19 |
20 |
21 |
26 |
27 |
28 |
29 |
33 |
38 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
52 |
56 |
57 |
58 |
59 |
60 |
65 |
66 |
67 |
--------------------------------------------------------------------------------
/XampleUI/XampleUI/Views/DribBank/CardList.xaml.cs:
--------------------------------------------------------------------------------
1 | using System.Collections.Generic;
2 | using System.Collections.ObjectModel;
3 | using Xamarin.Forms;
4 | using Xamarin.Forms.Xaml;
5 | using XampleUI.Models;
6 |
7 | namespace XampleUI.Views.DribBank
8 | {
9 | [XamlCompilation(XamlCompilationOptions.Compile)]
10 | public partial class CardList : ContentPage
11 | {
12 | public CardList()
13 | {
14 | InitializeComponent();
15 | BindingContext = this;
16 | }
17 |
18 |
19 | public Command ItemTapped => new Command(OnItemSelected);
20 |
21 | private async void OnItemSelected(BankCard item)
22 | {
23 | if (item == null)
24 | return;
25 |
26 | // This will push the ItemDetailPage onto the navigation stack
27 | await Shell.Current.GoToAsync($"{nameof(CardTransaction)}?{nameof(CardTransaction.ItemId)}={item.CardCode}");
28 | }
29 |
30 | public ObservableCollection BankCardList => new ObservableCollection(MockCards());
31 |
32 | public List MockCards() => new List()
33 | {
34 | new BankCard {
35 | CardCode="2",
36 | CardHolder="icon_check.png",
37 | CardNumber="24-month",
38 | CardImageA="bankcard1a",
39 | CardImageB="bankcard1b"},
40 | new BankCard {
41 | CardCode="2",
42 | CardHolder="icon_check.png",
43 | CardNumber="24-month",
44 | CardImageA="bankcard2a",
45 | CardImageB="bankcard2b"},
46 | new BankCard {
47 | CardCode="2",
48 | CardHolder="icon_check.png",
49 | CardNumber="24-month",
50 | CardImageA="bankcard3a",
51 | CardImageB="bankcard3b"}
52 | };
53 |
54 | }
55 | }
--------------------------------------------------------------------------------
/XampleUI/XampleUI/Views/DribBank/CardTransaction.xaml:
--------------------------------------------------------------------------------
1 |
2 |
9 |
10 |
14 |
15 |
16 |
19 |
20 |
21 |
22 |
23 |
27 |
31 |
32 |
33 |
41 |
42 |
49 |
50 |
55 |
56 |
57 |
58 |
59 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
--------------------------------------------------------------------------------
/XampleUI/XampleUI/Views/DribBank/CardTransaction.xaml.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Collections.ObjectModel;
4 | using System.Diagnostics;
5 | using System.Linq;
6 | using Xamarin.Forms;
7 | using Xamarin.Forms.Xaml;
8 | using XampleUI.Models;
9 |
10 | namespace XampleUI.Views.DribBank
11 | {
12 | [QueryProperty(nameof(ItemId), nameof(ItemId))]
13 | [XamlCompilation(XamlCompilationOptions.Compile)]
14 | public partial class CardTransaction : ContentPage
15 | {
16 | private bool isBack;
17 | private bool isFliping = false;
18 | private string itemId;
19 |
20 | private bool startFromFront;
21 |
22 | public CardTransaction()
23 | {
24 | InitializeComponent();
25 | }
26 |
27 | public ObservableCollection BankCardList => new ObservableCollection(MockCards());
28 |
29 | public ObservableCollection BankTransList => new ObservableCollection(MockTransactions());
30 |
31 | public bool IsFront { get; set; } = true;
32 |
33 | public bool LabelVisibility { get; set; } = true;
34 |
35 | public string ItemId
36 | {
37 | get
38 | {
39 | return itemId;
40 | }
41 | set
42 | {
43 | itemId = value;
44 | LoadTrans(value);
45 | }
46 | }
47 |
48 | public void LoadTrans(string itemId)
49 | {
50 | try
51 | {
52 | var item = BankCardList.FirstOrDefault(x => x.CardCode == itemId);
53 | //get trans list
54 | //BankTransList
55 | }
56 | catch (Exception)
57 | {
58 | Debug.WriteLine("Failed to Load Item");
59 | }
60 | }
61 |
62 | public List MockCards() => new List()
63 | {
64 | new BankCard {
65 | CardCode="2",
66 | CardHolder="icon_check.png",
67 | CardNumber="24-month",
68 | CardImageA="bankcard1a",
69 | CardImageB="bankcard1b"},
70 | new BankCard {
71 | CardCode="2",
72 | CardHolder="icon_check.png",
73 | CardNumber="24-month",
74 | CardImageA="bankcard2a",
75 | CardImageB="bankcard2b"},
76 | new BankCard {
77 | CardCode="2",
78 | CardHolder="icon_check.png",
79 | CardNumber="24-month",
80 | CardImageA="bankcard3a",
81 | CardImageB="bankcard3b"}
82 | };
83 |
84 | public List MockTransactions() => new List()
85 | {
86 | new BankTransaction {
87 | Title="2",
88 | Type="bank",
89 | Amount="+123.00" },
90 | new BankTransaction {
91 | Title="2",
92 | Type="bank",
93 | Amount="+123.00" },
94 | new BankTransaction {
95 | Title="2",
96 | Type="bank",
97 | Amount="+123.00" },
98 | new BankTransaction {
99 | Title="2",
100 | Type="bank",
101 | Amount="+123.00" }
102 | //.....
103 | };
104 |
105 | private void FlipCardByDragging(View view1, View view2, double rotation)
106 | {
107 | int angle = Math.Abs(((int)Math.Round(rotation)) % 360);
108 |
109 | if (angle <= 90 || angle > 270)
110 | {
111 | view1.IsVisible = true;
112 | view2.IsVisible = false;
113 | view1.RotationX = rotation;
114 | }
115 | else
116 | {
117 | view2.IsVisible = true;
118 | view1.IsVisible = false;
119 | view2.RotationX = rotation - 180;
120 | }
121 | }
122 |
123 | private void PanGestureRecognizer_PanUpdated(object sender, PanUpdatedEventArgs e)
124 | {
125 | var offset = e.TotalY;
126 |
127 | if (e.StatusType.ToString() == "Started" || e.StatusType.ToString() == "Completed")
128 | {
129 | startFromFront = IsFront;
130 | Card2View.RotationX = IsFront ? -270 : 0;
131 | Card1View.RotationX = !IsFront ? -270 : 0;
132 | }
133 |
134 | if (startFromFront)
135 | {
136 | FlipCardByDragging(Card1View, Card2View, offset * -2);
137 | }
138 | else
139 | {
140 | FlipCardByDragging(Card2View, Card1View, offset * -2);
141 | }
142 | }
143 |
144 | private void SwipeGestureRecognizer_Swiped(object sender, SwipedEventArgs e)
145 | {
146 | if (e.Direction == SwipeDirection.Up)
147 | {
148 | LabelVisibility = false;
149 | }
150 | else
151 | {
152 | LabelVisibility = true;
153 | }
154 | OnPropertyChanged("LabelVisibility");
155 | }
156 | }
157 | }
--------------------------------------------------------------------------------
/XampleUI/XampleUI/Views/DribCakes/CakeDetail.xaml:
--------------------------------------------------------------------------------
1 |
2 |
9 |
10 |
11 |
15 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
33 |
34 |
35 |
36 |
40 |
44 |
45 |
46 |
47 |
48 |
52 |
53 |
57 |
62 |
63 |
69 |
74 |
82 |
83 |
84 |
90 |
95 |
100 |
104 |
110 |
117 |
123 |
124 |
129 |
130 |
136 |
143 |
144 |
145 |
146 |
155 |
160 |
169 |
177 |
186 |
187 |
188 |
189 |
190 |
191 |
192 |
--------------------------------------------------------------------------------
/XampleUI/XampleUI/Views/DribCakes/CakeDetail.xaml.cs:
--------------------------------------------------------------------------------
1 | using Xamarin.Forms;
2 | using Xamarin.Forms.Xaml;
3 |
4 | namespace XampleUI.Views.DribCakes
5 | {
6 | [XamlCompilation(XamlCompilationOptions.Compile)]
7 | public partial class CakeDetail : ContentPage
8 | {
9 | public CakeDetail()
10 | {
11 | InitializeComponent();
12 | }
13 |
14 | private void TapGestureRecognizer_Tapped(object sender, System.EventArgs e)
15 | {
16 | Navigation.PopAsync();
17 | }
18 | }
19 | }
--------------------------------------------------------------------------------
/XampleUI/XampleUI/Views/DribCakes/CakeList.xaml:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
10 |
14 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
32 |
33 |
34 |
35 |
39 |
43 |
47 |
48 |
49 |
50 |
54 |
58 |
59 |
60 |
61 |
62 |
63 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
83 |
88 |
93 |
100 |
101 |
102 |
106 |
107 |
108 |
113 |
119 |
125 |
130 |
136 |
141 |
142 |
143 |
144 |
149 |
155 |
161 |
166 |
172 |
177 |
178 |
179 |
180 |
185 |
186 |
187 |
188 |
189 |
194 |
200 |
206 |
211 |
217 |
222 |
223 |
224 |
225 |
230 |
236 |
242 |
247 |
253 |
258 |
259 |
260 |
265 |
275 |
284 |
285 |
292 |
301 |
302 |
303 |
304 |
305 |
306 |
--------------------------------------------------------------------------------
/XampleUI/XampleUI/Views/DribCakes/CakeList.xaml.cs:
--------------------------------------------------------------------------------
1 | using System;
2 |
3 | using Xamarin.Forms;
4 | using Xamarin.Forms.Xaml;
5 |
6 | namespace XampleUI.Views.DribCakes
7 | {
8 | [XamlCompilation(XamlCompilationOptions.Compile)]
9 | public partial class CakeList : ContentPage
10 | {
11 | public CakeList()
12 | {
13 | InitializeComponent();
14 | }
15 |
16 | private async void TapGestureRecognizer_Tapped(object sender, EventArgs e)
17 | {
18 | await Shell.Current.GoToAsync("CakeDetail");
19 | }
20 | }
21 | }
--------------------------------------------------------------------------------
/XampleUI/XampleUI/Views/DribCakes/DribCakes.xaml:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
22 |
28 |
32 |
33 |
34 |
--------------------------------------------------------------------------------
/XampleUI/XampleUI/Views/DribCakes/DribCakes.xaml.cs:
--------------------------------------------------------------------------------
1 | using System;
2 |
3 | using Xamarin.Forms;
4 | using Xamarin.Forms.Xaml;
5 |
6 | namespace XampleUI.Views.DribCakes
7 | {
8 | [XamlCompilation(XamlCompilationOptions.Compile)]
9 | public partial class DribCakes : ContentPage
10 | {
11 | public DribCakes()
12 | {
13 | InitializeComponent();
14 | }
15 |
16 | private async void TapGestureRecognizer_Tapped(object sender, EventArgs e)
17 | {
18 | await Shell.Current.GoToAsync("CakeList");
19 | }
20 | }
21 | }
--------------------------------------------------------------------------------
/XampleUI/XampleUI/Views/DribComp/CompAir.xaml:
--------------------------------------------------------------------------------
1 |
2 |
9 |
10 |
11 |
12 |
16 |
22 |
29 |
30 |
31 |
39 |
40 |
41 |
42 |
43 |
50 |
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 |
95 |
103 |
104 |
108 |
109 |
110 |
111 |
115 |
116 |
117 |
124 |
131 |
132 |
133 |
134 |
139 |
140 |
141 |
145 |
159 |
160 |
161 |
162 |
163 |
164 |
165 |
166 |
167 |
168 |
169 |
170 |
171 |
172 |
173 |
174 |
175 |
184 |
191 |
192 |
196 |
197 |
198 |
199 |
203 |
204 |
205 |
206 |
213 |
220 |
221 |
222 |
223 |
228 |
229 |
230 |
234 |
248 |
249 |
250 |
251 |
252 |
253 |
254 |
255 |
256 |
257 |
258 |
259 |
260 |
261 |
262 |
263 |
264 |
265 |
--------------------------------------------------------------------------------
/XampleUI/XampleUI/Views/DribComp/CompAir.xaml.cs:
--------------------------------------------------------------------------------
1 | using System.Collections.Generic;
2 | using System.Collections.ObjectModel;
3 | using System.Linq;
4 | using System.Threading.Tasks;
5 | using Xamarin.Forms;
6 | using Xamarin.Forms.Xaml;
7 | using XampleUI.Models;
8 |
9 | namespace XampleUI.Views.DribComp
10 | {
11 | [XamlCompilation(XamlCompilationOptions.Compile)]
12 | public partial class CompAir : ContentPage
13 | {
14 | public CompAir()
15 | {
16 | InitializeComponent();
17 |
18 | PinAirlineCmd = new Command(PinAirline);
19 |
20 | ItemsComparison = new ObservableCollection(MockData());
21 | ItemsAll = new ObservableCollection(MockData());
22 | ItemsCompaPin = new ObservableCollection();
23 |
24 | BindingContext = this;
25 |
26 | //PIN JetBlue to start
27 | PinAirline(new ItemAir
28 | {
29 | Id = "2",
30 | Text = "JetBlue",
31 | Image = "itemair3.png",
32 | SeatPitch = "33",
33 | SeatWidth = "18",
34 | Wifi = "icon_check.png",
35 | Entertainment = "icon_check.png",
36 | InSeatPower = "icon_check.png",
37 | SeatSelection = "icon_check.png",
38 | LoyaltyTiers = "1",
39 | CheckedBags = "icon_dollar.png",
40 | PointsExpiration = "Never"
41 | });
42 | }
43 |
44 | public ItemAir CurrentLeftItem { get; set; }
45 | public ItemAir CurrentRightItem { get; set; }
46 | public bool IsNotOriginalPostion => !IsOriginalPostion;
47 | public bool IsOriginalPostion { get; set; } = true;
48 | public ObservableCollection ItemsAll { get; private set; }
49 | public ObservableCollection ItemsCompaPin { get; private set; }
50 | public ObservableCollection ItemsComparison { get; private set; }
51 | public Command PinAirlineCmd { get; }
52 |
53 | private void ChangeState()
54 | {
55 | IsOriginalPostion = !IsOriginalPostion;
56 | OnPropertyChanged(nameof(IsOriginalPostion));
57 | OnPropertyChanged(nameof(IsNotOriginalPostion));
58 | }
59 |
60 | private List MockData() => new List()
61 | {
62 | new ItemAir {
63 | Id = "0",
64 | Text = "Southwest",
65 | Image="itemair1.png",
66 | SeatPitch="32",
67 | SeatWidth="17",
68 | Wifi="icon_dollar.png",
69 | Entertainment="",
70 | InSeatPower="",
71 | SeatSelection="",
72 | LoyaltyTiers="2",
73 | CheckedBags="icon_check.png",
74 | PointsExpiration="24-month" },
75 | new ItemAir { Id = "1",
76 | Text = "VgAmerica",
77 | Image="itemair2.png",
78 | SeatPitch="33",
79 | SeatWidth="17",
80 | Wifi="icon_check.png",
81 | Entertainment="icon_check.png",
82 | InSeatPower="icon_check.png",
83 | SeatSelection="icon_check.png",
84 | LoyaltyTiers="2",
85 | CheckedBags="icon_dollar.png",
86 | PointsExpiration="18-month" },
87 | new ItemAir { Id = "2",
88 | Text = "JetBlue",
89 | Image="itemair3.png",
90 | SeatPitch="33",
91 | SeatWidth="18",
92 | Wifi="icon_check.png",
93 | Entertainment="icon_check.png",
94 | InSeatPower="icon_check.png",
95 | SeatSelection="icon_check.png",
96 | LoyaltyTiers="1",
97 | CheckedBags="icon_dollar.png",
98 | PointsExpiration="Never" },
99 | new ItemAir { Id = "3",
100 | Text = "HAWAIIAN",
101 | Image="itemair4.png",
102 | SeatPitch="30",
103 | SeatWidth="18",
104 | Wifi="",
105 | Entertainment="",
106 | InSeatPower="",
107 | SeatSelection="icon_check.png",
108 | LoyaltyTiers="2",
109 | CheckedBags="icon_dollar.png",
110 | PointsExpiration="18-month" },
111 | new ItemAir { Id = "4",
112 | Text = "DELTA",
113 | Image="itemair5.png",
114 | SeatPitch="32",
115 | SeatWidth="17",
116 | Wifi="icon_dollar.png",
117 | Entertainment="",
118 | InSeatPower="icon_check.png",
119 | SeatSelection="icon_dollar.png",
120 | LoyaltyTiers="2",
121 | CheckedBags="icon_dollar.png",
122 | PointsExpiration="Never" },
123 | };
124 |
125 | private async void PinAirline(ItemAir obj)
126 | {
127 | ItemsComparison = new ObservableCollection(MockData());
128 | ItemsComparison.Remove(ItemsComparison.Where(i => i.Id == obj.Id).Single());
129 | ItemsCompaPin.Clear();
130 | ItemsCompaPin.Add(obj);
131 |
132 | uint duration = 200;
133 |
134 | if (IsOriginalPostion)
135 | {
136 | LeftList.ItemsSource = ItemsComparison;
137 | RightList.ItemsSource = ItemsCompaPin;
138 | ChangeState();
139 |
140 | await Task.WhenAll(
141 | LeftFrame.TranslateTo(124, 0, duration, Easing.CubicIn),
142 | RightFrame.TranslateTo(-124, 0, duration, Easing.CubicIn)
143 | );
144 | }
145 | else
146 | {
147 | RightList.ItemsSource = ItemsComparison;
148 | LeftList.ItemsSource = ItemsCompaPin;
149 | ChangeState();
150 |
151 | await Task.WhenAll(
152 | LeftFrame.TranslateTo(0, 0, duration, Easing.CubicIn),
153 | RightFrame.TranslateTo(0, 0, duration, Easing.CubicIn)
154 | );
155 | }
156 | }
157 | }
158 | }
--------------------------------------------------------------------------------
/XampleUI/XampleUI/Views/DribGrocs/GrocDetail.xaml:
--------------------------------------------------------------------------------
1 |
2 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
21 |
22 |
23 |
24 |
30 |
35 |
36 |
41 |
42 |
43 |
44 |
53 |
54 |
65 |
72 |
83 |
84 |
89 |
90 |
91 |
97 |
98 |
102 |
103 |
104 |
105 |
109 |
110 |
120 |
125 |
126 |
137 |
138 |
139 |
--------------------------------------------------------------------------------
/XampleUI/XampleUI/Views/DribGrocs/GrocDetail.xaml.cs:
--------------------------------------------------------------------------------
1 | using Xamarin.Forms;
2 | using Xamarin.Forms.Xaml;
3 | using XampleUI.ViewModels.Groc;
4 |
5 | namespace XampleUI.Views.DribGrocs
6 | {
7 | [XamlCompilation(XamlCompilationOptions.Compile)]
8 | public partial class GrocDetail : ContentPage
9 | {
10 | public GrocDetail()
11 | {
12 | InitializeComponent();
13 | var vm = new GrocDetailViewModel();
14 | vm.Navigation = Navigation;
15 | BindingContext = vm;
16 | }
17 |
18 | private void TapGestureRecognizer_Tapped(object sender, System.EventArgs e)
19 | {
20 | Navigation.PopAsync();
21 | }
22 | }
23 | }
--------------------------------------------------------------------------------
/XampleUI/XampleUI/Views/DribGrocs/GrocList.xaml:
--------------------------------------------------------------------------------
1 |
2 |
12 |
13 |
17 |
22 |
27 |
28 |
29 |
88 |
89 |
90 |
95 |
100 |
101 |
102 |
103 |
104 |
108 |
109 |
110 |
111 |
119 |
125 |
126 |
127 |
128 |
129 |
130 |
134 |
139 |
145 |
146 |
147 |
148 |
149 |
150 |
158 |
167 |
168 |
169 |
170 |
171 |
172 |
173 |
174 |
175 |
183 |
189 |
190 |
191 |
197 |
198 |
205 |
206 |
207 |
212 |
217 |
218 |
219 |
220 |
221 |
222 |
223 |
230 |
231 |
239 |
240 |
241 |
242 |
243 |
244 |
245 |
246 |
252 |
253 |
254 |
259 |
264 |
265 |
266 |
267 |
268 |
274 |
275 |
276 |
282 |
283 |
284 |
285 |
292 |
299 |
300 |
301 |
309 |
310 |
311 |
312 |
--------------------------------------------------------------------------------
/XampleUI/XampleUI/Views/DribGrocs/GrocList.xaml.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Threading.Tasks;
3 | using Xamarin.Forms;
4 | using Xamarin.Forms.Xaml;
5 | using XampleUI.Models;
6 | using XampleUI.ViewModels.Groc;
7 |
8 | namespace XampleUI.Views.DribGrocs
9 | {
10 | [XamlCompilation(XamlCompilationOptions.Compile)]
11 | public partial class GrocList : ContentPage
12 | {
13 | private int _index;
14 | private GrocsViewModel _viewModel;
15 |
16 | public GrocList()
17 | {
18 | InitializeComponent();
19 |
20 | BindingContext = _viewModel = new GrocsViewModel();
21 | }
22 |
23 | protected override void OnAppearing()
24 | {
25 | base.OnAppearing();
26 | _viewModel.OnAppearing();
27 |
28 | var list = _viewModel.Grocs;
29 | if (list is null)
30 | {
31 | return;
32 | }
33 |
34 | var box = new BoxView { CornerRadius = 10, HeightRequest = 56 };
35 | RightLane.Children.Add(box);
36 |
37 | foreach (var item in list)
38 | {
39 | AddItemLayout(item, _index);
40 | _index++;
41 | }
42 | }
43 |
44 | private void AddItemLayout(Item item, int index)
45 | {
46 | int _baseIndex = index / 2;
47 | var _flagRight = Convert.ToBoolean(index % 2);
48 |
49 | var lane = _flagRight ? RightLane : LeftLane;
50 |
51 | var frame = new Frame { HeightRequest = 272, Margin = 8, Padding = 0, CornerRadius = 10 };
52 | var stack = new StackLayout { Padding = 22, BackgroundColor = Color.White };
53 |
54 | var image = new Image { Source = item.Image, HeightRequest = 88, HorizontalOptions = LayoutOptions.Center, Margin = new Thickness(0, 16) };
55 | var labelPrice = new Label { Margin = new Thickness(0, 10), FontAttributes = FontAttributes.Bold, FontSize = 22, Text = "$" + item.Price, TextColor = Color.FromHex("#333333") };
56 | var labelText = new Label { FontAttributes = FontAttributes.Bold, FontSize = 14, Text = item.Text, TextColor = Color.FromHex("#333333") };
57 | var labelSize = new Label { LineBreakMode = LineBreakMode.NoWrap, FontSize = 13, Text = item.Size, TextColor = Color.FromHex("#CCCCCC") };
58 |
59 | stack.Children.Add(image);
60 | stack.Children.Add(labelPrice);
61 | stack.Children.Add(labelText);
62 | stack.Children.Add(labelSize);
63 | frame.Content = stack;
64 | lane.Children.Add(frame);
65 |
66 | var tap = new TapGestureRecognizer();
67 | tap.Tapped += async (object sender, EventArgs e) =>
68 | {
69 | await Shell.Current.GoToAsync($"{nameof(GrocDetail)}?{nameof(GrocDetailViewModel.ItemId)}={item.Id}");
70 | };
71 | stack.GestureRecognizers.Add(tap);
72 | }
73 |
74 | private async void SwipeToShowCart(object sender, SwipedEventArgs e)
75 | {
76 | uint duration = 700;
77 |
78 | await Task.WhenAll(
79 | CartPreviewContainer.FadeTo(0, 500),
80 | RootContainer.TranslateTo(0, -540, duration, Easing.CubicIn),
81 | CartContainer.TranslateTo(0, -110, duration, Easing.CubicIn)
82 | );
83 | }
84 |
85 | private async void SwipeToShowList(object sender, SwipedEventArgs e)
86 | {
87 | uint duration = 700;
88 |
89 | await Task.WhenAll(
90 | CartPreviewContainer.FadeTo(1, 500),
91 | RootContainer.TranslateTo(0, 0, duration, Easing.CubicOut),
92 | CartContainer.TranslateTo(0, 0, duration, Easing.CubicOut)
93 | );
94 | }
95 | }
96 | }
--------------------------------------------------------------------------------
/XampleUI/XampleUI/Views/XFShell/AboutPage.xaml:
--------------------------------------------------------------------------------
1 |
2 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 | #96d1ff
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
29 |
33 |
34 |
40 |
41 |
42 |
43 |
44 |
48 |
49 |
53 |
63 |
69 |
75 |
76 |
77 |
78 |
79 |
80 |
--------------------------------------------------------------------------------
/XampleUI/XampleUI/Views/XFShell/AboutPage.xaml.cs:
--------------------------------------------------------------------------------
1 | using Xamarin.Forms;
2 |
3 | namespace XampleUI.Views.XFShell
4 | {
5 | public partial class AboutPage : ContentPage
6 | {
7 | public AboutPage()
8 | {
9 | InitializeComponent();
10 | }
11 | }
12 | }
--------------------------------------------------------------------------------
/XampleUI/XampleUI/Views/XFShell/AboutTransitionPage.xaml:
--------------------------------------------------------------------------------
1 |
2 |
9 |
10 |
11 |
12 |
13 |
14 |
18 |
19 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/XampleUI/XampleUI/Views/XFShell/AboutTransitionPage.xaml.cs:
--------------------------------------------------------------------------------
1 | using Xamarin.Forms;
2 | using Xamarin.Forms.Xaml;
3 |
4 | namespace XampleUI.Views.XFShell
5 | {
6 | [XamlCompilation(XamlCompilationOptions.Compile)]
7 | public partial class AboutTransitionPage : ContentPage
8 | {
9 | public AboutTransitionPage()
10 | {
11 | InitializeComponent();
12 | }
13 |
14 | private void Button_Clicked(object sender, System.EventArgs e)
15 | {
16 | //Shell.Current.GoToAsync("..");
17 | Navigation.PopAsync();
18 | }
19 | }
20 | }
--------------------------------------------------------------------------------
/XampleUI/XampleUI/Views/XFShell/ItemDetailPage.xaml:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/XampleUI/XampleUI/Views/XFShell/ItemDetailPage.xaml.cs:
--------------------------------------------------------------------------------
1 | using System.ComponentModel;
2 | using Xamarin.Forms;
3 | using XampleUI.ViewModels.XFShell;
4 |
5 | namespace XampleUI.Views.XFShell
6 | {
7 | public partial class ItemDetailPage : ContentPage
8 | {
9 | public ItemDetailPage()
10 | {
11 | InitializeComponent();
12 | BindingContext = new ItemDetailViewModel();
13 | }
14 |
15 | private void Button_Clicked(object sender, System.EventArgs e)
16 | {
17 | //NavigationPage.Push(new Page2());
18 | }
19 | }
20 | }
--------------------------------------------------------------------------------
/XampleUI/XampleUI/Views/XFShell/ItemsPage.xaml:
--------------------------------------------------------------------------------
1 |
2 |
11 |
12 |
13 |
14 |
15 |
19 |
23 |
24 |
29 |
30 |
34 |
35 |
36 |
37 |
41 |
46 |
51 |
56 |
57 |
61 |
62 |
63 |
64 |
65 |
66 |
70 |
77 |
78 |
79 |
80 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
--------------------------------------------------------------------------------
/XampleUI/XampleUI/Views/XFShell/ItemsPage.xaml.cs:
--------------------------------------------------------------------------------
1 | using Xamarin.Forms;
2 | using XampleUI.ViewModels.XFShell;
3 |
4 | namespace XampleUI.Views.XFShell
5 | {
6 | public partial class ItemsPage : ContentPage
7 | {
8 | private ItemsViewModel _viewModel;
9 |
10 | public ItemsPage()
11 | {
12 | InitializeComponent();
13 |
14 | BindingContext = _viewModel = new ItemsViewModel();
15 | }
16 |
17 | protected override void OnAppearing()
18 | {
19 | base.OnAppearing();
20 | _viewModel.OnAppearing();
21 | }
22 | }
23 | }
--------------------------------------------------------------------------------
/XampleUI/XampleUI/Views/XFShell/NewItemPage.xaml:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
10 |
11 |
12 |
13 |
18 |
19 |
23 |
27 |
28 |
29 |
30 |
31 |
32 |
--------------------------------------------------------------------------------
/XampleUI/XampleUI/Views/XFShell/NewItemPage.xaml.cs:
--------------------------------------------------------------------------------
1 | using Xamarin.Forms;
2 |
3 | using XampleUI.Models;
4 | using XampleUI.ViewModels.XFShell;
5 |
6 | namespace XampleUI.Views.XFShell
7 | {
8 | public partial class NewItemPage : ContentPage
9 | {
10 | public Item Item { get; set; }
11 |
12 | public NewItemPage()
13 | {
14 | InitializeComponent();
15 | BindingContext = new NewItemViewModel();
16 | }
17 | }
18 | }
--------------------------------------------------------------------------------
/XampleUI/XampleUI/XampleUI.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | netstandard2.0
5 | true
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 | CardList.xaml
17 |
18 |
19 | CardTransaction.xaml
20 |
21 |
22 | CakeDetail.xaml
23 |
24 |
25 |
26 |
27 |
28 | MSBuild:UpdateDesignTimeXaml
29 |
30 |
31 | MSBuild:UpdateDesignTimeXaml
32 |
33 |
34 | MSBuild:UpdateDesignTimeXaml
35 |
36 |
37 | MSBuild:UpdateDesignTimeXaml
38 |
39 |
40 | MSBuild:UpdateDesignTimeXaml
41 |
42 |
43 | MSBuild:UpdateDesignTimeXaml
44 |
45 |
46 | MSBuild:UpdateDesignTimeXaml
47 |
48 |
49 | MSBuild:UpdateDesignTimeXaml
50 |
51 |
52 | MSBuild:UpdateDesignTimeXaml
53 |
54 |
55 |
--------------------------------------------------------------------------------