阅读背景:

Android实现图片轮播效果

来源:互联网 

注明:转载请注明本文链接

MainActivity.java

package com.example.carr.advertisement;

import android.content.Intent;
import android.os.Environment;
import android.os.Handler;
import android.os.Message;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.Layout;
import android.util.Log;
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 android.widget.Toast;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {

    private ViewPager viewPager;
    private TextView tv_title;
    private boolean is_state = false;
    private LinearLayout point_ll;
    private ArrayList<ImageView> imageViews;

    //点
    ImageView point;
    //记录上一次的位置
    private int perPoint = 0;

    //图片数组
    private final int IMAGES[] = {R.drawable.x0, R.drawable.xa, R.drawable.xb, R.drawable.xc, R.drawable.xd, R.drawable.xe};

    //标题数组
    private final String TITLES[] = {"勇于创新", "探索求精", "代码狂人", "用代码点亮世界", "科技发展未来", "年薪30万"};

    private Handler handler = new Handler(){
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);

            int item = viewPager.getCurrentItem() +1;
            viewPager.setCurrentItem(item);
            handler.sendEmptyMessageDelayed(0,3000);
        }
    };

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

        //查找控件
        viewPager = findViewById(R.id.viewpager);
        tv_title = findViewById(R.id.title);
        point_ll = findViewById(R.id.point_ll);

        imageViews = new ArrayList<>();
        for (int i = 0; i < IMAGES.length; i++) {
            ImageView imageView = new ImageView(this);
            imageView.setBackgroundResource(IMAGES[i]);
            imageViews.add(imageView);

            //添加点
            point = new ImageView(this);
            point.setBackgroundResource(R.drawable.point_red);

            LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(32, 32);
            if (i == 0) {
                //如果为true点的颜色是红色
                point.setEnabled(true);
                tv_title.setText(TITLES[0]);
            } else {
                params.leftMargin = 8;
                //为false点的颜色是灰色
                point.setEnabled(false);
            }
            point.setLayoutParams(params);
            point_ll.addView(point);
        }

        viewPager.setAdapter(new MyAdapter());

        //监听ViewPager页面更改
        viewPager.addOnPageChangeListener(new MyOnPageChangeListener());

        int item=Integer.MAX_VALUE/2 - Integer.MAX_VALUE/2%imageViews.size();
        viewPager.setCurrentItem(item);

        handler.sendEmptyMessageDelayed(0,3000);
    }

    //图片轮播
    class MyAdapter extends PagerAdapter {

        @Override
        public int getCount() {
            return Integer.MAX_VALUE;
        }

        @Override
        public Object instantiateItem(ViewGroup container, int position) {
            int relPosition = position%imageViews.size();
            ImageView imageView = imageViews.get(relPosition);
            container.addView(imageView);
            imageView.setOnTouchListener(new View.OnTouchListener() {
                @Override
                public boolean onTouch(View view, MotionEvent motionEvent) {
                    switch (motionEvent.getAction()){
                        case MotionEvent.ACTION_DOWN:
                            handler.removeCallbacksAndMessages(null);
                            break;
                        case MotionEvent.ACTION_MOVE:
                            break;
                        case MotionEvent.ACTION_UP:
                            handler.removeCallbacksAndMessages(null);
                            handler.sendEmptyMessageDelayed(0,3000);
                            break;
                    }
                    return true;
                }
            });
            return imageView;
        }

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

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

    //控制点
    class MyOnPageChangeListener implements ViewPager.OnPageChangeListener {

        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

        }

        @Override
        public void onPageSelected(int position) {
            int relPosition = position%imageViews.size();
            //设置文本
            tv_title.setText(TITLES[relPosition]);

            //设置点颜色为灰色
            point_ll.getChildAt(perPoint).setEnabled(false);

            //设置点的颜色为红色
            point_ll.getChildAt(relPosition).setEnabled(true);

            //获取上一次的位置
            perPoint = relPosition;
        }

        @Override
        public void onPageScrollStateChanged(int state) {
            if(state == ViewPager.SCROLL_STATE_DRAGGING){
                is_state =true;
                handler.removeCallbacksAndMessages(null);
            }else if(state == ViewPager.SCROLL_STATE_IDLE){
                is_state=false;
                handler.removeCallbacksAndMessages(null);
                handler.sendEmptyMessageDelayed(0,3000);
            }else if(state == ViewPager.SCROLL_STATE_SETTLING){

            }
        }
    }
}packag



你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: