Wednesday, May 15, 2013

Android View Pager

Android custom view pager for disabling default switch activity

Step 1.
PageViewActivity.java



import java.util.ArrayList;
import java.util.List;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.view.ViewPager.SimpleOnPageChangeListener;
import android.util.Log;
import android.view.View;

public class PageViewActivity extends FragmentActivity {
    MyPageAdapter pageAdapter;
    int pageId=0;
    CustomViewPager pager;
    PageListener pageListener;
    int currentPage=0;
    @Override
    public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
      List<Fragment> fragments = getFragments();
      pageAdapter = new MyPageAdapter(getSupportFragmentManager(), fragments);
      pager =(CustomViewPager)findViewById(R.id.viewpager);
      pager.setAdapter(pageAdapter);
      pager.setPagingEnabled(false);
     
      pageListener = new PageListener();
      pager.setOnPageChangeListener(pageListener);
     
    }
   
    private List<Fragment> getFragments(){
     List<Fragment> fList = new ArrayList<Fragment>();
   
     fList.add(MyFragment.newInstance("Fragment 1"));
     fList.add(MyFragment.newInstance("Fragment 2"));
     fList.add(MyFragment.newInstance("Fragment 3"));
     return fList;
    }
   
    public void next(View v){
    if(pageId<=2)
    {
    pager.setCurrentItem(pageId);
    }
    pageId++;
   
    }
   
    private class PageListener extends SimpleOnPageChangeListener{
        public void onPageSelected(int position) {
            Log.i("test", "onPageSelected " + position);
            currentPage = position;
         }
        //Called when the scroll state changes.
        public void onPageScrollStateChanged(int state)
        {
       
        }
       
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels)
        {
        Log.i("test", "onPageScrolled " + position);
            currentPage = position;
        }
    }
   

  }


Step 2.
MyPageAdapter .java


import java.util.List;

import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;

class MyPageAdapter extends FragmentPagerAdapter {
 private List<Fragment> fragments;

 public MyPageAdapter(FragmentManager fm, List<Fragment> fragments) {
   super(fm);
   this.fragments = fragments;
 }
 @Override
 public Fragment getItem(int position) {
   return this.fragments.get(position);
 }

 @Override
 public int getCount() {
   return this.fragments.size();
 }
}

Step 3.
MyFragment.java


import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

public class MyFragment extends Fragment {
public static final String EXTRA_MESSAGE = "EXTRA_MESSAGE";

public static final MyFragment newInstance(String message)
{
  MyFragment f = new MyFragment();
  Bundle bdl = new Bundle(1);
  bdl.putString(EXTRA_MESSAGE, message);
  f.setArguments(bdl);
  return f;
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
  Bundle savedInstanceState) {
  String message = getArguments().getString(EXTRA_MESSAGE);
  View v = inflater.inflate(R.layout.myfragment_layout, container, false);
  TextView messageTextView = (TextView)v.findViewById(R.id.textView);
  messageTextView.setText(message);

  return v;
}
}

Step 4.
CustomViewPager.java


import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;

public class CustomViewPager extends android.support.v4.view.ViewPager {
private boolean enabled;
public CustomViewPager(Context context, AttributeSet attrs) {
         super(context, attrs);
         this.enabled = true;
    }

@Override
public boolean onTouchEvent(MotionEvent event) {
if (this.enabled) {
        return super.onTouchEvent(event);
}

return false;
}

@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
        if (this.enabled) {
                return super.onInterceptTouchEvent(event);
        }

        return false;
}

/**
 * Custom implementation to enable or not swipe :)
 *
 * @param enabled
 *            true to enable swipe, false otherwise.
 */
public void setPagingEnabled(boolean enabled) {
        this.enabled = enabled;
}

}

Step 5.
activity_main.xml


<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" >

   <com.example.viewpagerdemo.CustomViewPager
     android:id="@+id/viewpager"
     android:layout_width="fill_parent"
     android:layout_height="fill_parent" />

</RelativeLayout>

Step 6.
myfragment_layout.xml


<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:orientation="vertical" >
  <TextView
    android:id="@+id/textView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true"
    android:layout_centerVertical="true"
    />
  <Button
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Next"
      android:onClick="next"
      />

</RelativeLayout>

http://architects.dzone.com/articles/android-tutorial-using
http://blog.evoxmusic.fr/content/android-how-disable-viewpager-page-switch

No comments:

Post a Comment