package com.example.viewpage; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.support.v7.app.AppCompatActivity; 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; import java.util.ArrayList; public class MainActivity extends AppCompatActivity { private final int[] imags={R.drawable.a,R.drawable.b,R.drawable.c,R.drawable.d}; private final String[] title={"图片一","图片二","图片三","图片四"}; TextView txt_title; ViewPager viewPage; LinearLayout ll_point; ArrayList<ImageView> arraylist; private int prepoint=0; private final int OPTION_TYPE_AUTO =1; private final int OPTION_TYPE_POINT =2; private static int pointClickPosition = 0; //point点击的位置 private Handler handler=new Handler(){ @Override public void handleMessage(Message msg) { int pition=msg.what; switch (pition){ case OPTION_TYPE_AUTO: int currentPostion =viewPage.getCurrentItem(); //获取当前viewpage位置 viewPage.setCurrentItem(++currentPostion,true); handler.sendEmptyMessageDelayed(OPTION_TYPE_AUTO, 3000); //回调handler实现自动轮播 break; case OPTION_TYPE_POINT: //重新设置Adapter 这个地方不设置就会报如下错误 很诡异: // The specified child already has a parent. You must call removeView() on the child's parent first int currentPostion2 = viewPage.getCurrentItem();//获得当前的ViewPage位置 viewPage.setAdapter(new Mydapter()); viewPage.setCurrentItem(currentPostion2 - currentPostion2 %arraylist .size() + pointClickPosition, true); handler.sendEmptyMessageDelayed(OPTION_TYPE_AUTO, 3000);//回调handler 实现自动轮播 break; } } }; private boolean isDragging=false;//是否是滑动状态 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); txt_title=(TextView) findViewById(R.id.txt_title); viewPage=(ViewPager) findViewById(R.id.viewpage); ll_point=(LinearLayout) findViewById(R.id.ll_point); arraylist=new ArrayList<ImageView>(); //写入数据 for (int i=0;i<imags.length;i++){ ImageView imv=new ImageView(this); imv.setBackgroundResource(imags[i]); //添加到集合 arraylist.add(imv); //添加控制点 ImageView point=new ImageView(this); point.setBackgroundResource(R.drawable.selet_point); LinearLayout.LayoutParams parms=new LinearLayout.LayoutParams(8,8); if(i==0){ point.setEnabled(true);//显示红色 }else{ point.setEnabled(false);//显示灰色 parms.leftMargin=8; } point.setLayoutParams(parms); ll_point.addView(point); } viewPage.setAdapter(new Mydapter()); txt_title.setText(title[0]); //监听 Viewpage界面改变 viewPage.addOnPageChangeListener(new myPageChange()); //设置中间值 int items=Integer.MAX_VALUE/2-Integer.MAX_VALUE/2%arraylist.size(); viewPage.setCurrentItem(items); //延迟发送handler消息 用于启动ViewPage自动轮播 handler.sendEmptyMessageDelayed(OPTION_TYPE_AUTO, 3000); for (int i = 0; i < ll_point.getChildCount(); i++) { final View point = ll_point.getChildAt(i); final int finalI = i; point.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { pointClickPosition = finalI; handler.removeCallbacksAndMessages(null); handler.sendEmptyMessageDelayed(OPTION_TYPE_POINT, 50); for (int j = 0; j < ll_point.getChildCount(); j++) { ll_point.getChildAt(j).setEnabled(true); } point.setEnabled(false); } }); } } class myPageChange implements ViewPager.OnPageChangeListener{ /** * 当前页面滚动了的时候回调的方法 * @param position 当前页面的位置 * @param positionOffset 滑动页面的百分比 * @param positionOffsetPixels 在我们屏幕上滑动的像素 */ @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } /** *当某个页面被选中的时候回调 * @param position 被选中页面的位置 */ @Override public void onPageSelected(int position) { int relposition=position%arraylist.size(); //设置文本信息 txt_title.setText(title[relposition]); //把上一个高亮的设置默认-灰色 ll_point.getChildAt(prepoint).setEnabled(false); // 当前页面变成高亮-红色 ll_point.getChildAt(relposition).setEnabled(true); prepoint=relposition; } /** * 当页面滚动状态变化的时候回到 * 静止-->滑动 * 滑动-->静止 * 静止-->拖拽 * @param state */ @Override public void onPageScrollStateChanged(int state) { if(state==ViewPager.SCROLL_STATE_DRAGGING){ //拖拽 isDragging=true; handler.removeCallbacksAndMessages(null); }else if(state==ViewPager.SCROLL_STATE_SETTLING){ //滑动 }else if(state==ViewPager.SCROLL_STATE_IDLE&&isDragging){ //空闲 isDragging=false; handler.removeCallbacksAndMessages(null); handler.sendEmptyMessageAtTime(OPTION_TYPE_AUTO, 3000); } } } class Mydapter extends PagerAdapter{ /** * 得到图片总数 * @return */ @Override public int getCount() { return Integer.MAX_VALUE; } /** * 相当于getView * @param container viewpage 自身 * @param position 当前实例化界面位置 * @return */ @Override public Object instantiateItem(ViewGroup container, int position) { int relposition=position%arraylist.size();//获取无线滑动 ImageView imv =(ImageView)arraylist.get(relposition); container.addView(imv); //添加到viewpage中 //监听Touch事件,长按图片是静止viewpage滚动 viewPage.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()){ case MotionEvent.ACTION_DOWN: //鼠标按下时移除handler handler.removeCallbacksAndMessages(null); break; case MotionEvent.ACTION_MOVE: break; case MotionEvent.ACTION_UP: //鼠标抬起时移除handler,并重新发送handler handler.removeCallbacksAndMessages(null); handler.sendEmptyMessageDelayed(OPTION_TYPE_AUTO, 3000); break; } return false;//返回false,表示不消费触摸操作,仍然可以触发其他操作 } }); imv.setTag(position); imv.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //点击事件 int potison=(int)v.getTag()%arraylist.size(); String text=title[potison]; Toast.makeText(MainActivity.this, "txt=="+text, Toast.LENGTH_SHORT).show(); } }); return imv; } /** * 比较View和Object是否是同一个实例 * @param view * @param object * @return */ @Override public boolean isViewFromObject(View view, Object object) { return view==object; } /** * 释放资源 * @param container viewpage * @param position 要释放的位置 * @param object 要释放的页面 */ @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView((View) object); // super.destroyItem(container, position, object); } } } activity_main.xml<?xml version="1.0" encoding="utf-8"?> <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="com.example.viewpage.MainActivity"> <android.support.v4.view.ViewPager android:id="@+id/viewpage" android:layout_width="match_parent" android:layout_height="180dp"> </android.support.v4.view.ViewPager> <LinearLayout android:background="#44000000" android:layout_width="match_parent" android:layout_alignBottom="@+id/viewpage" android:padding="5dp" android:orientation="vertical" android:layout_height="wrap_content"> <TextView android:id="@+id/txt_title" android:layout_gravity="center_horizontal" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="图片一" /> <LinearLayout android:id="@+id/ll_point" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:orientation="horizontal"> </LinearLayout> </LinearLayout> </RelativeLayout> select_point.xml<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_enabled="false" android:drawable="@drawable/point_normal"/> <item android:state_enabled="true" android:drawable="@drawable/point_press"/> </selector> point_press.xml<?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>
Android 广告轮询播放
最新推荐文章于 2023-05-23 20:25:59 发布