XML:
<android.support.constraint.ConstraintLayout 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="match_parent"
tools:context=".MainActivity">
<android.support.v4.view.ViewPager
android:id="@+id/banner"
android:layout_width="0dp"
android:layout_height="250dp"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
></android.support.v4.view.ViewPager>
<LinearLayout
android:id="@+id/dots"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:orientation="horizontal"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintBottom_toBottomOf="@id/banner"
android:padding="8dp"
>
</LinearLayout>
<TextView
android:id="@+id/desc"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:maxLines="1"
android:ellipsize="end"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toLeftOf="@id/dots"
app:layout_constraintBottom_toBottomOf="@id/banner"
/>
<ImageView
android:id="@+id/imageView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:srcCompat="@drawable/select_dot"
tools:layout_editor_absoluteX="80dp"
tools:layout_editor_absoluteY="320dp" />
</android.support.constraint.ConstraintLayout>
Drawable文件下的xml:
选中状态xml:
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval"
>
<size
android:width="8dp"
android:height="8dp"
/>
<solid android:color="#900000"/>
</shape>
未选中状态xml:
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval"
>
<size
android:width="8dp"
android:height="8dp"
/>
<solid
android:color="#909090"
/>
</shape>
selectxml:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/shapezhong" android:state_selected="true" />
<item android:drawable="@drawable/shape_wei"/>
</selector>
``
Activity:
private String lujing=“https://api.tianapi.com/wxnew/?key=c4aa776e0a51d57d6750511e2baa46b6&num=6&page=1”;
private Mypager mypager;
private LinearLayout dots;
private ViewPager banner;
private TextView desc;
private int INDER=-1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
banner = findViewById(R.id.banner);
dots = findViewById(R.id.dots);
desc = findViewById(R.id.desc);
mypager=new Mypager(this);
banner.setAdapter(mypager);
banner.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int i, float v, int i1) {
}
@Override
public void onPageSelected(int i) {
//改变文件
desc.setText(mypager.getItem(i).getTitle());
//改变当前点
dots.getChildAt(i%dots.getChildCount()).setSelected(true);
//还原原来的点
if (INDER>=0){
dots.getChildAt(INDER%dots.getChildCount()).setSelected(false);
}
INDER=i;
}
@Override
public void onPageScrollStateChanged(int i) {
}
});
initData();
}
private void initData() {
NetUtil.yibu(lujing, Bean.class, new NetUtil.CallBack<Bean>() {
@Override
public void getdata(Bean o) {
if (!o.ispanduan()||o==null){
Toast.makeText(MainActivity.this, "网络不可用", Toast.LENGTH_SHORT).show();
return ;
}
mypager.setList(o.getNewslist());
//设置指示器的数量
initDot(o.getNewslist().size());
//图片的默认位置---中间
int center = mypager.getCount() / 2;
center=center-center%o.getNewslist().size();
banner.setCurrentItem(center);
//启动轮播
startLooper();
}
});
}
@SuppressLint("HandlerLeak")
private Handler handler=new Handler(){
@Override
public void handleMessage(Message msg) {
banner.setCurrentItem(banner.getCurrentItem()+1);
handler.sendEmptyMessageDelayed(0,2000);
}
};
private void startLooper() {
handler.removeMessages(0);
handler.sendEmptyMessageDelayed(0,2000);
}
private void initDot(int size){
dots.removeAllViews();
for (int i=0;i<size;i++){
ImageView imageView=new ImageView(this);
imageView.setBackgroundResource(R.drawable.select_dot);
//参数布局:宽高包裹 左右间距
LinearLayout.LayoutParams params=
new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT);
//间距
int margin = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 2, getResources().getDisplayMetrics());
params.leftMargin=margin;
params.rightMargin=margin;
dots.addView(imageView,params);
}
}
PagerAdapter:
private List<Bean.Newslist> list;
private Context context;
public Mypager(Context context) {
this.context = context;
list=new ArrayList<>();
}
public void setList(List<Bean.Newslist> slist) {
if (slist!=null){
list.addAll(slist);
}
notifyDataSetChanged();
}
@Override
public int getCount() {
return list.size()>0?5000:0;
}
public Bean.Newslist getItem(int position){
return list.get(position%list.size());
}
@Override
public boolean isViewFromObject(@NonNull View view, @NonNull Object o) {
return view==o;
}
@NonNull
@Override
public Object instantiateItem(@NonNull ViewGroup container, int position) {
ImageView imageView=new ImageView(context);
imageView.setScaleType(ImageView.ScaleType.FIT_XY);
ImageLoader.getInstance().displayImage(getItem(position).getPicUrl(),imageView);
container.addView(imageView);
return imageView;
}
@Override
public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
container.removeView((View)object);
}
工具类:
//接口
public interface CallBack<T>{
void getdata(T t);
}
//异步任务
public static void yibu(String lujing, final Class clazz, final CallBack callBack){
new AsyncTask<String, Void, Object>() {
@Override
protected Object doInBackground(String... strings) {
return NetUtil.jiexi(strings[0],clazz);
}
@Override
protected void onPostExecute(Object o) {
callBack.getdata(o);
}
}.execute(lujing);
}
//网络解析
public static <T> T jiexi(String lujing,Class clazz){
T t = (T) new Gson().fromJson(NetUtil.geturl(lujing), clazz);
return t;
}
//网络请求
public static String geturl(String lujing){
String result="";
try {
URL url=new URL(lujing);
HttpURLConnection urlConnection= (HttpURLConnection) url.openConnection();
urlConnection.setRequestMethod("GET");
urlConnection.setReadTimeout(5000);
urlConnection.setConnectTimeout(5000);
if (urlConnection.getResponseCode()==200){
result=NetUtil.zifu(urlConnection.getInputStream());
}
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
private static String zifu(InputStream inputStream) throws IOException {
InputStreamReader inputStreamReader=new InputStreamReader(inputStream);
BufferedReader buff=new BufferedReader(inputStreamReader);
StringBuilder builder=new StringBuilder();
for (String imp=buff.readLine();imp!=null;imp=buff.readLine()){
builder.append(imp);
}
return builder.toString();
}
App:
@Override
public void onCreate() {
super.onCreate();
DisplayImageOptions options=new DisplayImageOptions.Builder()
.cacheInMemory(true)
.cacheOnDisk(true)
.build();
ImageLoaderConfiguration configuration=new ImageLoaderConfiguration.Builder(this)
.memoryCacheSizePercentage(10)
.diskCacheSize(2010241024)
.defaultDisplayImageOptions(options)
.build();
ImageLoader.getInstance().init(configuration);
}