实现gridview 分页,左右滑动效果

本文介绍了一个使用Android支持库中的ViewPager实现分页加载的例子。通过GridView展示数据,并利用指示器提升用户体验。代码中详细展示了如何加载数据、配置ViewPager及处理页面切换。
package com.eyeandroid.viewpager;
 
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;
 
import android.R.integer;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.os.Parcelable;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.widget.GridView;
import android.widget.ImageView;
 
public class MainActivity extends Activity {
        private ImageView[] dotImageViews = null;
        private int PAGESIZE = 8;
        private ViewPager advPager = null;
        private AtomicInteger what = new AtomicInteger(0);
        List<CourseBean> courseBeans;
        private String TAG = "MainActivity";
 
        @Override
        public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.main);
                courseBeans = new ArrayList<CourseBean>();
                loadData();
                initViewPager();
        }
 
        private void initViewPager() {
                advPager = (ViewPager) findViewById(R.id.adv_pager);
 
                List<View> contentGridViews = new ArrayList<View>();
 
                for (int i = 0; i < courseBeans.size() / PAGESIZE; i++) {
                        Log.e(TAG, "载入第" + i + "页");
                        // 其实每一页就是一个gridview
                        GridView gridView = new GridView(this);
   // 分页算法 不懂请自觉补习小学三年级算法
int start = i * PAGESIZE;
                        int end = i * PAGESIZE + PAGESIZE;
                        end = end > courseBeans.size() ? courseBeans.size() : end;
                        gridView.setAdapter(new CourseAdapter(courseBeans.subList(start,
                                        end), this));
                      
                        
                        gridView.setNumColumns(4);
 
                        contentGridViews.add(gridView);
                }
 
                dotImageViews = new ImageView[contentGridViews.size()];
                initDots();
                advPager.setAdapter(new PageAdapter(contentGridViews));
                advPager.setOnPageChangeListener(new GuidePageChangeListener());
 
        }
 
        /**
         * 获取数据逻辑
         */
        private void loadData() {
                // 胡乱填写的数据
                for (int i = 0; i < 30; i++) {
                        CourseBean courseBean = new CourseBean(i, i + "这是课程"
                                        + Math.random());
                        courseBeans.add(courseBean);
                }
        }
 
        /**
         * 初始化指示器
         */
        private void initDots() {
                ViewGroup group = (ViewGroup) findViewById(R.id.viewGroup);
                for (int i = 0; i < dotImageViews.length; i++) {
                        ImageView imageView = new ImageView(this);
                        imageView.setLayoutParams(new LayoutParams(20, 20));
                        imageView.setPadding(5, 5, 5, 5);
                        dotImageViews<i> = imageView;
                        if (i == 0) {
                                dotImageViews<i>
                                                .setBackgroundResource(R.drawable.banner_dian_focus);
                        } else {
                                dotImageViews<i>
                                                .setBackgroundResource(R.drawable.banner_dian_blur);
                        }
                        group.addView(dotImageViews<i>);
                }
 
        }
 
        /**
         * 设置页面指示器
         * 
         */
        private final class GuidePageChangeListener implements OnPageChangeListener {
 
                @Override
                public void onPageScrolled(int arg0, float arg1, int arg2) {
 
                }
 
                @Override
                public void onPageSelected(int arg0) {
                        what.getAndSet(arg0);
                        for (int i = 0; i < dotImageViews.length; i++) {
                                dotImageViews[arg0]
                                                .setBackgroundResource(R.drawable.banner_dian_focus);
                                if (arg0 != i) {
                                        dotImageViews<i>
                                                        .setBackgroundResource(R.drawable.banner_dian_blur);
                                }
                        }
 
                }
 
                @Override
                public void onPageScrollStateChanged(int arg0) {
 
                }
 
        }
 
}
package com.eyeandroid.viewpager;
 
import android.R.integer;
 
public class CourseBean {
        public int id;
        public String courseName;
 
        public CourseBean(int id, String courseName) {
                super();
                this.id = id;
                this.courseName = courseName;
        }
 
        public int getId() {
                return id;
        }
 
        public void setId(int id) {
                this.id = id;
        }
 
        public String getCourseName() {
                return courseName;
        }
 
        public void setCourseName(String courseName) {
                this.courseName = courseName;
        }
 
}

package com.eyeandroid.viewpager;
 
import java.util.List;
 
import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
 
public class CourseAdapter extends BaseAdapter {
        private List<CourseBean> courseBeans;
        private Context context;
 
        public CourseAdapter(List<CourseBean> courseBeans, Context context) {
                super();
                this.courseBeans = courseBeans;
                this.context = context;
        }
 
        @Override
        public int getCount() {
                // TODO Auto-generated method stub
                return courseBeans.size();
        }
 
        @Override
        public Object getItem(int position) {
                // TODO Auto-generated method stub
                return courseBeans.get(position);
        }
 
        @Override
        public long getItemId(int position) {
                // TODO Auto-generated method stub
                return position;
        }
 
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
 
                TextView textView2 = new TextView(context);
                textView2.setText(courseBeans.get(position).getCourseName());
                return textView2;
        }
 
}
package com.eyeandroid.viewpager;
 
import java.util.List;
 
import android.os.Parcelable;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.View;
 
public class PageAdapter extends PagerAdapter {
        private List<View> views = null;
 
        public PageAdapter(List<View> views) {
                this.views = views;
        }
 
        @Override
        public void destroyItem(View arg0, int arg1, Object arg2) {
                ((ViewPager) arg0).removeView(views.get(arg1));
        }
 
        @Override
        public void finishUpdate(View arg0) {
 
        }
 
        @Override
        public int getCount() {
                return views.size();
        }
 
        @Override
        public Object instantiateItem(View arg0, int arg1) {
                ((ViewPager) arg0).addView(views.get(arg1), 0);
                return views.get(arg1);
        }
 
        @Override
        public boolean isViewFromObject(View arg0, Object arg1) {
                return arg0 == arg1;
        }
 
        @Override
        public void restoreState(Parcelable arg0, ClassLoader arg1) {
 
        }
 
        @Override
        public Parcelable saveState() {
                return null;
        }
 
        @Override
        public void startUpdate(View arg0) {
 
        }
 
}



评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值