ViewPager=====自动---触摸时状态---手动

进行最后点击图片## activity_main

<android.support.v4.view.ViewPager
        android:id="@+id/pager"
        android:layout_width="match_parent"
        android:layout_height="150dp" />
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:gravity="center_horizontal"
        android:padding="10dp"
        android:background="#88f4f4e5"
        android:layout_alignBottom="@+id/pager">
        <TextView
            android:id="@+id/tv_text"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="#fff"
            android:text="我是小饼干儿"/>
        <LinearLayout
            android:id="@+id/linear"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="horizontal">
            <!--<view
                android:layout_width="5dp"
                android:layout_height="5dp"
                android:background="#dd6ac4ca"/>-->
        </LinearLayout>
    </LinearLayout>

MainActivity

package wanghuiqi.bawie.com.viewpager;

import android.annotation.SuppressLint;
import android.os.Handler;
import android.os.Message;
import android.support.annotation.NonNull;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {

    //将ViewPager定义成全局变量 方便实用
    private ArrayList<ImageView> imgList=new ArrayList<>();
    //图片int数组资源
    private int[] imageIds={
        R.drawable.a,
        R.drawable.b,
        R.drawable.d,
        R.drawable.e,
    };
    //图片字符串数组String[]资源
    private String[] textRes={
            "你咋不上天呢",
            "不能因为我可爱就欺负我",
            "有没有兴趣来一场直达天堂的交往",
            "天下最帅,无人能比",
    };
    private ViewPager pager;
    private TextView tvText;
    private LinearLayout linear;



    //创建handler,通过msg.what获得标识
    @SuppressLint("HandlerLeak")
    private Handler handler=new Handler(){
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            switch (msg.what){
                case 1:
                    //得到当前ViewPager和用户交互的item条目
                    int currentItem = pager.getCurrentItem();
                    //设置ViewPag当前显示的页面
                    pager.setCurrentItem(currentItem+1);
                    //延时
                    sendEmptyMessageDelayed(1,3000);
                    break;
                    default:
                        break;
            }
        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //初始化控件
        initData();
    }

//初始化控件

 private void initData() {
        pager = findViewById(R.id.pager);
        tvText = findViewById(R.id.tv_text);
        //进行圆点添加
        linear = findViewById(R.id.linear);

        //创建动态ImageView控件,有几张图片就创建几个ImageView
        for(int i=0;i<imageIds.length;i++){
            //创建ImageView对象
            ImageView image = new ImageView(this);
            //添加图片资源
            image.setBackgroundResource(imageIds[i]);
            //把空件添加到集合ImageView中
            imgList.add(image);
            //进行圆点添加,个数和图片个数一致,因此放到循环中
            createDot(i);
        }

设置滑动监听

 //设置适配器
     pager.setAdapter(new MyPagerAdapter());
     
    //设置Viewpager的滑动监听器
    pager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
        @Override
        public void onPageScrolled(int i, float v, int i1) {
            //item的位置
            int currentItem = pager.getCurrentItem();
            //给Text和圆点进行选中的位置
            changeTextAndDot(currentItem%imageIds.length);
        }

        @Override
        public void onPageSelected(int i) {
        }

        @Override
        public void onPageScrollStateChanged(int i) {
        }
    });
      //指定ViewPager默认跳转到某页
        pager.setCurrentItem(Integer.MAX_VALUE/2-3);
    
        //通过handler,3秒后开始循环
        handler.sendEmptyMessageDelayed(1,3000);
        //设置触摸事件
        ViewPagerEvent();
    }

触摸事件

//触摸事件,用户触摸不再自动播放,
@SuppressLint("ClickableViewAccessibility")
private void ViewPagerEvent() {
    pager.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            switch (event.getAction()){
                case MotionEvent.ACTION_DOWN:
                    handler.removeMessages(1);
                    break;
                case MotionEvent.ACTION_MOVE:
                    handler.removeMessages(1);
                    break;
                    //当用户抬起时,继续发送
                case MotionEvent.ACTION_UP:
                    handler.sendEmptyMessageDelayed(1,3000);
                    default:
                        break;
            }
            return false;
        }
    });
}
//销毁
@Override
protected void onDestroy() {
    super.onDestroy();
    handler.removeMessages(1);
}

根据圆点滑动改变文本

 private void changeTextAndDot(int position) {
        //根据item的变化设置对应的文本
        tvText.setText(textRes[position]);
        //对圆点进行判断是否是当前页
        for (int i=0;i<imageIds.length;i++){
            //拿到容器的子控件
            View childAt = linear.getChildAt(i);
            //设置背景图片,使用三元运算
            childAt.setBackgroundResource(i==position?R.drawable.red_dot:R.drawable.white_dot);
        }
    }

动态创建圆点

//增加图片资源的数量,动态的创建圆点
private void createDot(int x){
    //创建一个View对象
    View view=new View(this);
    //设置背景
    view.setBackgroundResource(R.drawable.red_dot);
    //设置宽高参数
    LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(8, 8);
    //使用参数设置margin
    layoutParams.leftMargin=8;
    //设置给View对象
    view.setLayoutParams(layoutParams);
    //最后容器对象
    linear.addView(view);
}

Adapter

    class MyPagerAdapter extends PagerAdapter{

        @Override
        public int getCount() {
            //把返回的条目设置 为无限大
            return Integer.MAX_VALUE;
        }

        @Override
        public boolean isViewFromObject(@NonNull View view, @NonNull Object o) {
            return view==o;
        }

        @NonNull
        @Override
        public Object instantiateItem(@NonNull ViewGroup container, int position) {
           //根据条目所在位置,从ImageView集合里获取相对应的图片
            ImageView imageView = imgList.get(position%imageIds.length);
            //添加给ViewPager
            container.addView(imageView);
            //添加什么空间,就返回该控件
            return imageView;
        }
        @Override
        public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
            container.removeView((View)object);
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值