如何在 xamarin.android 中的页面查看器中设置自动滑块 [英] How to Set auto sliders in pageviewers in xamarin.android

查看:29
本文介绍了如何在 xamarin.android 中的页面查看器中设置自动滑块的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试在我的代码中为 xamarin.android 中的页面查看器添加自动滑块,并尝试了可能的方法来做到这一点,但它无法正常工作,您能帮我将自动滑块设置为页面查看器吗?发布我上次尝试的代码,它会自动滑动一页并立即跳到最后一页.

I am trying to put auto sliders in my code for page viewers in xamarin.android and tried may ways to do that but it is not working correctly can you please help me to set up the auto slider to the page viewer i am posting my last tried code which is auto sliding one page and jumping off right away to last page.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using Android.App;
using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using Android.Support.V4.View;
using Android.Support.V4.App;
using MyApplication.Droid.Library;
using System.Timers;

namespace MyApplication.Droid.Circles
{
    [Activity(Label = "SampleCirclesSnap")]

    public class SampleCirclesSnap : FragmentActivity
    {
       public TestFragmentAdapter mAdapter;
        public ViewPager mPager;
        public PageIndicator mIndicator;
        public Timer time;
        protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate(bundle);

            SetContentView(Resource.Layout.simple_circles);

            mAdapter = new TestFragmentAdapter(SupportFragmentManager);

            mPager = FindViewById<ViewPager>(Resource.Id.pager);
            mPager.Adapter = mAdapter;
            var indicator = FindViewById<CirclePageIndicator>(Resource.Id.indicator);
            mIndicator = indicator;
            indicator.SetViewPager(mPager);
            indicator.SetSnap(true);

            time = new System.Timers.Timer();
            time.Elapsed += (sender, args) => viewPager.SetCurrentItem(CurrentItem++, true);
            time.Interval = 1000;
            time.Enabled = true;
        }
    }
}

我的片段相关代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using Android.App;
using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using Android.Support.V4.App;

using Fragment = Android.Support.V4.App.Fragment;
using FragmentManager = Android.Support.V4.App.FragmentManager;

namespace MyApplication.Droid
{
    public class TestFragmentAdapter : FragmentPagerAdapter
    {
       // public static string[] CONTENT = new string[] { "This", "Is", "A", "Test", };
        public static int[] CONTENT = new int[] { Resource.Drawable.Visa, Resource.Drawable.home_s, Resource.Drawable.Set_s, Resource.Drawable.Icon, Resource.Drawable.home_s };
        int mCount;

        public TestFragmentAdapter(FragmentManager fm) : base(fm)
        {
            mCount = CONTENT.Count();
        }

        public override Fragment GetItem(int position)
        {
            return new TestFragment(CONTENT[position % CONTENT.Count()]);
        }

        public override int Count
        {
            get
            {
                return mCount;
            }
        }

        public void SetCount(int count)
        {
            Console.WriteLine("Setting count to " + count);
            if (count > 0 && count <= 10)
            {
                mCount = count;
                NotifyDataSetChanged();
            }
        }
    }
}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using Android.App;
using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using Fragment = Android.Support.V4.App.Fragment;

namespace MyApplication.Droid
{
    class TestFragment : Fragment
    {
        private const string KEY_CONTENT = "TestFragment:Content";
        string mContent = "???";
        private int v;

        public TestFragment()
        {
        }

        public TestFragment(int v)
        {
            this.v = v;
        }

        //public TestFragment(string content)
        //{

        //    var builder = new StringBuilder();
        //    for (int i = 0; i < 20; i++)
        //    {
        //        if (i != 19)
        //            builder.Append(content).Append(" ");
        //        else
        //            builder.Append(content);
        //    }
        //    mContent = builder.ToString();

        //}

        public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
        {
            //if ((savedInstanceState != null) && savedInstanceState.ContainsKey(KEY_CONTENT))
            //{
            //    mContent = savedInstanceState.GetString(KEY_CONTENT);
            //}
            ImageView image = new ImageView(Activity);
            image.SetImageResource(v);
            //TextView text = new TextView(Activity);
            //text.Gravity = GravityFlags.Center;
            //text.Text = mContent;
            //text.TextSize = (20 * Resources.DisplayMetrics.Density);
            //text.SetPadding(20, 20, 20, 20);

            LinearLayout layout = new LinearLayout(Activity);
            layout.LayoutParameters = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.FillParent, ViewGroup.LayoutParams.FillParent);
            layout.SetGravity(GravityFlags.Center);
            layout.AddView(image);

            return layout;
        }

        public override void OnSaveInstanceState(Bundle outState)
        {
            base.OnSaveInstanceState(outState);
            outState.PutString(KEY_CONTENT, mContent);
        }
    }
}

任何人请帮助我在 xamarin android 中设置时间自动滑动浏览器的代码

anyone Please help me with the code to auto slide pageviewers on set time in xamarin android

推荐答案

我认为您需要调用将当前项目更改为 RunOnUiThread 方法的方法,以确保它将在 UI 中执行线程,例如:

I think you will need to invoke your method of changing current item to the RunOnUiThread method to ensure this it will be executed in UI thread, for example:

var timer = new System.Timers.Timer();
timer.Interval = 1000;
timer.Enabled = true;
int page = 0;
timer.Elapsed += (sender, args) =>
{
    RunOnUiThread(() =>
    {
        if (page <= viewPager.Adapter.Count)
        {
            page++;
        }
        else
        {
            page = 0;
        }
        viewPager.SetCurrentItem(page, true);
        Log.WriteLine(LogPriority.Debug, "CurrentItem:", viewPager.CurrentItem.ToString());
    });
};

在 Android 6.0 模拟器上测试:

Tested on Android 6.0 emulator:

这篇关于如何在 xamarin.android 中的页面查看器中设置自动滑块的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆