Android之ViewPager的使用
来源:互联网 发布:动漫头像制作软件 编辑:程序博客网 时间:2024/06/06 08:32
MainActivity:
public class MainActivity extends AppCompatActivity { private static final String TAG = MainActivity.class.getSimpleName(); private ViewPager viewpager; private TextView tv_title; private LinearLayout ll_point_group; //ListView的使用 //1.在布局文件中定义ListView //2.在代码中实例化ListView //3.准备数据 //4.设置适配器-item布局-绑定数据 private ArrayList<ImageView> imageViews; // 图片资源ID private final int[] imageIds = { R.drawable.a, R.drawable.b, R.drawable.c, R.drawable.d, R.drawable.e }; /** * 上一次高亮显示的位置 */ private int prePosition = 0; /** * 是否已经滚动 */ private boolean isDragging = false; // 图片标题集合 private final String[] imageDescriptions = { "尚硅谷波河争霸赛!", "凝聚你我,放飞梦想!", "抱歉没座位了!", "7月就业名单全部曝光!", "平均起薪11345元" }; 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,4000); } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); viewpager = (ViewPager) findViewById(R.id.viewpager); tv_title = (TextView) findViewById(R.id.tv_title); ll_point_group = (LinearLayout) findViewById(R.id.ll_point_group); //ViewPager的使用 //1.在布局文件中定义ViewPager //2.在代码中实例化ViewPager //3.准备数据 imageViews = new ArrayList<>(); for (int i = 0 ;i < imageIds.length;i++){ ImageView imageView = new ImageView(this); imageView.setBackgroundResource(imageIds[i]); //添加到集合中 imageViews.add(imageView); //添加点 ImageView point = new ImageView(this); point.setBackgroundResource(R.drawable.point_selector); LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(8,8); if(i==0){ point.setEnabled(true); //显示红色 }else{ point.setEnabled(false);//显示灰色 params.leftMargin = 8; } point.setLayoutParams(params); ll_point_group.addView(point); } //4.设置适配器(PagerAdapter)-item布局-绑定数据 viewpager.setAdapter(new MyPagerAdapter()); //设置监听ViewPager页面的改变 viewpager.addOnPageChangeListener(new MyOnPageChangeListener()); //设置中间位置 int item = Integer.MAX_VALUE/2 - Integer.MAX_VALUE/2%imageViews.size();//要保证imageViews的整数倍 viewpager.setCurrentItem(item); tv_title.setText(imageDescriptions[prePosition]); //发消息 handler.sendEmptyMessageDelayed(0,3000); } class MyOnPageChangeListener implements ViewPager.OnPageChangeListener { /** * 当页面滚动了的时候回调这个方法 * @param position 当前页面的位置 * @param positionOffset 滑动页面的百分比 * @param positionOffsetPixels 在屏幕上滑动的像数 */ @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } /** * 当某个页面被选中了的时候回调 * @param position 被选中页面的位置 */ @Override public void onPageSelected(int position) { int realPosition = position%imageViews.size(); //设置对应页面的文本信息 tv_title.setText(imageDescriptions[realPosition]); //把上一个高亮的设置默认-灰色 ll_point_group.getChildAt(prePosition).setEnabled(false); //当前的设置为高亮-红色 ll_point_group.getChildAt(realPosition).setEnabled(true); prePosition = realPosition; } /** 当页面滚动状态变化的时候回调这个方法 静止->滑动 滑动-->静止 静止-->拖拽 */ @Override public void onPageScrollStateChanged(int state) { if(state == ViewPager.SCROLL_STATE_DRAGGING){ isDragging = true; handler.removeCallbacksAndMessages(null); Log.e(TAG,"SCROLL_STATE_DRAGGING-------------------"); }else if(state == ViewPager.SCROLL_STATE_SETTLING){ Log.e(TAG,"SCROLL_STATE_SETTLING-----------------"); }else if(state == ViewPager.SCROLL_STATE_IDLE&&isDragging){ isDragging = false; Log.e(TAG,"SCROLL_STATE_IDLE------------"); handler.removeCallbacksAndMessages(null); handler.sendEmptyMessageDelayed(0,4000); } } } class MyPagerAdapter extends PagerAdapter{ /** * 得到图片的总数 * @return */ @Override public int getCount() {// return imageViews.size(); return Integer.MAX_VALUE; } /** * 相当于getView方法 * @param container ViewPager自身 * @param position 当前实例化页面的位置 * @return */ @Override public Object instantiateItem(ViewGroup container, final int position) { int realPosition = position%imageViews.size(); final ImageView imageView = imageViews.get(realPosition); container.addView(imageView);//添加到ViewPager中// Log.e(TAG, "instantiateItem==" + position + ",---imageView==" + imageView); imageView.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()){ case MotionEvent.ACTION_DOWN://手指按下 Log.e(TAG,"onTouch==手指按下"); handler.removeCallbacksAndMessages(null); break; case MotionEvent.ACTION_MOVE://手指在这个控件上移动 break; case MotionEvent.ACTION_CANCEL://手指在这个控件上移动 Log.e(TAG,"onTouch==事件取消");// handler.removeCallbacksAndMessages(null);// handler.sendEmptyMessageDelayed(0,4000); break; case MotionEvent.ACTION_UP://手指离开 Log.e(TAG,"onTouch==手指离开"); handler.removeCallbacksAndMessages(null); handler.sendEmptyMessageDelayed(0,4000); break; } return false; } }); imageView.setTag(position); imageView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Log.e(TAG,"点击事件"); int position = (int) v.getTag()%imageViews.size(); String text = imageDescriptions[position]; Toast.makeText(MainActivity.this, "text=="+text, Toast.LENGTH_SHORT).show(); } }); return imageView; } /** * 比较view和object是否同一个实例 * @param view 页面 * @param object 这个方法instantiateItem返回的结果 * @return */ @Override public boolean isViewFromObject(View view, Object object) {// if(view == object){// return true;// }else{// return false;// } return view == object; } /** * 释放资源 * @param container viewpager * @param position 要释放的位置 * @param object 要释放的页面 */ @Override public void destroyItem(ViewGroup container, int position, Object object) {// super.destroyItem(container, position, object);// Log.e(TAG, "destroyItem==" + position + ",---object==" + object); container.removeView((View) object); } }}drawable文件:
<?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_enabled="false" android:drawable="@drawable/point_normal"/> <item android:state_enabled="true" android:drawable="@drawable/point_press"/></selector>
<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval"> <size android:width="8dp" android:height="8dp" /> <solid android:color="#44000000"/></shape>
<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval"> <size android:width="8dp" android:height="8dp" /> <solid android:color="#ff0000"/></shape>
activity_main:
<?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="com.atguigu.viewpager.MainActivity"> <android.support.v4.view.ViewPager android:id="@+id/viewpager" android:layout_width="match_parent" android:layout_height="180dp" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignBottom="@id/viewpager" android:background="#44000000" android:orientation="vertical" android:padding="5dp"> <TextView android:id="@+id/tv_title" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center_horizontal" android:padding="3dp" android:text="美国队长3" android:textColor="#ffffff" /> <LinearLayout android:id="@+id/ll_point_group" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:orientation="horizontal" /> </LinearLayout></RelativeLayout>
0 0
- android之ViewPager的使用
- Android之ViewPager的使用
- Android之ViewPager的使用
- Android常用控件之ViewPager的使用
- Android读书笔记之ViewPager的使用
- Android UI 基础之ViewPager的使用
- android之ViewPager的使用详解
- Android22--Android之ViewPager的使用
- 【Android - V】之ViewPager的使用
- android开发之ViewPager的使用
- Android 开发之 TabLayout + ViewPager 的使用
- android viewpager的使用
- Android-ViewPager的使用
- android ViewPager的使用
- Android ViewPager的使用
- android之ViewPager的使用实现应用的导航功能
- Android复习之基本的viewpager的使用
- Android之使用ViewPager实现图片展示(最简单的)
- Nginx Intro
- 地址窗口化扩展插件(AWE)要求'锁定内存页'特权,但在该进程的访问标记中当前未提供该权限。
- caffe--- 图片数据均值计算小工具
- 极光推送
- LeetCode-58. Length of Last Word
- Android之ViewPager的使用
- 杭电 2018
- BZOJ 1085 [SCOI2005] 骑士精神
- 操作系统中的各类作业调度算法的优缺点比较
- C-F2. 配置管理口 ❀ C3750-E ❀ 思科 (CISCO) 交换机
- 最近用bootstrap的时候发现了一些问题
- 2种判断(获取)栈顶activity的方法
- Redis配置文件详解
- iOS Developer:真机测试证书申请