<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" > <com.example.dell.exam_huajie.customViwe.AntoViewPager android:id="@+id/xx" android:layout_width="match_parent" android:layout_height="240dp"/> <!-- <Button android:onClick="line_click" android:text="线性" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <Button android:onClick="grid_click" android:text="网格" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <Button android:onClick="pu_click" android:text="瀑布" android:layout_width="wrap_content" android:layout_height="wrap_content" />--> <!--尴尬--> <android.support.v7.widget.RecyclerView android:id="@+id/recycler1" android:layout_weight="1" android:layout_width="match_parent" android:layout_height="0dp"/></LinearLayout>
package com.example.dell.exam_huajie; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.support.v7.widget.GridLayoutManager; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.StaggeredGridLayoutManager; import android.util.Log; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; import com.example.dell.exam_huajie.Bean.BannerBean; import com.example.dell.exam_huajie.customViwe.AntoViewPager; import com.nostra13.universalimageloader.core.ImageLoader; public class MainActivity extends AppCompatActivity { private AntoViewPager antoViewPager; private RecyclerView recyclerView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); antoViewPager = (AntoViewPager) findViewById(R.id.xx); recyclerView = (RecyclerView) findViewById(R.id.recycler1); OkHttoUtil okHttoUtil = new OkHttoUtil(); okHttoUtil.getJsonFromNet("https://www.zhaoapi.cn/ad/getAd"); okHttoUtil.setMyCLick(new OkHttoUtil.MyClick() { @Override public void getdata(BannerBean bannerBean) { Log.e("AA", bannerBean + ""); // 先把数据都设置上 antoViewPager.setViewPagerData(bannerBean.getData()); String[] strings = initTitles(); antoViewPager.setTitles(strings); antoViewPager.showViewPager(); antoViewPager.start(true);//log // 设置RecuclerView 的一些配置 recyclerView.setLayoutManager(new GridLayoutManager(MainActivity.this, 2)); recyclerView.setAdapter(new MyRecycleAdapter(bannerBean.getTuijian())); Log.e("AA", "" + recyclerView); } }); } public String[] initTitles() { String[] t = { "first", "second", "three", "four" }; return t; } // 设置recyclerView的适配器 class MyRecycleAdapter extends RecyclerView.Adapter<MyRecycleAdapter.MyViewholder> { private BannerBean.TuijianBean tuijian; public MyRecycleAdapter(BannerBean.TuijianBean tuijian) { this.tuijian = tuijian; } @Override public MyViewholder onCreateViewHolder(ViewGroup parent, int viewType) { View view = View.inflate(MainActivity.this, R.layout.recycler_layout, null); MyViewholder myViewholder = new MyViewholder(view); return myViewholder; } @Override public void onBindViewHolder(MyViewholder holder, int position) { ImageView icon = holder.getIcon(); TextView title = holder.getTitle(); // shuju BannerBean.TuijianBean.ListBean listBean = tuijian.getList().get(position); String images = listBean.getImages(); String titleStr = listBean.getTitle(); // 这个好像获取好几个图片地址 需要截取一下 只要第一个 String[] urls = images.split("\\|"); ImageLoader.getInstance().displayImage(urls[0], icon); title.setText(titleStr); } @Override public int getItemCount() { return tuijian.getList().size(); } class MyViewholder extends RecyclerView.ViewHolder { private ImageView icon; private TextView title; public MyViewholder(View itemView) { super(itemView); icon = itemView.findViewById(R.id.recycler_img1); title = itemView.findViewById(R.id.recycler_title); } public ImageView getIcon() { return icon; } public TextView getTitle() { return title; } } } public void pu_click(View view){ // 忘了 - - 那就不写 // recyclerView.setLayoutManager(new StaggeredGridLayoutManager(MainActivity.this,new StaggeredGridLayoutManager(),null,2); } }package com.example.dell.exam_huajie; import android.os.Handler; import android.os.Message; import com.example.dell.exam_huajie.Bean.BannerBean; import com.google.gson.Gson; import java.io.IOException; import okhttp3.Call; import okhttp3.Callback; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; /** * Created by dell on 2018/1/28. */ public class OkHttoUtil { private MyClick myCLick; private Handler handler = new Handler(){ @Override public void handleMessage(Message msg) { BannerBean bannerBean = (BannerBean) msg.obj; myCLick.getdata(bannerBean); } }; public void getJsonFromNet(String url){ OkHttpClient okHttpClient = new OkHttpClient(); Request build = new Request.Builder().url(url).build(); Call call = okHttpClient.newCall(build); call.enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { } @Override public void onResponse(Call call, Response response) throws IOException { BannerBean bannerBean = new Gson().fromJson(response.body().string(), BannerBean.class); Message msg = new Message(); msg.obj =bannerBean; handler.sendMessage(msg); } }); } public interface MyClick{ void getdata(BannerBean bannerBean); } public void setMyCLick(MyClick myCLick){ this.myCLick = myCLick; } }package com.example.dell.exam_huajie.customViwe; import android.content.Context; import android.os.Handler; import android.os.Message; import android.os.SystemClock; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.util.AttributeSet; import android.util.Log; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.RelativeLayout; import android.widget.TextView; import com.example.dell.exam_huajie.Bean.BannerBean; import com.example.dell.exam_huajie.R; import com.nostra13.universalimageloader.core.ImageLoader; import java.util.List; /** * Created by dell on 2018/1/28. */ public class AntoViewPager extends RelativeLayout { private List<BannerBean.DataBean> data; private ViewPager viewPager; private TextView title; private LinearLayout liner; private boolean flag; private int count; private String[] titles; private Handler handler = new Handler(){ @Override public void handleMessage(Message msg) { int what = msg.what; viewPager.setCurrentItem(what); Log.e("what",what+""); } }; public AntoViewPager(Context context) { // 让一个参数的构造 调用两个参数的构造 this(context,null); } public AntoViewPager(Context context, AttributeSet attrs) { // 让两个参数的构造 调用三个参数的构造 this(context, attrs,0); } public AntoViewPager(Context context, AttributeSet attrs, int defStyleAttr) { // 逻辑最终都在三个参数的构造中处理 super(context, attrs, defStyleAttr); /** * 首先先布局 ---选择xml布局的方式 简单 */ // 这时候把刚刚的布局文件解析成View对象 View view = View.inflate(context, R.layout.auto_view_pager_layout,null); // 获取里面的控件 并将提升为全局变量 viewPager = view.findViewById(R.id.viewPager); title = view.findViewById(R.id.title); liner = view.findViewById(R.id.liner); // 这一步一定不忘记了 将解析的视图添加到当前容器 this.可以省略 this.addView(view); } // 设置数据的 public void setViewPagerData(List<BannerBean.DataBean> data) { this.data = data; } // 定义ViewPager适配器 class MyAdaper extends PagerAdapter{ @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) { // 创建一个ImageView ImageView imageView = new ImageView(getContext()); // 将图片铺满控件 imageView.setScaleType(ImageView.ScaleType.FIT_XY); // 获取图片的地址 BannerBean.DataBean dataBean = data.get(position%data.size()); String icon = dataBean.getIcon(); ImageLoader.getInstance().displayImage(icon,imageView); // 将ImageView添加到ViewPager中 container.addView(imageView); Log.e("AA","ooo"); return imageView; } @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView((View) object); } } // 显示ViewPager public void showViewPager(){ MyAdaper myAdaper = new MyAdaper(); viewPager.setAdapter(myAdaper); // 第一次显示的标题 if(titles!=null&&titles.length==data.size()){ title.setText(titles[0]); } viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected(int position) { int childCount = liner.getChildCount(); for (int i = 0; i < childCount; i++) { View childAt = liner.getChildAt(i); if(position %data.size()==i){ childAt.setEnabled(true); }else{ childAt.setEnabled(false); } // 设置标题 if(titles!=null&&titles.length==data.size()){ title.setText(titles[position %data.size()]); } } } @Override public void onPageScrollStateChanged(int state) { } }); initDoc(); } // 初始化指示器 private void initDoc(){ // 有多少张图就有多少个点 int size = data.size(); // 创建多少个点 for (int i = 0; i <size ; i++) { View view = new View(getContext()); // 这个就是绘制的一个点的控件 if(i==0){ // view.setEnabled(true); // 默认第一为红色的点 }else{ view.setEnabled(false); // 初始的时候都设置为flase 显示的是红色 } // 设置背景 view.setBackgroundResource(R.drawable.my_selector); // 设置边距 构造中的参数表示view的宽和高 LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(5, 5); // 四边的边距为3 layoutParams.setMargins(3,3,3,3); // 把属性设置到view中 view.setLayoutParams(layoutParams); // 把view放到LinerLayout中 liner.addView(view); } } public void start (final boolean b){ new Thread(){ @Override public void run() { while (b){ count++; SystemClock.sleep(2000); handler.sendEmptyMessage(count); } } }.start(); } public void setTitles(String[] titles){ this.titles = titles; } }<?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"> <!-- 第一个控件是ViewPager --> <android.support.v4.view.ViewPager android:id="@+id/viewPager" android:layout_width="match_parent" android:layout_height="200dp"/> <!-- ````第二个空间是显示的提示语 TextView 让它显示在指示器的下面 --> <TextView android:gravity="center_horizontal" android:id="@+id/title" android:layout_above="@+id/liner" android:layout_width="match_parent" android:layout_height="wrap_content" /> <!-- 让他显示在ViewPager的里面的下方 让它里面的元素居中显示 --> <LinearLayout android:id="@+id/liner" android:gravity="center" android:orientation="horizontal" android:layout_alignBottom="@+id/viewPager" android:layout_width="match_parent" android:layout_height="wrap_content"/> </RelativeLayout>package com.example.dell.exam_huajie; import android.app.Application; import com.nostra13.universalimageloader.core.ImageLoader; import com.nostra13.universalimageloader.core.ImageLoaderConfiguration; /** * Created by dell on 2018/1/28. */ public class MyAppLication extends Application { @Override public void onCreate() { super.onCreate(); ImageLoaderConfiguration build = new ImageLoaderConfiguration.Builder(this).build(); ImageLoader.getInstance().init(build); } }<?xml version="1.0" encoding="utf-8"?> <!--android:shape="oval" 为实心圆--> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval"> <!--设置点的内边距--> <padding android:left="5dp" android:right="5dp"/> <!--棱角的大小--> <corners android:radius="0.5dp"/> <!--设置颜色--> <solid android:color="#ff0000"/> </shape>
自定义轮播和RecyclerView
最新推荐文章于 2024-05-25 09:53:36 发布