MainActivity.java:
package com.example.text14_viewpager;
import java.util.ArrayList;
import android.R.integer;
import android.R.interpolator;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.provider.MediaStore.Images;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
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 android.widget.Toast;
public class MainActivity extends Activity {
private ViewPager vp_main;
private TextView tv_main_title;
private LinearLayout ll_main_point_group;
private ArrayList<ImageView> imageViews;
//图片资源Id
private int[] imageIds = {
R.drawable.a,R.drawable.b,R.drawable.c,R.drawable.d,R.drawable.e,
};
//图片标题集合
private String[] imgDescriptions = {
"有型有范儿","周末大放价","加点买一送一","预约活动","京东购物节",
};
//上一次高亮显示的位置
private int prePosition = 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 isDragging = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//ViewPager的使用
//1.在布局文件中定义ViewPager
//2.在代码中实例化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);
}
//4.设置适配器()PagerAdapter_Item 布局_绑定数据
vp_main.setAdapter(new MyPagerAdapter());
//设置监听viewPager页面的改变
vp_main.setOnPageChangeListener(new MyOnPageChangeListene());
//设置中间位置,要保证是ImageViews的整倍数
int item = Integer.MAX_VALUE / 2 -
Integer.MAX_VALUE / 2 % imageViews.size();
vp_main.setCurrentItem(item);
tv_main_title.setText(imgDescriptions[prePosition]);
//发消息
handler.sendEmptyMessageDelayed(0, 3000);
}
class MyOnPageChangeListene implements OnPageChangeListener{
/**
* 当页面滚动状态的时候回调这个方法
* 静止-->滑动 或 滑动-->静止 或 静止-->拖拽
*
*/
@Override
public void onPageScrollStateChanged(int state) {
if (state == ViewPager.SCROLL_STATE_DRAGGING) {
Log.e("TAG","SCROLL_STATE_DRAGGING-->拖拽");
isDragging = true;
}else if(state == ViewPager.SCROLL_STATE_SETTLING){
Log.e("TAG","SCROLL_STATE_SETTLING-->滚动");
}else if(state == ViewPager.SCROLL_STATE_IDLE && isDragging ){
isDragging = false;
Log.e("TAG","SCROLL_STATE_IDLE-->静止");
handler.removeCallbacksAndMessages(null);
handler.sendEmptyMessageDelayed(0, 3000);
}
}
/**
* 当页面滚动的时候回调这个方法
* position 当前页面的位置
* positionOffset 滑动页面的百分比
* positionOffsetPoxels 在屏幕上滑动的像素
*/
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPoxels ) {
// 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(prePosition).setEnabled(false);
//当前的设置为红色
ll_main_point_group.getChildAt(realPosition).setEnabled(true);
prePosition = realPosition;
}
}
class MyPagerAdapter extends PagerAdapter{
//得到图片的总数
@Override
public int getCount() {
return Integer.MAX_VALUE;//int类型的最大值
// return imageViews.size();
}
/**
* 相当于getView的方法
* container viewpager自身
* position 当前实例化页面的位置(下标)
*/
@Override
public Object instantiateItem(ViewGroup container, int position) {
int realPosition = position % imageViews.size();
ImageView imageView = imageViews.get(realPosition);
container.addView(imageView);//添加到ViewPager中
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;
}
return true;
}
});
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();
}
});
return imageView;
}
/**
* 比较View和Object是否是同一个实例
* view1页面
* 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","instantiateItem---->"+position+",object-->"+object);
container.removeView((View)object);
}
}
}
activity_main.xml:
<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="wrap_content"
android:layout_height="match_parent"
/>
<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>