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>
新聞熱點
疑難解答