package com.example.test14_viewpager;
import java.util.ArrayList;
import android.app.Activity;
import android.net.NetworkInfo.State;
import android.os.Bundle;
import android.os.Handler;
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);
//添加到集合中
imageViews.add(imageView);
}
//4.设置适配器(PagerAdapter)-Item布局-绑定数据
vp_main.setAdapter(new MyPagerAdapter());
//设置监听ViewPager页面的改变
vp_main.setOnPageChangeListener(new MyOnPageChangeListener());
//设置中间位置,要保证是imageView的整数倍
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 MyOnPageChangeListener implements OnPageChangeListener{
//静止》滑动 或 滑动》静止 或 静止》拖拽
@Override
public void onPageScrollStateChanged(int state) {
if (state == ViewPager.SCROLL_STATE_DRAGGING) {
isDragging=true;
}else if(state == ViewPager.SCROLL_STATE_SETTLING){
}else if(state == ViewPager.SCROLL_STATE_IDLE && isDragging){
isDragging=false;
handler.removeCallbacksAndMessages(null);
handler.sendEmptyMessageDelayed(0, 3000);
}
}
//当页面滚动了的时候回调这个方法
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
//当某个页面被选中了的时候回调
@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中
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);
}
return false;
}
});
imageView.setTag(position);
imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int position=(Integer) v.getTag() % imageViews.size();
String text=imgDescriptions[position];
Toast.makeText(MainActivity.this, text, Toast.LENGTH_SHORT).show();
}
});
return imageView;
}
//比较View和Object是否是同一个实例
//view 页面
//object 是instantiateItem返回的结果
@Override
public boolean isViewFromObject(View view, Object object) {
return view==object;
}
//释放资源
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
// TODO Auto-generated method stub
container.removeView((View) object);
}
}
}
1<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>