Android ViewPager点点滚动视图

话不多说,直接看代码,代码中有详细的解释:

主类:

package com.example.day15;

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.View;
import android.view.ViewGroup;
import android.widget.ActionMenuView;
import android.widget.ImageView;
import android.widget.LinearLayout;

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

public class MainActivity extends AppCompatActivity {

    private ViewPager viewPager;
    private LinearLayout layout;
    private List<ImageView> imageViews = new ArrayList<>();
    private int flag = 0;

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

        viewPager = findViewById(R.id.viewPager);
        layout = findViewById(R.id.layout);


        //滑动视图
        ImageView imageView1 = new ImageView(MainActivity.this);
        imageView1.setImageResource(R.mipmap.qq);

        ImageView imageView2 = new ImageView(MainActivity.this);
        imageView2.setImageResource(R.mipmap.ss_02);

        ImageView imageView3 = new ImageView(MainActivity.this);
        imageView3.setImageResource(R.mipmap.ss_03);

        ImageView imageView4 = new ImageView(MainActivity.this);
        imageView4.setImageResource(R.mipmap.ss_04);

        ImageView imageView5 = new ImageView(MainActivity.this);
        imageView5.setImageResource(R.mipmap.ss_05);

        imageViews.add(imageView1);
        imageViews.add(imageView2);
        imageViews.add(imageView3);
        imageViews.add(imageView4);
        imageViews.add(imageView5);


        //动态创建小点点
        for (int i = 0; i < imageViews.size(); i++) {


            // 控件在代码中动态设置 点点的宽高(宽高要跟背景设置的圆角一样的大小就可以是圆形)
            LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(10, 10);
            //设置每个点点之间的距离
            layoutParams.setMargins(10, 0, 10, 0);


            ImageView imageView = new ImageView(MainActivity.this);//创建图片
            imageView.setLayoutParams(layoutParams);//给图片把刚才设置的layoutParams设置上去
            imageView.setBackgroundResource(R.drawable.selector);//设置背景为小点点
            imageView.setEnabled(false);//先把所有都设置成为选中状态,设置为灰色的点点

            layout.addView(imageView);//把小点点添加到layout视图中
        }

        //默认第一张 所有第一个点点为红色
        layout.getChildAt(0).setEnabled(true);


        //viewPager的监听事件
        viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            //这个方法每次滑动就走
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

            }

            //滑动完成的时候才走(一般就用这个方法)
            @Override
            public void onPageSelected(int position) {
                //获取layout下标为index的子视图(即选中状态下),给它设置它的背景为selected_point
//                layout.getChildAt(0).setBackgroundResource(R.drawable.selected_point);

                //状态可用 设置setEnabled为true 就会调用selector的第一个
                // 这样就相当于设置可用的背景为红色点点
                layout.getChildAt(position).setEnabled(true);
                layout.getChildAt(flag).setEnabled(false);
                flag = position;//存一下坐标(表示上一次点击时候的坐标)


            }

            //监听当前滑动的状态
            @Override
            public void onPageScrollStateChanged(int state) {

            }
        });


        viewPager.setAdapter(new MyAdapter());
    }

    class MyAdapter extends PagerAdapter {

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

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

        @NonNull
        @Override
        public Object instantiateItem(@NonNull ViewGroup container, int position) {
            container.addView(imageViews.get(position));
            return imageViews.get(position);

        }

        @Override
        public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
            container.removeView(imageViews.get(position));
        }
    }
}

主布局:

<?xml version="1.0" encoding="utf-8"?>
<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"
    tools:context=".MainActivity">

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

    </android.support.v4.view.ViewPager>
    <LinearLayout
        android:id="@+id/layout"
        android:orientation="horizontal"
        android:gravity="center"
        android:layout_alignBottom="@+id/viewPager"
        android:layout_width="match_parent"
        android:layout_height="30dp">

    </LinearLayout>

</RelativeLayout>

背景点点(默认情况下):

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <corners android:radius="10dp"></corners>
    <solid android:color="@color/hui"></solid>
</shape>

选中情况下:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <corners android:radius="10dp"></corners>
    <solid android:color="@color/colorAccent"></solid>
</shape>

这个是看它是否是选中状态的情况下:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_enabled="true" android:drawable="@drawable/selected_point"></item>
    <item android:state_enabled="false" android:drawable="@drawable/point"></item>
</selector>

state_enabled是true的话,设置背景为selected_point

state_enabled是false的话,设置背景为point

效果:

                                                                                                          emmmmm....应该是个程序猿

猜你喜欢

转载自blog.csdn.net/LIXIAONA_1101/article/details/81135390