Есть ли способ отключить перелистывание между страницей с вкладками на Android в Xamarin Native android? - PullRequest
0 голосов
/ 30 мая 2018

Я новичок в xamarin и пытаюсь отключить смахивание, создав пользовательский Viewpager, но не могу найти интерфейс сенсорного прослушивания в Viewpager.Есть ли способ сделать это?

public class CustomViewPager : ViewPager   
 {
        Context _context;

        public CustomViewPager(Context context) : base(context)
        {
            _context = context;
        }

        public CustomViewPager(Context context, IAttributeSet arg1) : base(context, arg1)
        {
            _context = context;
        }

        public bool IsPagerDisabled { get; set; }

        /*public override Boolean OnTouchEvent(MotionEvent event)
        {
            if (!IsPagerDisabled)
            {
                return base.OnTouchEvent(event);
            }
            else
            {
                return false;
            }
        }*/
    }

Ответы [ 3 ]

0 голосов
/ 30 мая 2018

Я недавно сделал похожую реализацию, и это похоже на чудо:

using Android.Content;
using Android.Support.V4.View;
using Android.Views;

public class LockableViewPager : ViewPager
{
    public bool SwipeLocked { get; set; }

    Context mContext;

    public LockableViewPager(Context context) : base(context)
    {
        Init(context, null);
    }
    public LockableViewPager(Context context, Android.Util.IAttributeSet attrs) : base(context, attrs)
    {
        Init(context, attrs);
    }
    private void Init(Context ctx, Android.Util.IAttributeSet attrs)
    {
        mContext = ctx;
    }

    public override bool OnTouchEvent(MotionEvent ev)
    {
        return !SwipeLocked && base.OnTouchEvent(ev);
    }

    public override bool OnInterceptTouchEvent(MotionEvent e)
    {
        return !SwipeLocked && base.OnInterceptTouchEvent(e);
    }

    public override bool CanScrollHorizontally(int direction)
    {
        return !SwipeLocked && base.CanScrollHorizontally(direction);
    }

}

Как его использовать?

В xml:

<_yourNameSpace.LockableViewPager 
  auto:SwipeLocked="true"

, где auto -

xmlns:auto="http://schemas.android.com/apk/res-auto"

В коде:

LockableViewPager viewpager= new LoackableViewpager();
Viewpager.SwipeLocked=true;
0 голосов
/ 16 января 2019

Я решил назвать атрибут " ScrollEnabled ".Потому что iOS просто использует одинаковые имена.Таким образом, у вас одинаковое наименование на обеих платформах, что облегчает работу разработчиков.

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.Util;

namespace YourNameSpace.ViewPackage {

    // Need to disable swiping for ViewPager, if user performs Pre DSA and the dsa is not completed yet
    // /6267611/kak-otklychit-peidzhing-provodya-paltsem-v-viewpager-no-vse-zhe-imet-vozmozhnost-provodit-programmno
    public class CustomViewPager: ViewPager {
        public bool ScrollEnabled;

        public CustomViewPager(Context context, IAttributeSet attrs) : base(context, attrs) {
            this.ScrollEnabled = true;
        }

        public override bool OnTouchEvent(MotionEvent e) {
            if (this.ScrollEnabled) {
                return base.OnTouchEvent(e);
            }
            return false;
        }

        public override bool OnInterceptTouchEvent(MotionEvent e) {
            if (this.ScrollEnabled) {
                return base.OnInterceptTouchEvent(e);
            }
            return false;
        }

        // For ViewPager inside another ViewPager
        public override bool CanScrollHorizontally(int direction) {
            return this.ScrollEnabled && base.CanScrollHorizontally(direction);
        }

        // Some devices like the Galaxy Tab 4 10' show swipe buttons where most devices never show them
        // So, you could still swipe through the ViewPager with your keyboard keys
        public override bool ExecuteKeyEvent(KeyEvent evt) {
            return this.ScrollEnabled ? base.ExecuteKeyEvent(evt) : false;
        }
    }
}

В файле .axml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
  <YourNameSpace.ViewPackage.CustomViewPager
      android:id="@+id/pager"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:background="@android:color/white"
      android:layout_alignParentTop="true" />
</LinearLayout>
0 голосов
/ 30 мая 2018

Вы должны написать класс для этого, как показано ниже.

public class OnTouchListener : Java.Lang.Object, View.IOnTouchListener
{
    ViewPager pager;

    public OnTouchListener(ViewPager _pager)
    {
        pager = _pager;
    }
    public bool OnTouch(View v, MotionEvent e)
    {
        var view = v as ViewPager;


        pager.SetCurrentItem(0, false);


        return false;
    }
}

Затем установите этот класс в viewPager.

OnTouchListener onTouchListener = new OnTouchListener(viewPager);
viewPager.SetOnTouchListener(onTouchListener);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...