预期效果:
在窗口中会显示4张图片,并且每张图片的会以2s的频率切换,在右下角会有显示图片的指示,都是联动的效果。
活动窗口的启动按钮
<Button
android:id="@+id/btn_test_ADdialog"
android:text="打开广告栏"
android:shadowColor="@color/black"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
在另一个活动窗口中的布局
<!-- 相对布局-->
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<androidx.viewpager.widget.ViewPager
android:id="@+id/vp_adv"
android:layout_width="match_parent"
android:layout_height="300dp"/>
<LinearLayout
android:id="@+id/li_adc"
android:layout_marginTop="-30dp"
android:orientation="horizontal"
android:gravity="right"
android:layout_below="@+id/vp_adv"
android:layout_width="match_parent"
android:layout_height="wrap_content">
</LinearLayout>
</RelativeLayout>
<Button
android:text="测试"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
.java文件
public class Slide_Picture extends AppCompatActivity {
private ImageView indicator; // 表示圆点指示器
private ImageView[] indicators; //保存4个圆点指示器的数组
private boolean isContinue = true; //
private ViewPager viewPager;
private ViewGroup group;
private AtomicInteger index = new AtomicInteger();
private Handler viewHandler = new Handler(){
@Override
public void handleMessage(@NonNull Message msg) {
super.handleMessage(msg);
viewPager.setCurrentItem(msg.what); // 把这个消息设置为当前页
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_slide__picture);
InitView();
}
public void InitView(){
// 绑定数据
viewPager = findViewById(R.id.vp_adv);// 试图页 图片布局
group = findViewById(R.id.li_adc); // 圆点布局
// 四张广告图片加入到集合中进行保存
List<View> listPics = new ArrayList<>();
ImageView img1 = new ImageView(this);
img1.setBackgroundResource(R.drawable.ad1);
listPics.add(img1); // 加载到集合中
ImageView img2 = new ImageView(this);
img2.setBackgroundResource(R.drawable.ad2);
listPics.add(img2); // 加载到集合中
ImageView img3 = new ImageView(this);
img3.setBackgroundResource(R.drawable.ad3);
listPics.add(img3); // 加载到集合中
ImageView img4 = new ImageView(this);
img4.setBackgroundResource(R.drawable.ad4);
listPics.add(img4); // 加载到集合中
// 动态设置4个圆点的属性
indicators = new ImageView[listPics.size()];
for (int i = 0; i< indicators.length; i++){
indicator = new ImageView(this);
// 设置布局的大小
indicator.setLayoutParams(new LinearLayout.LayoutParams(40,40));
// 每个小圆点都有5的距离
indicator.setPadding(5,5,5,5);
indicators[i] = indicator;
if(i == 0){
indicators[i].setBackgroundResource(R.drawable.focus); // 设置指示器的外观
}else{
indicators[i].setBackgroundResource(R.drawable.blur);
}
group.addView(indicators[i]);
}
// 设置viewPager的适配器
viewPager.setAdapter(new MyPagerAdapter(listPics));
// 设置viewPager的页面改变的监听器
viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override // 当从第一个到第二个会触发
public void onPageSelected(int position) {
index.getAndSet(position); //
for(int i = 0; i< indicators.length;i++){
if(i == position){
indicators[i].setBackgroundResource(R.drawable.focus); // 设置外观
}else{
indicators[i].setBackgroundResource(R.drawable.blur);
}
}
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
/* 在鼠标按下的时候等值翻页 */
viewPager.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch(event.getAction()){
case MotionEvent.ACTION_DOWN: // 鼠标压下的时候
isContinue = false;
break;
case MotionEvent.ACTION_UP: // 鼠标抬起的时候
isContinue = true;
break;
}
return false;
}
});
/* 使用多线程自动定时切换viewPage*/
new Thread(new Runnable() {
@Override
public void run() {
while(true){
if(isContinue){
viewHandler.sendEmptyMessage(index.get()) ;// 发送当前页的下标
whatOption();
}
}
}
}).start(); // 启动线程
}
private void whatOption(){
index.incrementAndGet(); // 将当前位置值加1
if(index.get() > indicators.length -1){ // 最后一页
index.getAndAdd(-4); // 当前页减4,变为第0页
}
try {
Thread.sleep(2000); // 休眠2s
}catch (InterruptedException e){
e.printStackTrace();
}
}
}
class MyPagerAdapter extends PagerAdapter {
private List<View> viewList;
// 构造方法 赋值图片的集合
public MyPagerAdapter(List<View> viewList){
this.viewList = viewList;
}
@Override
public int getCount() {
return viewList.size(); // 返回集合的个数
}
@Override
public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
return view == object;
}
@NonNull
@Override
public Object instantiateItem(@NonNull ViewGroup container, int position) {
container.addView(viewList.get(position), 0);
return viewList.get(position);
}
@Override
public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
container.removeView(viewList.get(position));
}
效果:
今天8点才起来,我的天呢,这是怎么了呢?