xamarin.forms之使用CarouselView插件模仿网易新闻导航
在APP中基本都能见到类似网易、今日头条等上边横向导航条,下边是左右滑动的页面,之前做iOS的时候模仿实现过,https://github.com/ywcui/ViewPagerndicator,在做xamarin.forms的时候看到xamarin.form自带的有左右滑动的CarouselPage和CarouselView,想着实现今日头条导航会容易些,当自己尝试实现的时候发现CarouselPage页面无法设置顶部导航的部分,子控件需要是page,CarouselView可以设置顶部导航部分但左右滑动没有找到触发的事件,这个问题在开始做APP的时候就一直在思考。今天下午和小伙伴讨论这个功能时临时起意尝试使用第三方插件CarouselView.FormsPlugin来实现,这个插件之前也尝试用过,不过当时没解决,经过小伙伴一提醒没想到实现了,这里记录一下实现方法。
一、Nuget引入第三方
这里使用了第三方的插件CarouselView.FormsPlugin(https://github.com/alexrainman/CarouselView)和面包屑Toast,CarouselView.FormsPlugin主要是实现左右滑动视图,Toast面包屑主要是用来显示当前视图的索引。

二、使用CarouselView.FormsPlugin
这个插件直接也了解过,当时直接把github上的demo下载下来,尝试复制粘贴完事,可demo上没有,这就尴尬了,想复制粘贴没有。今天和小伙伴讨论之后又打开github详细查看了下使用说明,找到下面这句话和demo,于是就动手尝试了下CarouselView设置不同的Views。

1.安卓项目引入CarouselView.FormsPlugin
只需通过nuget上引入并在MainActivity.cs中如下代码。
global::Xamarin.Forms.Forms.Init(this, savedInstanceState);
CarouselViewRenderer.Init();
2.在page页面使用CarouselView.FormsPlugin
这里在xamarin.forms的MainPage中引入使用,需要在页面的ContentPage节点设置属性。
xmlns:controls="clr-namespace:CarouselView.FormsPlugin.Abstractions;assembly=CarouselView.FormsPlugin.Abstractions"
然后使用起来也比较简单,直接设置CarouselViewControl即可,然后在cs类中设置它的ItemsSource。
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:ViewPagerndicator"
x:Class="ViewPagerndicator.MainPage"
xmlns:controls="clr-namespace:CarouselView.FormsPlugin.Abstractions;assembly=CarouselView.FormsPlugin.Abstractions"
>
<StackLayout>
<StackLayout Orientation=">
<Button Margin="></Button>
<Button Margin="></Button>
<Button Margin="></Button>
<Button Margin="></Button>
</StackLayout>
<controls:CarouselViewControl Position=" x:Name="carouselView" VerticalOptions="FillAndExpand" HorizontalOptions="FillAndExpand"/>
</StackLayout>
</ContentPage>
CarouselViewControl有PositionSelected事件,在事件中可以获取到当前页面的索引,这里使用Toast将索引值弹出。同时又设置了几个按钮来模拟横向导航栏的点击事件。而在点击按钮时也可以设置CarouselViewControl的Position改变视图。
using Plugin.Toast;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Xamarin.Forms;
namespace ViewPagerndicator
{
public partial class MainPage : ContentPage
{
public MainPage()
{
InitializeComponent();
carouselView.ItemsSource = new List<DataTemplate>(){
new DataTemplate(() => { return new PageA().Content; }),
new DataTemplate(() => { return new PageB().Content; }),
new DataTemplate(() => { return new PageC().Content; }),
new DataTemplate(() => { return new PageC().Content; })
};
carouselView.PositionSelected += CarouselView_PositionSelected;
}
private void CarouselView_PositionSelected(object sender, CarouselView.FormsPlugin.Abstractions.PositionSelectedEventArgs e)
{
CrossToastPopUp.Current.ShowToastSuccess(e.NewValue.ToString());
}
private void BtnDemo_Clicked(object sender, EventArgs e)
{
Button btn = (Button)sender;
List<string> arr = new List<string> { "推荐", "热点", "抖音", "国内" };
int index = arr.ToList<string>().LastIndexOf(btn.Text);
carouselView.Position = index;
}
}
}
为了测试导航栏部分是否影响page页面渲染,这里在app类中还加了导航栏。
MainPage =new NavigationPage( new MainPage());
三、测试
这里先贴几个页面,当页面左右滑动时会弹出当前页面的索引值,顶部按钮点击时下面的页面也会联动。

四、优化
目前只是实现了底部页面左右滑动以及顶部按钮点击切换页面,还有需要优化的地方,和人一样,需要不断优化,改掉缺点,补足短板。后续可以把顶部导航的使用横向列表来实现,这样就可以左右滑动,动态配置参数。这个功能实现之后好几个页面都能实现了,甚至自己都可以爬虫不同新闻客户端的内容,实现新闻聚合。
五、瞎扯淡
最近俺们村里的微信群都已经有使用区块链的热点来拉投资的了,而且33天就能回本,忽悠手段日益更新。目前在创业公司,自己也快三十而立,最近也一直在思考创业的事情,假如未来创业我需要在这几年做哪些准备,方向是什么,to be or not to be,that's a question。快清明放假了,也给大家分享一个很有前景的创业项目,而且支付宝的技术人员十几年都未解决的技术难题,现在都是无现金社会了,就是清明节烧纸钱能否也实现无现金转账,就是不知道怎么转过去,收款人账户是多少。
xamarin.forms之使用CarouselView插件模仿网易新闻导航的更多相关文章
- Xamarin.Forms弹出对话框插件
微信公众号:Dotnet9,网站:Dotnet9,问题或建议,请网站留言: 如果您觉得Dotnet9对您有帮助,欢迎赞赏. Xamarin.Forms弹出对话框插件 内容目录 实现效果 业务场景 编码 ...
- 老司机学新平台 - Xamarin Forms开发框架之MvvmCross插件精选
在前两篇老司机学Xamarin系列中,简单介绍了Xamarin开发环境的搭建以及Prism和MvvmCross这两个开发框架.不同的框架,往往不仅仅使用不同的架构风格,同时社区活跃度不同,各种功能模块 ...
- Xamarin.Forms入门-使用 Xamarin.Forms 来创建跨平台的用户界面
Xamarin.Forms 是一个跨平台的.基于原生控件的UI工具包,开发人员可以轻松的创建适用于 Android,iOS 以及 Windows Phone的用户界面.Xamarin.Forms 通过 ...
- Xamarin.Forms之页面及导航
参考链接: Xamarin. Forms 页面 Xamarin.Forms 导航 Xamarin.Forms 第04局:页面 Xamarin.Forms页面代表跨平台的移动应用程序屏幕. 下文描述的所 ...
- Android Studio精彩案例(四)《DrawerLayout使用详解仿网易新闻客户端侧边栏 》
转载本专栏文章,请注明出处,尊重原创 .文章博客地址:道龙的博客 为了提高兴趣,咱们开头先看看最终要实现什么样的效果: 侧拉菜单在Android应用中非常常见,它的实现方式太多了,今天我们就说说使用G ...
- Android Studio精彩案例(一)《ActionBar和 ViewPager版仿网易新闻客户端》
转载本专栏文章,请注明出处,尊重原创 .文章博客地址:道龙的博客 为了能更好的分享高质量的文章,所以开设了此专栏.文章代码都以Android Studio亲测运行,读者朋友可在后面直接下载源码.该专栏 ...
- Xamarin.Forms 开发资源集合(复制)
复制:https://www.cnblogs.com/mschen/p/10199997.html 收集整理了下 Xamarin.Forms 的学习参考资料,分享给大家,稍后会不断补充: UI样式 S ...
- Xamarin.Forms 开发资源集合
收集整理了下 Xamarin.Forms 的学习参考资料,分享给大家,稍后会不断补充: UI样式 Snppts: Xamarin Forms UI Snippets. Prebuilt Templat ...
- 老司机学新平台 - Xamarin Forms开发框架二探 (Prism vs MvvmCross)
在上一篇Xamarin开发环境及开发框架初探中,曾简单提到MvvmCross这个Xamarin下的开发框架.最近又评估了一些别的,发现老牌Mvvm框架Prism现在也支持Xamarin Forms了, ...
随机推荐
- php调用c/c++时 passthru()被禁用问题
passthru被禁用,需要编辑php.ini文件 disable_functions = scandir,passthru,exec,system,chroot,chgrp,chown,shell_ ...
- Oracle数据库在plsql中文乱码,显示问号????
1.错误显示结果: 2.错误的原因: SqlPlus乱码与操作系统用户中的NLS_LANG这个环境变量有关系,如果这个与数据库字符集不一致的话就会产生乱码 3.解决方法1:(配置环境变量) 1.sel ...
- hive-issue-inserting-records-to-partitioned-table
hive-issue-inserting-records-to-partitioned-table Hi Sam, Recently we upgraded our cluster from HDP2 ...
- python从入门到实践-8章函数
#!/user/bin/env python# -*- coding:utf-8 -*- # 给形参指定默认值时,等号两边不要有空格 def function_name("parameter ...
- 5 个免费的受欢迎的 SQLite 管理工具【申明:来源于网络】
5 个免费的受欢迎的 SQLite 管理工具 包含内容: SQLite Expert – Personal Edition SQLite Expert 提供两个版本,分别是个人版和专业版.其中个人版是 ...
- [Swift]LeetCode34. 在排序数组中查找元素的第一个和最后一个位置 | Find First and Last Position of Element in Sorted Array
Given an array of integers nums sorted in ascending order, find the starting and ending position of ...
- [Swift]LeetCode302. 包含黑色像素的最小矩形 $ Smallest Rectangle Enclosing Black Pixels
An image is represented by a binary matrix with 0 as a white pixel and 1 as a black pixel. The black ...
- python编译pyc工程--导包问题解决
利用python 编译工程,生产pyc文件 pyc文件好处:是一种二进制机器码,并且隐藏了源文件代码,但是有和py文件一样的功能(可以理解为效果一样) 所以可以将代码隐藏,便于商业价值,保护代码隐私还 ...
- 课程五(Sequence Models),第三周(Sequence models & Attention mechanism) —— 2.Programming assignments:Trigger word detection
Expected OutputTrigger Word Detection Welcome to the final programming assignment of this specializa ...
- SignalR学习笔记(三)Self-Host
SignalR可以借助Owin摆脱对IIS的依赖,实现Self-Host,使得SignalR有了部署在非Windows平台的可能. 什么是Owin Owin的英文全称是Open Web Interfa ...