PDA

View Full Version : غیر فعال کردن swipe در view pager



sh.mahdavi
دوشنبه 22 شهریور 1395, 14:41 عصر
سلام
من میخوام از view pager برای لود کردن صفحات fragment استفاده کنم.یعنی چندتا صفحه داشته باشم وبا دستور


mViewPager.setCurrentItem(1);
بتونم به هر صفحه ای که میخوام برم اما swipe نشه کرد داخل برنامه.(با کشیدن دست ازچپ به راست یا برعکس دیگه نشه به صفحات مختلف رفت فقط با دستور بالایی که نوشتم بشه این کار رو انجام داد)

tux-world
دوشنبه 22 شهریور 1395, 15:53 عصر
از این کلاس استفاده کن


import android.content.Context;
import android.support.v4.view.ViewPager;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.animation.DecelerateInterpolator;
import android.widget.Scroller;
import java.lang.reflect.Field;

public class NonSwipeableViewPager extends ViewPager {

public NonSwipeableViewPager(Context context) {
super(context);
setMyScroller();
}

public NonSwipeableViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
setMyScroller();
}

@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
// Never allow swiping to switch between pages
return false;
}

@Override
public boolean onTouchEvent(MotionEvent event) {
// Never allow swiping to switch between pages
return false;
}

//down one is added for smooth scrolling

private void setMyScroller() {
try {
Class<?> viewpager = ViewPager.class;
Field scroller = viewpager.getDeclaredField("mScroller");
scroller.setAccessible(true);
scroller.set(this, new MyScroller(getContext()));
} catch (Exception e) {
e.printStackTrace();
}
}

public class MyScroller extends Scroller {
public MyScroller(Context context) {
super(context, new DecelerateInterpolator());
}

@Override
public void startScroll(int startX, int startY, int dx, int dy, int duration) {
super.startScroll(startX, startY, dx, dy, 350 /*1 secs*/);
}
}
}

به این شکل:


<com.yourcompany.NonSwipeableViewPager
android:id="@+id/view_pager"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1" />

sh.mahdavi
دوشنبه 22 شهریور 1395, 18:01 عصر
متاسفانه طرز استفادشو بلد نیستم ممکنه توضیح بدبد ممنون میشم

tux-world
دوشنبه 22 شهریور 1395, 20:36 عصر
کامل نوشتم طرز استفادش رو. کلاس میسازید با اون اسم و تو لای اوت هم داخل xml ویو اون خطوطی که گفتم رو قرار میدین. کجاش مشکل دارید؟؟

sh.mahdavi
سه شنبه 23 شهریور 1395, 09:19 صبح
کد های من به صورت زیر هستند:


public class MainActivity extends FragmentActivity {

ViewPager mViewPager;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mViewPager = (ViewPager) findViewById(R.id.pager);
/** set the adapter for ViewPager */
mViewPager.setAdapter(new SamplePagerAdapter(
getSupportFragmentManager()));
}

/** Defining a FragmentPagerAdapter class for controlling the fragments to be shown when user swipes on the screen. */
public class SamplePagerAdapter extends FragmentPagerAdapter {

public SamplePagerAdapter(FragmentManager fm) {
super(fm);
}

@Override
public Fragment getItem(int position) {
/** Show a Fragment based on the position of the current screen */
if (position == 0) {
return new SampleFragment();
} else
return new SampleFragmentTwo();
}

@Override
public int getCount() {
// Show 2 total pages.
return 2;
}
}

}





<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >

<android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" />

</RelativeLayout>


حالا کد هایی که شما به من دادید چطور باید استفاده کنم یا پطور کد های خودمو تغییر بدم.
ممنون از پاسخ هاتون

sh.mahdavi
سه شنبه 23 شهریور 1395, 09:21 صبح
کد های من به صورت زیر هستند:


public class MainActivity extends FragmentActivity {

ViewPager mViewPager;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mViewPager = (ViewPager) findViewById(R.id.pager);
/** set the adapter for ViewPager */
mViewPager.setAdapter(new SamplePagerAdapter(
getSupportFragmentManager()));
}

/** Defining a FragmentPagerAdapter class for controlling the fragments to be shown when user swipes on the screen. */
public class SamplePagerAdapter extends FragmentPagerAdapter {

public SamplePagerAdapter(FragmentManager fm) {
super(fm);
}

@Override
public Fragment getItem(int position) {
/** Show a Fragment based on the position of the current screen */
if (position == 0) {
return new SampleFragment();
} else
return new SampleFragmentTwo();
}

@Override
public int getCount() {
// Show 2 total pages.
return 2;
}
}

}





<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >

<android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" />

</RelativeLayout>


حالا کد هایی که شما به من دادید چطور باید استفاده کنم یا چطور کد های خودمو تغییر بدم.(کد هایی که دادی رو جایگزین کنم یا اضاف کنم؟)
ممنون از پاسخ هاتون

omidn1996
سه شنبه 23 شهریور 1395, 23:55 عصر
شما یک کلاس جدید ایجاد میکنید، کدهایی رو که دادن توی اون کلاس کپی میکنید

بعد در فایل xml به جای android.support.v4.view.ViewPager از com.yourcompany.NonSwipeableViewPager استفاده میکنید (که com.yourcompany نام پکیج شما هست) و در فایل java هم به جای ViewPager از کلاس NonSwipeableViewPager استفاده میکنید