版权声明:叮叮叮!!!! https://blog.csdn.net/Xuexx_520/article/details/83187389
package com.example.xxx.day11_viewpager;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.example.xxx.day11_viewpager.adapter.ViewPagerAdapter;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity {
private ViewPager viewPager;
private String[] texts={
"巩俐不低俗,我就不能低俗",
"扑树又回来啦!再唱经典老歌引万人大合唱",
"揭秘北京电影如何升级",
"乐视网TV版大派送",
"热血屌丝的反杀",
};
private ArrayList<Integer> list;
private TextView tv;
private LinearLayout ll_dots;
private ViewPagerAdapter adapter;
Handler handler=new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
int currentItem=viewPager.getCurrentItem();
currentItem++;
viewPager.setCurrentItem(currentItem);
handler.sendEmptyMessageDelayed(0,2000);
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//初始化控件
initView();
//初始化图片数据
initData();
adapter=new ViewPagerAdapter(MainActivity.this,list);
viewPager.setAdapter(adapter);
//解决无法向左滑动的问题
viewPager.setCurrentItem(list.size()*1000);
//设置ViewPager的滑动监听器,addOnPageChangeListener,set的方法因为名字的原因被淘汰了
viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int i, float v, int i1) {
//同过getCurrentItem方法拿到当前用户所交互ViewPager的item位置.
//通过得到的这个item,给text和点进行选中的设置.
changeDotText(i);
Log.e("scr", i+"" );
Log.e("get", viewPager.getCurrentItem()+"" );
}
@Override
public void onPageSelected(int i) {
Log.e("sel", i+"" );
}
@Override
public void onPageScrollStateChanged(int i) {
}
});
viewPager.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,3000);
break;
}
return false;
}
});
handler.sendEmptyMessageDelayed(0,2000);
}
/**
* 根据ViewPager的item的变化,也就是图片切换的操作,设置对应的点和文本.
* @param currentitem int ViewPager的item,也是图片的位置
*/
private void changeDotText(int currentitem) {
//根据ViewPager的item的变化,设置对应的文本.setText(descs[position]);
tv.setText(texts[currentitem%list.size()]);
//对点进行判断是否是当前页的点,用for循环,拿到所有点的位置,然后和position对比
for(int j=0;j<list.size();j++){
//.getChildAt(x);拿到容器的子控件.得到VIew对象
View dot=ll_dots.getChildAt(j);
//为View设置背景图片,,使用三元运算符.如果是当前页面则圆点变红
dot.setBackgroundResource(j==currentitem%list.size()?R.drawable.dot_focus:R.drawable.dot_normal);
}
}
@Override
protected void onPause() {
super.onPause();
handler.removeCallbacksAndMessages(null);
}
private void initData() {
//添加图片
list=new ArrayList<>();
list.add(R.drawable.a);
list.add(R.drawable.b);
list.add(R.drawable.c);
list.add(R.drawable.d);
list.add(R.drawable.e);
for(int i=0;i<list.size();i++){
//图片数量是多少,添加多少动态小圆点
addDot(i);
}
}
/**
* 动态创建点
*/
private void addDot(int i) {
//创建一个View对象;
View view=new View(this);
//为这个View对象设置背景setBackgroundResource
view.setBackgroundResource(R.drawable.dot_normal);
//为View对象设置宽高参数,使用参数对象LayoutParams(int,int),给哪个容器,就用哪个容器创建
LinearLayout.LayoutParams layoutParams=new LinearLayout.LayoutParams(8,8);
//使用参数对象LayoutParams.leftMargin=int,相当于布局里的padding.
layoutParams.leftMargin=8;
//把准备好的layoutParams参数对象,设置给View对象.setLayoutParams
view.setLayoutParams(layoutParams);
//最后容器对象.addView(VIwe);
ll_dots.addView(view);
}
private void initView() {
viewPager=findViewById(R.id.viewpager);
tv=findViewById(R.id.tv);
ll_dots=findViewById(R.id.ll_dots);
}
}