ViewPager

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>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值