ViewPager自动轮播+底部文字动态+底部小圆点动态滑动

今天项目中突然要加上这个功能,我还是翻了一下之前的代码!想了想还是写出来,方便以后看。

1,我们就看一下适配器,也很简单新建Adapter继承自PagerAdapter

package com.example.administrator.airport.Adapter;

import android.content.Context;
import android.support.v4.view.PagerAdapter;
import android.view.View;
import android.view.ViewGroup;

import java.util.List;

/**
 * Created by Administrator on 2017/4/27.
 */
public class myadapter extends PagerAdapter {
    private List<View> list;
    private Context context;


    public myadapter(List<View> list, Context context) {
        this.list = list;
        this.context = context;

    }

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

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

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

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

2,其实这边我是用Xml文件去承载图片的,所以还得新建几个Xml文件去存放图片,当然数据写死的时候也可以不用这样做,我这边主要是为了简便–

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:background="@mipmap/one"
    android:layout_margin="20dp"
    android:layout_height="200dp">
</LinearLayout>

3,最后也是关键的,新建或者打开一个Acticity 这里是在mainfirst_acticity.xml作为程序的主布局文件,在里面加入如下代码

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/colorWhite"
    android:orientation="vertical">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="45dp"
        android:background="@color/colorTitle">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:text="..."
            android:textColor="#fafcfe"
            android:textSize="20dp" />
    </RelativeLayout>
    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="@dimen/VFhight"
        android:layout_marginLeft="10px"
        android:layout_marginRight="10px"
        android:layout_marginTop="5px"
        android:background="@color/VFColor">

        <android.support.v4.view.ViewPager
            android:id="@+id/vp_FA"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_margin="2dp"></android.support.v4.view.ViewPager>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="35dip"
            android:layout_alignParentBottom="true"
            android:layout_gravity="bottom"
            android:layout_marginLeft="5px"
            android:layout_marginRight="5px"
            android:background="#33000000"
            android:gravity="bottom"
            android:orientation="vertical"
            android:weightSum="1">
            <TextView
                android:textSize="12dip"
                android:layout_gravity="center"
                android:id="@+id/title"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="图片标题"
                android:textColor="@android:color/white" />
            <RadioGroup
                android:layout_marginTop="5px"
                android:id="@+id/rg_FA"
                android:layout_width="match_parent"
                android:layout_height="30px"
                android:layout_below="@+id/vp_FA"
                android:gravity="center|bottom"
                android:orientation="horizontal"
                android:layout_weight="0.05"></RadioGroup>
        </LinearLayout>
    </FrameLayout>

</LinearLayout>

4,最后Acticity中 ,写出来就是为了方便以后用到的时候去看看,避免去找代码,,,

package com.example.administrator.airport.Login;

import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.support.v4.view.ViewPager;
import android.support.v7.widget.CardView;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.Animation;
import android.view.animation.ScaleAnimation;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.TextView;

import com.example.administrator.airport.Adapter.myadapter;
import com.example.administrator.airport.BaseActivity;
import com.example.administrator.airport.ChangeAdm.ProjectChangeActivity;
import com.example.administrator.airport.Maillist.MettActivity;
import com.example.administrator.airport.Notices.ChangeActivity;
import com.example.administrator.airport.PersonalCenter.PersonalCenterActivity;
import com.example.administrator.airport.R;
import com.example.administrator.airport.Utils.ZoomOutPageTransformer;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

/**
 * Created by Administrator on 2017/10/26 0026.
 */
public class MainFirst_Acticity extends BaseActivity {
    private ViewPager vp_FA;
    private RadioGroup rg_FA;
    private myadapter adapter;
    private List<View> userList = new ArrayList<>();
    private List<RadioButton> radioButtons;
    private ScaleAnimation animation;
    private TextView title;
    //图片标题的数据暂时写死
    private String[]titles=new String[]{
            "颜值飙升!焕然一新迎接四方宾客",
            "书藏古今、港通天下",
            "空港是城市文明程度的直接体现",
            "设计理念是“热情、开放、现代、人文”"
    };
    private ScheduledExecutorService scheduledExecutorService;
    private int currentItem;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.mainfirst_acticity);
        initView();
        //添加数据源(图片)
        View view1 = getLayoutInflater().inflate(R.layout.item1, null);
        View view2 = getLayoutInflater().inflate(R.layout.item2, null);
        View view3 = getLayoutInflater().inflate(R.layout.item3, null);
        View view4 = getLayoutInflater().inflate(R.layout.item4, null);
        //将图片保存在集合中
        userList.add(view3);
        userList.add(view4);
        userList.add(view1);
        userList.add(view2);

        Displaydata();


    }

    private void initView() {
        vp_FA = (ViewPager) findViewById(R.id.vp_FA);
        rg_FA = (RadioGroup) findViewById(R.id.rg_FA);
        title= (TextView) findViewById(R.id.title);
        title.setText(titles[0]);//初始化的时候图片标题应该是第一个
        //这个动画可以不用加
        vp_FA.setPageTransformer(true, new ZoomOutPageTransformer());//VeiwPager的动画

    }

    //绑定数组源-动态添加小圆点
    private void Displaydata() {
        if (userList.size() != 0) {
            adapter = new myadapter(userList, MainFirst_Acticity.this);
            vp_FA.setAdapter(adapter);
        }
        radioButtons = new ArrayList<>();
        for (int i = 0; i < userList.size(); i++) {
            if (this != null) {
                RadioButton button = new RadioButton(MainFirst_Acticity.this);

                if (i == 0) {
                    button.setButtonDrawable(R.mipmap.image_focus);
                } else {
                    button.setButtonDrawable(R.mipmap.image_in);
                }
                radioButtons.add(button);
                rg_FA.addView(button, ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
            }
        }
        vp_FA.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

            }

            @Override
            public void onPageSelected(int position) {
                title.setText(titles[position]);
                for (int i = 0; i < radioButtons.size(); i++) {
                    if (i == position) {
                        radioButtons.get(i).setButtonDrawable(R.mipmap.image_focus);
                    } else {
                        radioButtons.get(i).setButtonDrawable(R.mipmap.image_in);
                    }
                }
            }

            @Override
            public void onPageScrollStateChanged(int state) {

            }
        });
    }

    /**
     * 利用线程池定时执行动画轮播
     */
    @Override
    protected void onStart() {
        // TODO Auto-generated method stub
        super.onStart();
        scheduledExecutorService = Executors.newSingleThreadScheduledExecutor();
        scheduledExecutorService.scheduleWithFixedDelay(
                new ViewPageTask(), 5, 5, TimeUnit.SECONDS);
    }
    /**
     * 图片轮播任务
     * @author liuyazhuang
     * 使用保保存图片的视图
     *
     */
    private class ViewPageTask implements Runnable{

        @Override
        public void run() {
            currentItem = (currentItem + 1) % userList.size();
            mHandler.sendEmptyMessage(0);
        }
    }

    /**
     * 接收子线程传递过来的数据
     */
    private Handler mHandler = new Handler(){
        public void handleMessage(android.os.Message msg) {
            vp_FA.setCurrentItem(currentItem);
        }
    };
    @Override
    protected void onStop() {
        // TODO Auto-generated method stub
        super.onStop();
        if(scheduledExecutorService != null){
            scheduledExecutorService.shutdown();
            scheduledExecutorService = null;
        }
    }

}

以上,写的不好,,,


版权声明:本文为qq_36895346原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。