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>
转载于:https://www.cnblogs.com/feng8026/p/9064416.html
相关资源:ViewPager动画切换效果