在Activity内ViewPager的自动轮播+Fragment切换

实现思路是为了防止ViewPager和Fragment的滑动冲突,要先自定义一个集成了ViewPager的类,例:MyView
其中用到了xUtils-2.4.4.jar工具包要添加到Libs里面。

MyView类

import android.content.Context;
import android.support.v4.view.ViewPager;
import android.util.AttributeSet;
import android.view.MotionEvent;
public class MyView extends ViewPager {

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

    public MyView(Context context) {
        super(context);
    }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent arg0) {
        return false;
    }
}

主类的布局里继承的是自定义类的控件:

<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.mypic.fragment.MyView
        android:id="@+id/view_Pager"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</RelativeLayout>

然后主Activity继承FragmentActivity并添加Fragment:

package com.example.mypic.fragment;



import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;

import com.example.mypic.R;

public class Activity4 extends FragmentActivity{

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
        //找到自定义类的控件
        MyView viewPager = (MyView) findViewById(R.id.view_Pager);
        //创建适配器进行适配
        viewPager.setAdapter(new FragmentPagerAdapter(
                getSupportFragmentManager()) {
            //重写里面的方法
            @Override
            public int getCount() {
                return 4;
            }

            @Override
            public Fragment getItem(int position) {
                Fragment fragment=null;
                switch (position) {
                case 0:
                    fragment=new Fragment0();

                    break;
                case 1:
                    fragment=new Fragment1();

                    break;
                case 2:

                    fragment=new Fragment2();
                    break;
                case 3:
                    fragment=new Fragment3();
                    break;

                default:
                    break;
                }
                return fragment;
            }
        });
    }
}

第一个Fragment里面的自动轮播+原点跟随变化:

package com.example.mypic.fragment;

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

import android.os.Bundle;
import android.os.Handler;
import android.support.v4.app.Fragment;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.LinearLayout.LayoutParams;

import com.example.mypic.PicAdapter;
import com.example.mypic.R;
import com.lidroid.xutils.BitmapUtils;

public class Fragment0 extends Fragment {
    //声明资源
    private ViewPager viewPager;
    private LinearLayout ll_dot;
    private String[] imageUrls;
    private List<ImageView> imageViews;
    private List<ImageView> docList;
    //创建Handler对象
    Handler handler = new Handler() {
        public void handleMessage(android.os.Message msg) {
            Log.i("++", "1");
            //定义int一个变量接收
            int currentItem = viewPager.getCurrentItem();
            currentItem ++;
            //设置currentItem
            viewPager.setCurrentItem(currentItem);

            sendEmptyMessageDelayed(0, 2000);
        };
    };

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        //设置布局文件
        View view = inflater.inflate(R.layout.activity_main, null);
        //找到控件
        viewPager = (ViewPager) view.findViewById(R.id.viewPager);
        ll_dot = (LinearLayout) view.findViewById(R.id.ll_dot);
        //网址资源(通常这里改成网络请求的图片集合)
        imageUrls = new String[] {
                "http://pic8.nipic.com/20100701/5290458_114840036316_2.jpg",
                 "http://pic2.nipic.com/20090424/1468853_230119053_2.jpg",
                 "http://img3.3lian.com/2013/s1/20/d/57.jpg",
                "http://pic39.nipic.com/20140226/18071023_164300608000_2.jpg",
                "http://a0.att.hudong.com/15/08/300218769736132194086202411_950.jpg" };
        //1.去拿图片
        getPic();


        //3.初始化圆点
        initDoc();

        //2.设置适配器
        viewPager.setAdapter(new PicAdapter(getActivity(),imageViews, handler,viewPager));


        viewPager.setCurrentItem(imageViews.size()*10000);

        handler.sendEmptyMessageDelayed(0, 2000);
        //3.viewPager的监听
        viewPager.setOnPageChangeListener(new OnPageChangeListener() {

            @Override
            public void onPageSelected(int arg0) {
                for (int i = 0; i < docList.size(); i++) {
                    if (arg0%docList.size() == i) {
                        docList.get(i).setImageResource(R.drawable.dot_focuse);
                    }else {
                        docList.get(i).setImageResource(R.drawable.dot_normal);
                    }
                }
            }

            @Override
            public void onPageScrolled(int arg0, float arg1, int arg2) {
                // TODO Auto-generated method stub

            }

            @Override
            public void onPageScrollStateChanged(int arg0) {
                // TODO Auto-generated method stub

            }
        });

        return view;
    }

    private void initDoc() {
        docList = new ArrayList<ImageView>();

        docList.clear();

        for (int i = 0; i < imageUrls.length; i++) {
            ImageView imageView = new ImageView(getActivity());
            if (i==0) {
                imageView.setImageResource(R.drawable.dot_focuse);
            }else {
                imageView.setImageResource(R.drawable.dot_normal);
            }

            LayoutParams params = new LayoutParams(10,10);
            params.setMargins(5, 0, 5, 0);

            ll_dot.addView(imageView,params);
            docList.add(imageView);
        }

    }

    private void getPic() {
        imageViews = new ArrayList<ImageView>();

        imageViews.clear();

        BitmapUtils bitmapUtils = new BitmapUtils(getActivity());
        for (int i = 0; i < imageUrls.length; i++) {
            ImageView imageView = new ImageView(getActivity());
            bitmapUtils.display(imageView, imageUrls[i]);

            imageViews.add(imageView);
        }

    }


    @Override
    public void onPause() {
        super.onPause();
        //取消 不在发消息
        handler.removeCallbacksAndMessages(null);
    }

}

第一个Fragment对象布局:

<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="200dp" >

    <android.support.v4.view.ViewPager
        android:id="@+id/viewPager"
        android:layout_width="match_parent"
        android:layout_height="200dp" />

    <LinearLayout
        android:orientation="horizontal"
        android:id="@+id/ll_dot"
        android:layout_width="match_parent"
        android:gravity="center"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@id/viewPager" >
    </LinearLayout>

</RelativeLayout>

其他Fragment的简单设置,如果有多步骤的操作,就在这里操作:

例子:1

package com.example.mypic.fragment;

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 Fragment1 extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        TextView textView = new TextView(getActivity());
        textView.setText("fragment1");
        return textView;
    }

}

例2:

(其他类推,2.3.4等)

package com.example.mypic.fragment;

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 Fragment2 extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        TextView textView = new TextView(getActivity());
        textView.setText("fragment2");
        return textView;
    }

}

原点是自定义图画:

创建 drawable文件夹,设置两个状态的圆点:
选中:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle" >

    <corners android:radius="8dp" />
    <solid android:color="#fff"/>

</shape>

正常状态:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle" >

    <corners android:radius="8dp" />
    <solid android:color="#88000000"/>

</shape>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值