activity_main.xml的代码:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="225dp"
android:orientation="vertical"
android:layout_margin="15dp"
tools:context=".MainActivity">
<!--好的现在我们的这里的话就是实现我们的轮播图效果1:第一步当然是编写我们的布局拉不用我多说的-->
<androidx.viewpager.widget.ViewPager
android:id="@+id/loopviewpager"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
<!--使用我们的线性布局的方式来编写我们剩下来的布局文件-->
<LinearLayout
android:layout_gravity="bottom"
android:orientation="horizontal"
android:gravity="center_vertical"
android:background="#33FF99"
android:layout_width="match_parent"
android:layout_height="25dp">
<!--现在的话就是创建我们轮播图的标题-->
<TextView
android:id="@+id/loop_dec"
android:layout_marginLeft="10dp"
android:layout_gravity="left"
android:textColor="@android:color/white"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<!--设置我们的小圆点-->
<LinearLayout
android:id="@+id/ll_dots_loop"
android:orientation="horizontal"
android:gravity="right"
android:layout_marginRight="10dp"
android:padding="10dp"
android:layout_width="match_parent"
android:layout_height="wrap_content">
</LinearLayout>
</LinearLayout>
</FrameLayout>
MainActivity.Java中的代码
package com.example.recycle;
import androidx.appcompat.app.AppCompatActivity;
import androidx.viewpager.widget.ViewPager;
import android.os.Bundle;
import android.text.Html;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity {
private int previousSelectedPosition = 0;
private LinearLayout ll_dots_container;
private ViewPager viewPager;
private LinearLayout ll_dots_loop;
private TextView loop_dec;
private int[] img;
private String[] mDec;
private int[] mImg_id;
private ArrayList<ImageView> imgList;
boolean isRunning = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//接下来的话就是实现我们mainactivity中的代码了接下来的话就是编写代码逻辑来实现我们的代码
ll_dots_container=new LinearLayout(this);
// TODO 实现轮播图的方法
initLoopView();
}
private void initLoopView() {
//第一步的话就是找到我们的控件然后的话转换成一个成员变量 todo 1:
viewPager = (ViewPager) findViewById(R.id.loopviewpager);
ll_dots_loop = (LinearLayout) findViewById(R.id.ll_dots_loop);
loop_dec = (TextView) findViewById(R.id.loop_dec);
//TODO 2 创建一个数组存放我们的图片资源,然后的话准换成我们的成员变量
img = new int[]{
R.mipmap.fragment1,
R.mipmap.fragment2,
R.mipmap.fragment3,
R.mipmap.fragment4,
R.mipmap.fragment5
};
// TODO 3 文本的描述
mDec = new String[]{
"Test1",
"Test2",
"Test3",
"Test4",
"Test5"
};
// TODO 4: 然后的话就是图片的点击效果
mImg_id = new int[]{
R.id.pager_img1,
R.id.pager_img2,
R.id.pager_img3,
R.id.pager_img4,
R.id.pager_img5
};
// todo 6: 初始化5个Imageview
imgList = new ArrayList<>();
ImageView imageView;
View dotView;
LinearLayout.LayoutParams layoutParams;
//todo 对我们的图片进行遍历
for(int i=0 ; i < img.length;i++){
//初始化我们要显示的图片对象
imageView = new ImageView(this);
// 这里的话显示我们要返回的背景资源是通过我们的遍历得到的
imageView.setBackgroundResource(img[i]);
//这里的话就是我们的点击的效果
imageView.setId(mImg_id[i]);
//设置我们的点击事件:
imageView.setOnClickListener(new pagerOnClickListener(getApplicationContext()));
//将我们的图片添加进入我们的泛型中
imgList.add(imageView);
// 添加我们的引导点
dotView = new View(this);
// 这里的话就是创建我们刚刚创建好的图标
dotView.setBackgroundResource(R.drawable.dot);
layoutParams = new LinearLayout.LayoutParams(10,10);
if(i!=0){
layoutParams.leftMargin=10;
}
//设置我们默认的所有都不可用
dotView.setEnabled(false);
ll_dots_container.addView(dotView,layoutParams);
}
ll_dots_container.getChildAt(0).setEnabled(true);
loop_dec.setText(mDec[0]);
previousSelectedPosition=0;
// 设置我们的适配器:
viewPager.setAdapter(new LoopViewAdapter(imgList));
// 把ViewPager设置为默认选中Integer.MAX_VALUE / t2,从十几亿次开始轮播图片,达到无限循环目的;
int m = (Integer.MAX_VALUE / 2) %imgList.size();
int currentPosition = Integer.MAX_VALUE / 2 - m;
viewPager.setCurrentItem(currentPosition);
viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int i, float v, int i1) {
}
@Override
public void onPageSelected(int i) {
int newPosition = i % imgList.size();
loop_dec.setText(mDec[newPosition]);
ll_dots_container.getChildAt(previousSelectedPosition).setEnabled(false);
ll_dots_container.getChildAt(newPosition).setEnabled(true);
previousSelectedPosition = newPosition;
}
@Override
public void onPageScrollStateChanged(int i) {
}
});
// 开启轮询
new Thread(){
public void run(){
isRunning = true;
while(isRunning){
try{
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
//下一条
runOnUiThread(new Runnable() {
@Override
public void run() {
viewPager.setCurrentItem(viewPager.getCurrentItem()+1);
}
});
}
}
}.start();
}
}
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@mipmap/circle2" android:state_checked="true"/>
<item android:drawable="@mipmap/circle1" android:state_checked="false"/>
</selector>
<?xml version="1.0" encoding="utf-8"?>
<!--这里的话就是设置的我们的id值用来监听我们用户的点击动作-->
<resources>
<item name="pager_img1" type="id"></item>
<item name="pager_img2" type="id"></item>
<item name="pager_img3" type="id"></item>
<item name="pager_img4" type="id"></item>
<item name="pager_img5" type="id"></item>
</resources>
package com.example.recycle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import androidx.annotation.NonNull;
import androidx.viewpager.widget.PagerAdapter;
import java.util.ArrayList;
// 这里的话相当于是做出了一个辅助的类然后的话继承的是我们的pagerAdapter方法然后的话就是成为我们viewpager的适配器
public class LoopViewAdapter extends PagerAdapter {
//成员变量
private ArrayList<ImageView> imageViewList;
//这里的话是一个公共的方法
public LoopViewAdapter(ArrayList<ImageView> imgList){
imageViewList = imgList;
}
// TODO 然后的话就是还有我们的显示的方法和我们销毁的方法(使用重写的方式编写出来)
@NonNull
@Override
public Object instantiateItem(@NonNull ViewGroup container, int position) {
// position 表示的是当前要显示的条目的位置
//这个方法的话就是返回要显示的条目创建条目
int newPosition = position % imageViewList.size();
ImageView img = imageViewList.get(newPosition);
//将我们的view对象加入到我们的container容器中
container.addView(img);
return img;
}
@Override
public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
//这个指的是销毁。。。
container.removeView((View)object);
}
// TODO 这个的话是编写我们的循环次数的方法
@Override
public int getCount() {
return Integer.MAX_VALUE;
}
// TODO 这个的话就是我们的啊。。。。。。
@Override
public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
return view == object;
}
}
package com.example.recycle;
import android.content.Context;
import android.view.View;
import android.widget.Toast;
// 这个的话可以看成是我们的辅助类就是创建这个对象来实现我们的这个 View.onclickListener对象
public class pagerOnClickListener implements View.OnClickListener {
Context context;
public pagerOnClickListener(Context context){
this.context = context;
}
@Override
public void onClick(View view) {
//然后的话在这个位置的话就是展示是我们的哪一张图片被点击
switch (view.getId()){
case R.id.pager_img1:
Toast.makeText(context,"图片一被点击",Toast.LENGTH_LONG).show();
break;
case R.id.pager_img2:
Toast.makeText(context,"图片一被点击",Toast.LENGTH_LONG).show();
break;
case R.id.pager_img3:
Toast.makeText(context,"图片一被点击",Toast.LENGTH_LONG).show();
break;
case R.id.pager_img4:
Toast.makeText(context,"图片一被点击",Toast.LENGTH_LONG).show();
break;
case R.id.pager_img5:
Toast.makeText(context,"图片一被点击",Toast.LENGTH_LONG).show();
break;
}
}
}