ViewPager輪播圖
阿新 • • 發佈:2018-11-08
.activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <android.support.v4.view.ViewPager android:id="@+id/viewpager_vp" android:layout_width="wrap_content" android:layout_height="250dp" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:background="#88000000" android:orientation="vertical" android:padding="8dp" android:gravity="center_horizontal" android:layout_alignBottom="@+id/viewpager_vp"> <TextView android:id="@+id/ViewPager_tv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="@android:color/white" android:text="AAAAA"/> <LinearLayout android:id="@+id/ll_dot" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal"> </LinearLayout> </LinearLayout> </RelativeLayout>
.MainActivity
package com.example.lunbo; import android.os.Handler; import android.os.Message; import android.support.v4.view.ViewPager; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.MotionEvent; import android.view.View; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; import java.util.ArrayList; public class MainActivity extends AppCompatActivity { private ViewPager viewpager_vp; private ArrayList<ImageView> ImageViews = new ArrayList(); private int[] imageResIds = { R.drawable.a, R.drawable.b, R.drawable.c, R.drawable.d, R.drawable.e, }; private String[] descs = { "AAAAA", "BBBBB", "CCCCC", "DDDDD", "EEEEE", }; private LinearLayout ll_dot; private TextView viewPager_tv; private Handler handler = new Handler() { @Override public void handleMessage(Message msg) { switch (msg.what) { case 1: int currentItem = viewpager_vp.getCurrentItem(); viewpager_vp.setCurrentItem(currentItem + 1); sendEmptyMessageDelayed(1, 3000); break; default: break; } } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); init(); } private void init() { ll_dot = (LinearLayout) findViewById(R.id.ll_dot); viewPager_tv = (TextView) findViewById(R.id.ViewPager_tv); viewpager_vp = (ViewPager) findViewById(R.id.viewpager_vp); for (int x = 0; x < imageResIds.length; x++) { ImageView imageView = new ImageView(this); imageView.setBackgroundResource(imageResIds[x]); ImageViews.add(imageView); createDot(x); } viewpager_vp.setAdapter(new MyViewpagerAdapter(MainActivity.this,ImageViews)); viewpager_vp.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { int currentItem = viewpager_vp.getCurrentItem(); changeTextandDot(currentItem % imageResIds.length); } @Override public void onPageSelected(int position) { } @Override public void onPageScrollStateChanged(int state) { } }); viewpager_vp.setCurrentItem(Integer.MAX_VALUE / 2 - 3); handler.sendEmptyMessageDelayed(1, 3000); ViewPagerTouchEvent(); } public void changeTextandDot(int position){ viewPager_tv.setText(descs[position]); for(int x=0; x< imageResIds.length; x++){ View childAt = ll_dot.getChildAt(x); childAt.setBackgroundResource(x==position?R.drawable.dot_focus:R.drawable.dot_normal); } } private void createDot(int x) { View view= new View(this); view.setBackgroundResource(R.drawable.dot_normal); LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(8,8); layoutParams.leftMargin=8; view.setLayoutParams(layoutParams); ll_dot.addView(view); } public void ViewPagerTouchEvent() { viewpager_vp.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View view, MotionEvent motionEvent) { switch (motionEvent.getAction()) { case MotionEvent.ACTION_DOWN: handler.removeMessages(1); break; case MotionEvent.ACTION_MOVE: handler.removeMessages(1); break; case MotionEvent.ACTION_UP: handler.sendEmptyMessageDelayed(1, 3000); default: break; } return false; } }); } @Override protected void onDestroy() { super.onDestroy(); handler.removeMessages(1); } }
.MyViewpagerAdapter
package com.example.lunbo; import android.media.ImageReader; import android.support.annotation.NonNull; import android.support.v4.view.PagerAdapter; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import java.util.ArrayList; class MyViewpagerAdapter extends PagerAdapter { private MainActivity mainActivity; private ArrayList<ImageView> imageViews; public MyViewpagerAdapter(MainActivity mainActivity, ArrayList<ImageView> imageViews) { this.mainActivity = mainActivity; this.imageViews = imageViews; } @Override public int getCount() { return Integer.MAX_VALUE; } @Override public boolean isViewFromObject(@NonNull View view, @NonNull Object object) { return view == object; } @Override public Object instantiateItem(ViewGroup container, int position) { ImageView imageView = imageViews.get(position % imageViews.size()); container.addView(imageView); return imageView; } @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView((View) object); } }