Viewpager
Posted feng8026
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Viewpager相关的知识,希望对你有一定的参考价值。
private ViewPager vp_main;
private TextView tv_main_title;
private LinearLayout ll_main_point_group;
private ArrayList<ImageView> imageViews;
//图片资源
private int[] imageIDs = {
R.drawable.a,R.drawable.b,R.drawable.c,
R.drawable.d,R.drawable.e
};
//图片集合标题
private String[] imgDescriptions = {
"游行","放价","家电","新机","火锅"
};
//上一次亮的位置
private int perPosition = 0;
private Handler handler = new Handler(){
public void handleMessage(android.os.Message msg) {
int item = vp_main.getCurrentItem()+1;
vp_main.setCurrentItem(item);
//延迟发信息
handler.sendEmptyMessageDelayed(0, 3000);
};
};
//是否已经拖拽
private Boolean isDriaging =false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
/**
* lisetView的使用
* 在布局文件中定义ViewPager
* 在代码中实列话Viewpager
*
*/
vp_main = (ViewPager) findViewById(R.id.vp_main);
tv_main_title = (TextView) findViewById(R.id.tv_main_title);
ll_main_point_group = (LinearLayout) findViewById(R.id.ll_main_point_group);
//3.准备数据
imageViews=new ArrayList<ImageView>();
for (int i = 0; i < imageIDs.length; i++) {
ImageView imageView = new ImageView(this);
imageView.setBackgroundResource(imageIDs[i]);
//添加到集合
imageViews.add(imageView);
//添加小圆点
ImageView point = new ImageView(this);
point.setBackgroundResource(R.drawable.point_selector);
LinearLayout.LayoutParams params=
new LinearLayout.LayoutParams(8,8);
if (i==0) {
point.setEnabled(true);//显示红色
} else {
point.setEnabled(false);//显示灰色
params.leftMargin=8;
}
point.setLayoutParams(params);
ll_main_point_group.addView(point);
}
//设置适配器PagerAdapter-Item布局——绑定数据
vp_main.setAdapter(new MyPagerAdapter());
//设置监听Viewpager页面的改变
vp_main.setOnPageChangeListener(new MyOnPageChangeListener());
//设置中间位置,要保证是imageViews的整数数倍
int item = Integer.MAX_VALUE / 2 -
Integer.MAX_VALUE / 2 % imageViews.size();
vp_main.setCurrentItem(item);
tv_main_title.setText(imgDescriptions[perPosition]);
//发信息
handler.sendEmptyMessageDelayed(0, 3000);
}
class MyOnPageChangeListener implements OnPageChangeListener{
/**
* 当页面滚动状态变化的时候回调这个方法
* 静止->滑动 或 滑动->静止
*/
@Override
public void onPageScrollStateChanged(int state) {
// TODO Auto-generated method stub
if (state == ViewPager.SCROLL_STATE_DRAGGING) {
isDriaging = true;
Log.e("TAG","SCROLL_STATE_DRAGGING-->拖拽");
}else if (state == ViewPager.SCROLL_STATE_SETTLING) {
Log.e("TAG", "SCROLL_STATE_DRAGGING-->滚动");
}else if (state == ViewPager.SCROLL_STATE_IDLE && isDriaging) {
isDriaging=false;
Log.e("TAG", "SCROLL_STATE_DRAGGING-->静止");
handler.removeCallbacksAndMessages( null);
handler.sendEmptyMessageDelayed(0, 3000);
}
}
/**
* 当页面滚动了的时候回调支个方法
* position 当前页面的位置
* positionOffset 滚动页面的百分比
* positionOffsetPixels 在屏幕上滑动的像素
*/
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
// TODO Auto-generated method stub
}
/**
* 当某个页面被选中了的时候回调
* position 被选中页面的位置
*/
@Override
public void onPageSelected(int position) {
int realPosition = position % imageViews.size();
// 设置对应页面的文本信息
tv_main_title.setText(imgDescriptions[realPosition]);
//把上一个高亮的设置为灰色
ll_main_point_group.getChildAt(perPosition)
.setEnabled(false);
//当前的设置为红色
ll_main_point_group.getChildAt(realPosition)
.setEnabled(true);
perPosition = realPosition;
}}
class MyPagerAdapter extends PagerAdapter{
//得到的图片的总数
@Override
public int getCount() {
// TODO Auto-generated method stub
//return imageViews.size();
return Integer.MAX_VALUE;//int类型的最大值
}
/**
* 相当于getView方法
* container viewpage的自身
* position 当前实列化页面的当前位置
*/
@Override
public Object instantiateItem(ViewGroup container, int position) {
int realPosition = position % imageViews.size();
ImageView imageView = imageViews.get(realPosition);
container.addView(imageView);//添加到viewpage中
Log.e("TAG", "instantiateItem-->"+position +",imageView-->"+imageView);
imageView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN://手指按下
Log.e("TAG", "手指按下");
handler.removeCallbacksAndMessages(null);
break;
case MotionEvent.ACTION_MOVE://手指移动
Log.e("TAG", "手指移动");
break;
case MotionEvent.ACTION_CANCEL://事件取消
Log.e("TAG", "事件取消");
// handler.removeCallbacksAndMessages(null);
// handler.sendEmptyMessageDelayed(0, 3000);
break;
case MotionEvent.ACTION_UP://手指抬起
Log.e("TAG", "手指抬起");
handler.removeCallbacksAndMessages( null);
handler.sendEmptyMessageDelayed(0, 3000);
break;
default:
break;
}
return false;
}
});
imageView.setTag(position);
imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.e("TAG", "点击事件");
int position = (Integer) v.getTag()% imageViews.size();
String text = imgDescriptions[position];
Toast.makeText(MainActivity.this, text, Toast.LENGTH_SHORT).show();
// TODO Auto-generated method stu
}
});
return imageView;
}
/**
* 比较view和object是否视同一个实列
* view 页面
* object 是instantiateitem返回的结构
*/
@Override
public boolean isViewFromObject(View view, Object object) {
// TODO Auto-generated method stub
return view == object;
}
/**
* 释放资源
* container viewpager
* position 要释放的位置
* object 要释放的界面
*/
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
Log.e("TAG", "destroyItem-->"+position +
",object-->"+object);
container.removeView((View)object);
}
}
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval"
>
<size
android:width="8dp"
android:height="8dp"
/>
<solid
android:color="#44000000"
/>
</shape>
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval"
>
<size
android:width="8dp"
android:height="8dp"
/>
<solid
android:color="#ff0000"
/>
</shape>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="${relativePackage}.${activityClass}" >
<android.support.v4.view.ViewPager
android:id="@+id/vp_main"
android:layout_width="match_parent"
android:layout_height="180dp"
/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_alignBottom="@id/vp_main"
android:background="#44000000"
>
<TextView
android:id="@+id/tv_main_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="3dp"
android:gravity="center_horizontal"
android:text="广告"
android:textColor="#FFFFFF"
/>
<LinearLayout
android:id="@+id/ll_main_point_group"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_gravity="center_horizontal"
>
</LinearLayout>
</LinearLayout>
</RelativeLayout>
以上是关于Viewpager的主要内容,如果未能解决你的问题,请参考以下文章
转载---ViewPager,PagerAdapter,FragmentPagerAdapter和FragmentStatePagerAdapter的分析对比
android ViewPager+Fragment 如何在ViewPager的Activity中获取Fragment中的控件对象