一、布局:

activity_main.

<RelativeLayout ns:android=\"http://schemas.android.com/apk/res/android\"
    ns:tools=\"http://schemas.android.com/tools\"
    android:layout_width=\"match_parent\"
    android:layout_height=\"match_parent\"
    tools:context=\"${relativePackage}.${activityClass}\" >

    <android.support.v4.view.ViewPager
        android:id=\"@+id/viewpager\"
        android:layout_width=\"match_parent\"
        android:layout_height=\"match_parent\"
        />

    <RadioGroup
        android:id=\"@+id/group\"
        android:layout_width=\"wrap_content\"
        android:layout_height=\"wrap_content\"
        android:layout_alignParentBottom=\"true\"
        android:layout_centerHorizontal=\"true\"
        android:layout_marginBottom=\"116dp\"
        android:orientation=\"horizontal\" >

        <RadioButton
            android:id=\"@+id/but1\"
            android:layout_width=\"wrap_content\"
            android:layout_height=\"wrap_content\"
            android:checked=\"true\" />

        <RadioButton
            android:id=\"@+id/but2\"
            android:layout_width=\"wrap_content\"
            android:layout_height=\"wrap_content\" />

        <RadioButton
            android:id=\"@+id/but3\"
            android:layout_width=\"wrap_content\"
            android:layout_height=\"wrap_content\" />

        <RadioButton
            android:id=\"@+id/but4\"
            android:layout_width=\"wrap_content\"
            android:layout_height=\"wrap_content\" />
    </RadioGroup>

</RelativeLayout>
二、主方法:MainActivity.java.

package com.example.day03_viewpager_demo;

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

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Button;
import android.widget.RadioGroup;
import android.widget.RadioGroup.OnCheckedChangeListener;

public class MainActivity extends Activity {

    private ViewPager viewPager;
    private List<Integer> list;
    private RadioGroup radioGroup;
    private int i;
    private Handler handler = new Handler(){
        public void handleMessage(android.os.Message msg) {
            
            //设置没过3秒之后切换的图片
            i++;
            viewPager.setCurrentItem(i);
            handler.sendEmptyMessageDelayed(0, 3000);
        };
    };
     
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        //1.获取资源ID
        viewPager = (ViewPager) findViewById(R.id.viewpager);
        radioGroup = (RadioGroup) findViewById(R.id.group);
        //2.添加数据源
        list = new ArrayList<Integer>();
        list.add(R.drawable.mao);
        list.add(R.drawable.mao2);
        list.add(R.drawable.zhu);
        list.add(R.drawable.zhu1);
        //3.创建适配器
        ViewPagerAdapter adapter = new ViewPagerAdapter(this, list,handler);
        viewPager.setAdapter(adapter);
        
        //设置图片默认的位置
        viewPager.setCurrentItem(list.size()*10000);
        
        //得到当前的图片的位置
        i = viewPager.getCurrentItem();
        //执行handler
        handler.sendEmptyMessageDelayed(0, 3000);
        
        //对ViewPager设置页选中的监听
        viewPager.setOnPageChangeListener(new OnPageChangeListener() {
            //页面选中  arg0 选择当前页的下标
            @Override
            public void onPageSelected(int arg0) {
                // TODO Auto-generated method stub
                switch (arg0%list.size()) {//3
                case 0:
                    radioGroup.check(R.id.but1);
                    break;
                case 1:
                    radioGroup.check(R.id.but2);
                    break;
                case 2:
                    radioGroup.check    (R.id.but3);
                    break;
                case 3:
                    radioGroup.check(R.id.but4);
                    break;

                default:
                    break;
                }
            }
            //滑动
            @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
                
            }
        });
        
    }
}

三、适配器:ViewPagerAdapter.

package com.example.day03_viewpager_demo;

import java.util.List;

import android.content.Context;
import android.os.Handler;
import android.support.v4.view.PagerAdapter;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.Toast;

public class ViewPagerAdapter extends PagerAdapter{
    
    private Context context;
    private List<Integer> list;
    private Handler handler;
    //接受Activity的值
    
    public ViewPagerAdapter(Context context, List<Integer> list, Handler handler) {
        super();
        this.context = context;
        this.list = list;
        this.handler = handler;
    }
    
    //条目的总数
    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return Integer.MAX_VALUE;  //1.将图片的一个总数 设置最大
    }
    //得到的视图与添加的视图是否一致
    @Override
    public boolean isViewFrom (View arg0, arg1) {
        // TODO Auto-generated method stub
        return arg0 == arg1;
    }
    //添加   super.instantiateItem(container, position) 底层抛出的是异常
    @Override
    public instantiateItem(ViewGroup container, int position) {
        // TODO Auto-generated method stub
        
        //创建ImageView
        ImageView imageView = new ImageView(context);
        //设置图片
        imageView.setImageResource(list.get(position%list.size()));
        //触摸事件
        imageView.setOnTouchListener(new OnTouchListener() {
            
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                // TODO Auto-generated method stub
                //得到事件
                int action = event.getAction();
                switch (action) {
                case MotionEvent.ACTION_DOWN://按下
                    handler.removeCallbacksAndMessages(null);
                    Log.i(\"TAG\", \"按下\");
                    break;
                case MotionEvent.ACTION_MOVE://滑动
                    handler.removeCallbacksAndMessages(null);
                    Log.i(\"TAG\", \"滑动\");
                    break;
                case MotionEvent.ACTION_CANCEL://非人为原因结束本次事件
                    handler.sendEmptyMessageDelayed(0, 3000);
                    Log.i(\"TAG\", \"非人为原因结束本次事件\");
                    break;
                case MotionEvent.ACTION_UP://抬起View(与DOWN对应)
                    handler.sendEmptyMessageDelayed(0, 3000);
                    Log.i(\"TAG\", \"抬起View\");
                    break;

                default:
                    break;
                }
                return true;//表示消费了触摸事件,onTouch之后才执行 ,这里被消费了,所以,相关的点击事件不会执行。
            }
        });
        
        
        
        //将图片添加到组中
        container.addView(imageView);
        
        
        return imageView;
    }
    
    //删除   接受的就是图片
    @Override
    public void destroyItem(ViewGroup container, int position, ) {
        // TODO Auto-generated method stub
        
        container.removeView((View) );
        
    }

}
 

 

收藏 打印