<android.support.constraint.ConstraintLayout 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/pager"
android:layout_width="match_parent"
android:layout_height="200dp"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#88000000"
android:orientation="vertical"
android:gravity="center_horizontal"
android:layout_alignBottom="@+id/pager">
<TextView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#000"
android:text="111111111111111"/>
<LinearLayout
android:id="@+id/line"
android:orientation="horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<!-- <View
android:layout_width="5dp"
android:layout_height="5dp"
android:background="@drawable/dot_normal"/>-->
</LinearLayout>
</LinearLayout>
</android.support.constraint.ConstraintLayout>
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 pager;
private TextView text;
private LinearLayout line;
private int[] imageids;
private ArrayList<ImageView> list;
private String[] desc;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initData();
}
private void initData() {
pager = findViewById(R.id.pager);
text = findViewById(R.id.text);
line = findViewById(R.id.line);
imageids = new int[]{R.drawable.a,R.drawable.b,R.drawable.c,R.drawable.d,R.drawable.e};
list = new ArrayList<>();
desc = new String[]{
"巩俐不低俗,我就不能低俗",
"扑树又回来啦!再唱经典老歌引万人大合唱",
"揭秘北京电影如何升级",
"乐视网TV版大派送",
"热血屌丝的反杀"
};
for (int i = 0; i < imageids.length ; i++){
ImageView image = new ImageView(this);
image.setBackgroundResource(imageids[i]);
list.add(image);
//自定义小圆点
//创建一个View对象;
View view = new View(this);
//为这个View对象设置背景setBackgroundResource
view.setBackgroundResource(R.drawable.dot_normal);
//为View对象设置宽高参数,使用参数对象LayoutParams(int,int),给哪个容器,就用哪个容器创建
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(8, 8);
//使用参数对象LayoutParams.leftMargin=int,相当于布局里的padding.
params.leftMargin = 5;
//把准备好的layoutParams参数对象,设置给View对象.setLayoutParams
view.setLayoutParams(params);
//最后容器对象.addView(VIwe);
line.addView(view);
}
//适配器
MyAdapter adapter = new MyAdapter(list);
pager.setAdapter(adapter);
//设置ViewPager的滑动监听器,addOnPageChangeListener,set的方法因为名字的原因被淘汰了
pager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int i, float v, int i1) {
//通过getCurrentItem方法拿到当前用户所交互ViewPager的item位置.
int currentItem = pager.getCurrentItem();
//根据ViewPager的item的变化,设置对应的文本
text.setText(desc[currentItem%list.size()]);
//对点进行判断是否是当前页的点,用for循环,拿到所有点的位置,然后和position对比
for (int j = 0 ; j < imageids.length ; j++){
//.getChildAt(x);拿到容器的子控件.得到VIew对象
View childAt = line.getChildAt(j);
//为View设置背景图片,,使用三元运算符.
childAt.setBackgroundResource(j==i%list.size()?R.drawable.dot_focus:R.drawable.dot_normal);
}
}
@Override
public void onPageSelected(int i) {
}
@Override
public void onPageScrollStateChanged(int i) {
/*if(i == ViewPager.SCROLL_STATE_IDLE){
handler.sendEmptyMessageDelayed(0,2000);
}else{
handler.removeMessages(0);
}*/
}
});
handler.sendEmptyMessage(0);
//给viewpager设置触摸事件
pager.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()){
//按下状态
case MotionEvent.ACTION_DOWN:
//销毁
handler.removeMessages(0);
break;
//移动状态
case MotionEvent.ACTION_MOVE:
//销毁
handler.removeMessages(0);
break;
//抬起状态
case MotionEvent.ACTION_UP:
//换界面
handler.sendEmptyMessageDelayed(0,2000);
break;
}
return false;
}
});
//可以左右滑动
pager.setCurrentItem(Integer.MAX_VALUE/2-4);
}
Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what){
case 0:
int i = pager.getCurrentItem();
pager.setCurrentItem(i+1);
handler.sendEmptyMessageDelayed(0, 2000);
break;
}
}
};
}
//适配器
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;
public class MyAdapter extends PagerAdapter {
private ArrayList<ImageView> list;
public MyAdapter(ArrayList<ImageView> list) {
this.list = list;
}
@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) {
int size = position % list.size();
ImageView imageView = list.get(size);
container.addView(imageView);
return imageView;
}
@Override
public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
container.removeView((View) object);
}
}
//当图片小于3张时,解决 java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child’s parent first.
在ViewPager的适配器中修改
提前销毁
@NonNull
@Override
public Object instantiateItem(@NonNull ViewGroup container, int position) {
int size = position % list.size();
ImageView imageView = list.get(size);
if (imageView.getParent()!=null){
((ViewPager)imageView.getParent()).removeView(imageView);
}
((ViewPager)container).addView(imageView,0);
//container.addView(imageView);
return imageView;
}
@Override
public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
//container.removeView((View) object);
}