無限輪播+字幕改變+小圓點聯動
阿新 • • 發佈:2018-11-05
xml標題
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <android.support.v4.view.ViewPager android:id="@+id/viewpager_vp" android:layout_width="wrap_content" android:layout_height="300dp"/> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:background="#88000000" android:gravity="center_horizontal" android:padding="8dp" android:layout_alignBottom="@+id/viewpager_vp" android:orientation="horizontal"> <TextView android:id="@+id/viewpager_tv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="@android:color/white" android:text="楓葉"/> <LinearLayout android:id="@+id/ll_dots" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:gravity="center_horizontal"> </LinearLayout> </LinearLayout> </RelativeLayout>
main 介面
package com.fy.test; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.support.annotation.NonNull; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.support.v7.app.AppCompatActivity; import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; import java.util.ArrayList; public class MainActivity extends AppCompatActivity { private LinearLayout ll_dots; private TextView viewpager_tv; private ViewPager viewpager_vp; private ArrayList<ImageView> imageViews=new ArrayList<ImageView>(); private int[] imageResIds={R.mipmap.a,R.mipmap.b,R.mipmap.c,R.mipmap.d,R.mipmap.e}; private String[] descs = { "網頁設計師聯盟", "教程網", "PS聯盟", "25學堂", "課工場帶你逆襲,助你走向人生巔峰", }; Handler handler=new Handler(){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); switch (msg.what){ case 1: int currentItem = viewpager_vp.getCurrentItem(); viewpager_vp.setCurrentItem(currentItem+1); sendEmptyMessageDelayed(1,3000); break; } } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //初始化控制元件 init(); } private void init() { ll_dots = findViewById(R.id.ll_dots); viewpager_tv = findViewById(R.id.viewpager_tv); viewpager_vp = findViewById(R.id.viewpager_vp); for (int i = 0; i < imageResIds.length; i++) { //建立ImageView ImageView imageView = new ImageView(this); imageView.setBackgroundResource(imageResIds[i]); imageViews.add(imageView); dot(); } viewpager_vp.setAdapter(new Myadapter()); viewpager_vp.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int i, float v, int i1) { int currentItem = viewpager_vp.getCurrentItem(); changeTextAndDot(currentItem%imageResIds.length); } @Override public void onPageSelected(int i) { } @Override public void onPageScrollStateChanged(int i) { } }); //指定VIewPager預設跳轉到某頁.一般是最大數的一半 viewpager_vp.setCurrentItem(Integer.MAX_VALUE / 2 - 3); handler.sendEmptyMessageDelayed(1,3000); //觸控事件 ViewPagerTouchEvent(); } private void ViewPagerTouchEvent() { viewpager_vp.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { switch (event.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); break; } return false; } }); } private void changeTextAndDot(int i) { viewpager_tv.setText(descs[i]); for (int j = 0; j < imageResIds.length; j++) { View childAt = ll_dots.getChildAt(i); childAt.setBackgroundResource(j==i ? R.mipmap.dot_focus : R.mipmap.dot_normal); } } private void dot() { View view = new View(this); view.setBackgroundResource(R.mipmap.dot_normal); LinearLayout.LayoutParams layoutParams=new LinearLayout.LayoutParams(8,8); layoutParams.leftMargin=8; view.setLayoutParams(layoutParams); ll_dots.addView(view); } private class Myadapter extends PagerAdapter { @Override public int getCount() { return Integer.MAX_VALUE; } @Override public boolean isViewFromObject(@NonNull View view, @NonNull Object o) { return view==o; } @NonNull @Override public Object instantiateItem(@NonNull ViewGroup container, int position) { ImageView imageView = imageViews.get(position%imageResIds.length); container.addView(imageView); return imageView; } @Override public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) { container.removeView((View) object); } } @Override protected void onDestroy() { super.onDestroy(); handler.removeMessages(1); } }