参考了部分网上资料
原理是RelativeLayout布局里面重叠线性布局 线性布局动态添加小圆点 而小原点添加方式如下:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<solid android:color="#ffffff"/>
</shape>
原点添加的布局文件是在drawable文件夹下
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/find_point_select" android:state_selected="true"/>
<item android:drawable="@drawable/find_point_notselect" android:state_selected="false"/>
</selector>
viewpager的适配器设置:
public class ViewAdpater extends PagerAdapter {
List<ImageView> viewList;
public ViewAdpater(List<ImageView> viewList)
{
this.viewList=new ArrayList<>();
this.viewList.addAll(viewList);
}
@Override
public int getCount() {
return Integer.MAX_VALUE;
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view==object;
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
// 取模的原因 我们将个数设置的无限大 那么取模就相当于循环
int newPosition = position % viewList.size();
ImageView imageView=viewList.get(newPosition);
if(imageView.getParent()!=null) {
// 如果有一个父类就清除否则可能会报错
ViewGroup parent = (ViewGroup) imageView.getParent();
parent.removeView(imageView);
}
else
container.addView(imageView);
return imageView;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
int newPosition = position % viewList.size();
container.removeView(viewList.get(newPosition));
}
}
加载的碎片
public class GlideAD extends Fragment implements ViewPager.OnPageChangeListener {
ViewPager pager;
List<ImageView> viewList;
Handler handler;
// 终止循环
private boolean stop=false;
// 适配器
private ViewAdpater adpater;
// 原点指示器布局
LinearLayout linearLayout;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view=inflater.inflate(R.layout.glidead,container,false);
// 添加小圆点
// 容器
pager=(ViewPager)view.findViewById(R.id.view_pager);
linearLayout=(LinearLayout)view.findViewById(R.id.point_group);
viewList=new ArrayList<>();
// 预设配图
ImageView view1=new ImageView(getContext());
view1.setImageResource(R.drawable.ltpx);
viewList.add(view1);
ImageView view2=new ImageView(getContext());
view2.setImageResource(R.drawable.sjlr);
viewList.add(view2);
ImageView view3=new ImageView(getContext());
view3.setImageResource(R.drawable.smtf);
viewList.add(view3);
for(int i=0;i<viewList.size();i++)
{
// 小原点
ImageView imageView=new ImageView(getContext());
imageView.setImageResource(R.drawable.point_select);
imageView.setSelected(false);
// 绘制大小
int size=getResources().getDimensionPixelSize(R.dimen.normal_point_size);
Log.d("大小:",size+"");
LinearLayout.LayoutParams params=new LinearLayout.LayoutParams(size,size);
params.leftMargin=getResources().getDimensionPixelSize(R.dimen.leftmargin_point_size);
imageView.setLayoutParams(params);
// 添加到容器里
linearLayout.addView(imageView);
}
adpater=new ViewAdpater(viewList);
pager.setAdapter(adpater);
return view;
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
//设置 对viewpager进行监听
pager.addOnPageChangeListener(this);
startRun();
}
public void startRun()
{
final Runnable runnable=new Runnable() {
@Override
public void run() {
// 因为设置的是无线大所以随便加
// 只要活动未停止将一直执行
if (!stop) {
pager.setCurrentItem(pager.getCurrentItem() + 1);
handler.postDelayed(this, 2000);
}else
{
handler.postDelayed(this, 2000);
}
}
};
handler=new Handler();
handler.postDelayed(runnable,2000);
}
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
int lastPosition;
@Override
public void onPageSelected(int position) {
int newposition=position%viewList.size();
// 页面被选中
// 设置当前页面选中
linearLayout.getChildAt(newposition).setSelected(true);
// 设置前一页不选中
linearLayout.getChildAt(lastPosition).setSelected(false);
// 替换位置
lastPosition = newposition;
}
@Override
public void onPageScrollStateChanged(int state) {
switch (state) {
// 静止状态
case SCROLL_STATE_IDLE:
stop = false;
break;
// 拖拽中
case SCROLL_STATE_DRAGGING:
stop = true;
break;
// 拖拽后松手,自动回到最终位置的过程
case SCROLL_STATE_SETTLING:
stop = false;
break;
}
}
}
一些图片大小参数自己随心
关键的布局文件:
<?xml version="1.0" encoding="utf-8"?>
<!--滑动广告-->
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v4.view.ViewPager
android:id="@+id/view_pager"
android:layout_width="match_parent"
android:layout_height="120dp"/>
<!--wrapcontent是为了找准方向-->
<LinearLayout
android:id="@+id/point_group"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:padding="10dp"
android:orientation="horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</RelativeLayout>