Xamarin.Android 利用作业计划程序实现ImageSwitcher图片自动定时轮播
在开发android程序时,遇到一个问题,ImageSwitcher只支持手动的切换图片,不支持自动定时的切换。因为xamarin的资料很少,官方也没有相应的教程,所以想到这个方法,利用job程序来实现后台的操作。
布局文件:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:minWidth="25px"
android:minHeight="25px"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/relativeLayout1"
android:background="#ffececec">
<ImageView
android:src="@drawable/ImgSlideLeft"
android:layout_width="50px"
android:layout_height="wrap_content"
android:id="@+id/btnFeatureLeft"
android:layout_centerVertical="true"
android:layout_alignParentLeft="true" />
<ImageSwitcher
android:minWidth="25px"
android:minHeight="25px"
android:layout_width="match_parent"
android:layout_height="638px"
android:id="@+id/SwitcherProductFeature"
android:layout_centerInParent="true" />
<ImageView
android:src="@drawable/ImgSlideRight"
android:layout_width="50px"
android:layout_height="wrap_content"
android:id="@+id/btnFeatureRight"
android:layout_centerVertical="true"
android:layout_alignParentRight="true" />
</RelativeLayout>
复制相应图片资源

后台代码:注意这里继承了GestureDetector.IOnGestureListener,监听用户的相关事件。代码中只写了 左滑和右滑事件。
[Activity(Label = "@string/app_name", Theme = "@style/AppTheme.NoActionBar", MainLauncher = true)]
public class MainActivity : AppCompatActivity, ViewSwitcher.IViewFactory, GestureDetector.IOnGestureListener
{
private GestureDetector gestureDetector = null;
private ImageSwitcher imageSwitcher;
private int[] imgs = new int[]{
Resource.Drawable.p1,
Resource.Drawable.p2,
Resource.Drawable.p3,
Resource.Drawable.p4,
Resource.Drawable.p5,
Resource.Drawable.p6
};
private int currentPosition;
public TestJobService testjobservice;
public TextView t1;
Handler handler;
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState); //关键是这里,将MainActivity传给TestJobService类
handler = new Handler((Message msg) =>
{
testjobservice = (TestJobService)msg.Obj;
testjobservice.setUiCallback(this);
}); SetContentView(Resource.Layout.activity_main);
gestureDetector = new GestureDetector(this);
imageSwitcher = FindViewById<ImageSwitcher>(Resource.Id.SwitcherProductFeature);
currentPosition = 0;
imageSwitcher.SetFactory(this);
imageSwitcher.SetImageResource(Resource.Drawable.p1); t1 = FindViewById<TextView>(Resource.Id.tv1); Intent intent = new Intent(this, typeof(TestJobService));
intent.PutExtra("messenger", new Messenger(handler));//传参
StartService(intent);
doService();
} public View MakeView()
{
ImageView img = new ImageView(this);
img.SetBackgroundColor(Android.Graphics.Color.Transparent);
img.SetScaleType(ImageView.ScaleType.FitCenter);
return img;
} public override bool OnTouchEvent(MotionEvent e)
{
return gestureDetector.OnTouchEvent(e);
} public bool OnFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY)
{
if (e2.GetX() - e1.GetX() > 100)
{
currentPosition--;
if (currentPosition < 0)
currentPosition = imgs.Length - 1;
//imageSwitcher.SetInAnimation(this, Android.Resource.Animation.FadeIn);//设置淡入动画
//imageSwitcher.SetInAnimation(this, Android.Resource.Animation.FadeOut);
imageSwitcher.SetImageResource(imgs[currentPosition]);
}
else if (e2.GetX() - e1.GetX() < -100)
{
currentPosition++;
if (currentPosition > imgs.Length - 1)
currentPosition = 0;
//imageSwitcher.SetInAnimation(this, Android.Resource.Animation.FadeIn);//设置淡入动画
//imageSwitcher.SetInAnimation(this, Android.Resource.Animation.FadeOut);
imageSwitcher.SetImageResource(imgs[currentPosition]);
}
return true;
} public bool OnDown(MotionEvent e)
{
return false;
} public void OnLongPress(MotionEvent e)
{
} public bool OnScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY)
{
return false;
} public void OnShowPress(MotionEvent e)
{
} public bool OnSingleTapUp(MotionEvent e)
{
return false;
} public override void OnRequestPermissionsResult(int requestCode, string[] permissions, [GeneratedEnum] Android.Content.PM.Permission[] grantResults)
{
Xamarin.Essentials.Platform.OnRequestPermissionsResult(requestCode, permissions, grantResults); base.OnRequestPermissionsResult(requestCode, permissions, grantResults);
} private void doService()
{
JobScheduler jobScheduler = (JobScheduler)GetSystemService(JobSchedulerService);
ComponentName componentName = new ComponentName(this, Java.Lang.Class.FromType(typeof(TestJobService)));
JobInfo jobinfo = new JobInfo.Builder(1001, componentName)
.SetPeriodic(5000) //设置每5秒钟执行一次
.Build();
jobScheduler.Schedule(jobinfo);
}
//自动切换主要在这里实现。
public void OnReceivedStartJob()
{
currentPosition++;
if (currentPosition > imgs.Length - 1)
currentPosition = 0;
imageSwitcher.SetImageResource(imgs[currentPosition]);
}
}
新建job处理类
[Service(Exported = true, Permission = "android.permission.BIND_JOB_SERVICE")]
public class TestJobService : JobService
{
public int i = 0;
MainActivity owner;
public override bool OnStartJob(JobParameters args)
{
doJob (args);
return false;
} public override bool OnStopJob(JobParameters args)
{
Log.Info("服务停止", "stop job service"); return true;
} private void doJob(JobParameters args)
{
if (args.JobId == 1001)
{
owner.OnReceivedStartJob();//返回到主线程中操作。
}
else if(args.JobId==1002)
{
//这里可以扩展第二个或第三个,根据jobiD判断
} } public void setUiCallback(MainActivity activity)
{
owner = activity;
} public override StartCommandResult OnStartCommand(Intent intent, Android.App.StartCommandFlags flags, int startId)
{
var callback = (Messenger)intent.GetParcelableExtra("messenger");
var m = Message.Obtain();
m.What = 2;//如果有多种消息,可以通过这个参数进行判断,进行不同的操作
m.Obj = this;
try
{
callback.Send(m);
}
catch (RemoteException e)
{
Log.Error("Tag", e, "Error passing service object back to activity.");
}
return StartCommandResult.NotSticky;
}
}
运行效果图

我还添加了左右两个按钮,也可以添加事件,点击切换。
官方关于Android 作业计划程序的介绍请参考以下链接。
https://learn.microsoft.com/zh-cn/xamarin/android/platform/android-job-scheduler
Xamarin.Android 利用作业计划程序实现ImageSwitcher图片自动定时轮播的更多相关文章
- Android之仿京东淘宝的自动无限轮播控件
在App的开发中,很多的时候都需要实现类似京东淘宝一样的自动无限轮播的广告栏,所以就自己写了一个,下面是我自定义控件的思路和过程. 一.自定义控件属性 新建自定义控件SliderLayout继承于Re ...
- 利用jQuery实现图片无限循环轮播(不借助于轮播插件)
原来我主要是用Bootstrap框架或者swiper插件实现轮播图的功能,而这次是用jQuery来实现图片无限循环轮播! 用到的技术有:html.css.JavaScript(少).jQuery(主要 ...
- js 实现图片间隔循环轮播以及没有间隔的循环轮播
链接地址:http://blog.sina.com.cn/s/blog_75cf5f32010199dn.html 最近做了个图片循环轮播的功能.就是几张图片不断的循环滚动显示. 感觉这个方法不错所以 ...
- iOS:实现图片的无限轮播(二)---之使用第三方库SDCycleScrollView
iOS:实现图片的无限轮播(二)---之使用第三方库SDCycleScrollView 时间:2016-01-19 19:13:43 阅读:630 评论:0 收藏:0 ...
- Android自动滚动 轮播循环的ViewPager
主要介绍如何实现ViewPager自动播放,循环滚动的效果及使用.顺便解决ViewPager嵌套(ViewPager inside ViewPager)影响触摸滑动及ViewPager滑动速度设置问题 ...
- iOS:实现图片的无限轮播---之使用第三方库SDCycleScrollView
SDCycleScrollView API // // SDCycleScrollView.h // SDCycleScrollView #import <UIKit/UIKit.h> ...
- Xamarin.Android 利用Fragment实现底部菜单
效果图: 第一步:添加引用 引用 Crosslight.Xamarin.Android.Support.v7.AppCompat 这个包. 第二步:绘制Main和Fragment界面 fg_home. ...
- 利用CSS3实现图片无间断轮播图的实现思路
前言:图片轮播效果现在在各大网站都是非常普遍的,以前我们都是通过postion的left or right来控制dom的移动,这里我要说的是利用css3来制作轮播!相比以前通过postion来移动do ...
- 【实践】纯jquery实现图片滑动无缝轮播,带左右按钮及控制按钮
在此随笔之前,博主已经做过一次图片滑动轮播,如过你也有看过就会知道里面的效果在自动轮播的时候有一个不太美观的效果,就是当最后一张图片滑动切换到第一张图片的时候会看到一个快速向左滑动的效果,这是很不美观 ...
- 响应式图片菜单式轮播,兼容手机,平板,PC
昨天在给自己用bootstrap写一个响应式主业模版时想用一个图片轮播js,看到了bootstrap里面的unslider.js,只有1.7k,很小,很兴奋,但使用到最后发现不兼容手机,当分辨率变化的 ...
随机推荐
- js判断数据类型 && 判断是否为标准json格式
/** * 1. js判断对象的好方法 * 2. 判断是否为json格式化数据 * * Author: shujun * Date: 2020-8-09 */ import {print} from ...
- [BOM]判断是否为pc页面、是否为ios页面
常用于pc页面与h5页面的跳转和适配,区分不同设备进行下载跳转区分. var is_pc = !(navigator.userAgent.match(/(phone|pad|pod|iPhone|iP ...
- 语言-页面-模板-Velocity
Velocity教程 - 简书 (jianshu.com) Velocity模板引擎详解 - Velocity 教程 | 编程字典 (codingdict.com) Velocity模板(VM)语言介 ...
- Vue CLI创建Vue2项目
1.安装Node.js * Node.js中包含了npm工具 安装后查看版本: node -v npm -v 2.设置npm的源为国内源 npm config set registry https:/ ...
- Docker--结合 Jenkins + Gitlab 完成自动化测试的持续集成实战
本文转自:https://www.cnblogs.com/poloyy/p/13971134.html 进入 Jenkins 任务的配置页面 源码管理 构建触发器 为了安全起见生成一个 token 值 ...
- fail-fast简介
转载请注明出处:http://www.cnblogs.com/skywang12345/p/3308762.html fail-fast简介(使用concurrentHashMap可以完美避免这个问题 ...
- Delphi中类的VMT
TObject是所有对象的基本类,DELPHI中的任何对象都是一个指针,这个指针指明该对象在内存中所占据的一块空间! 对象空间的头4个字节是指向该对象类的虚方法地址表(VMT-Vritual ...
- el-dropdown-item 添加点击 事件无效 (vue)
如图 无效!!! 为什么呢?? 想了一下,可能是因为 el-dropdown-item 没有自定义click事件 so! 解决办法就是 添加原生事件 : @click.native 还有 ...
- HFSS 报错汇总
多层pcb,背地共面波导微带线: 建模时如下结构:Top+diel1+diel2+diel3+diel4+diel5,参考层都应该在diel内部,否则会出现如下报错: [warning] Port r ...
- 创建vue项目时所发送错误
该错误的造成可能是以下情况: 1.所需插件可能没有安装齐全: 2.网络不好,更换网络可能会解决: 3.github无法访问,导致无法下载所需模板: (由于github是外网网站,该网站并不是每次访问都 ...