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>
新闻热点
疑难解答