您的位置:首页 > 其它

ViewPager无限轮播中,点击或触摸轮播图停止轮播,XListView添加头部

2017-08-25 10:43 423 查看
package com.example.lunbodot;

import android.os.Handler;
import android.os.Message;
import android.support.v4.view.PagerAdapter;
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.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;

import com.nostra13.universalimageloader.core.ImageLoader;

import java.util.ArrayList;
import java.util.List;

import view.xlistview.XListView;

public class MainActivity extends AppCompatActivity {

private String url1 = "http://img5.imgtn.bdimg.com/it/u=3629051820,2764725225&fm=26&gp=0.jpg";
private String url2 = "http://img2.imgtn.bdimg.com/it/u=3812208990,560486562&fm=26&gp=0.jpg";
private String url3 = "http://img3.imgtn.bdimg.com/it/u=3370075549,3816287382&fm=26&gp=0.jpg";
private String url4 = "http://img4.imgtn.bdimg.com/it/u=2803176387,402242983&fm=26&gp=0.jpg";
private ViewPager vp;

private List<String> list = new ArrayList<>();
private List<String> list2 = new ArrayList<>();
private int curr;
private LinearLayout ll;
private XListView xlv;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

initview();

addlist();

initDot();

vp.setAdapter(new MyAdapter());

vp.setCurrentItem(1);

vp.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

}

@Override
public void onPageSelected(int position) {

if(position == 0){
curr = 4;
}else if(position == 5){
curr = 1;
}else{
curr = position;
}
for (int i = 0; i < ll.getChildCount(); i++) {
//获取孩子
ImageView child = (ImageView) ll.getChildAt(i);
if(i == curr-1){
child.setImageResource(R.drawable.select);
}else{
child.setImageResource(R.drawable.normal);
}
}
}

@Override
public void onPageScrollStateChanged(int state) {
if(state == vp.SCROLL_STATE_IDLE){
vp.setCurrentItem(curr,false);
}
}
});

h.postDelayed(ru,1000);

//XListView适配器
xlv.setAdapter(new BaseAdapter() {
@Override
public int getCount() {
return list2.size();
}

@Override
public Object getItem(int i) {
return null;
}

@Override
public long getItemId(int i) {
return 0;
}

@Override
public View getView(int i, View view, ViewGroup viewGroup) {

if(view == null){
view = View.inflate(MainActivity.this, R.layout.listview_item, null);
}

TextView tv = view.findViewById(R.id.tv_msg);

tv.setText(list2.get(i));

return view;
}
});
}

//添加小圆点
private void initDot() {
for (int i = 0; i < 4; i++) {
ImageView iv = new ImageView(this);
if(i == 0){
iv.setImageResource(R.drawable.select);
}else{
iv.setImageResource(R.drawable.normal);
}

LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(30,30);
params.setMargins(5,5,5,5);

ll.addView(iv,params);
}
}

//添加内容
private void addlist() {
//ViewPager图片路径
list.add(url4);
list.add(url1);
list.add(url2);
list.add(url3);
list.add(url4);
list.add(url1);

//XListView展示条目
list2.add("11111111111111111111");
list2.add("22222222222222222222");
list2.add("33333333333333333333");
list2.add("44444444444444444444");
list2.add("55555555555555555555");
list2.add("66666666666666666666");
list2.add("77777777777777777777");
list2.add("88888888888888888888");

}

//查找控件
private void initview() {

View view = View.inflate(this, R.layout.head_item, null);
vp = view.findViewById(R.id.vp_viewpager);
ll = view.findViewById(R.id.ll);

xlv = (XListView) findViewById(R.id.xlv_listview);

xlv.addHeaderView(view);

}

class MyAdapter extends PagerAdapter{

@Override
public int getCount() {
return list.size();
}

@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
}

@Override
public Object instantiateItem(ViewGroup container, int position) {

View inflate = View.inflate(MainActivity.this, R.layout.item, null);

ImageView iv = inflate.findViewById(R.id.iv_img);

ImageLoader.getInstance().displayImage(list.get(position),iv);

container.addView(inflate);

return inflate;
}

@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((View) object);
}
}

//实例化一个Handler对象
Handler h = new Handler();

//要想点击不自动轮滑,必须用Runnable接口实现
Runnable ru = new Runnable() {
@Override
public void run() {
int currentItem = vp.getCurrentItem();

currentItem++;
vp.setCurrentItem(currentItem);

h.postDelayed(ru,1000);

}
};

//触摸事件
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {

int action = ev.getAction();
if(action == MotionEvent.ACTION_DOWN ||action == MotionEvent.ACTION_MOVE){
h.removeCallbacks(ru);
}else if(action == MotionEvent.ACTION_UP){
h.postDelayed(ru,1000);
}

return super.dispatchTouchEvent(ev);
}

//生命周期
@Override
protected void onStop() {
super.onStop();
h.removeCallbacks(ru);
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: