Activity
public class MainActivity extends AppCompatActivity { ViewPager vp_ma; //ViewPager LbUtils Lu;//数据请求的包 LbBean lb; //LbBean包 LbApdata lbApdata; //轮播图的适配器 List<ImageView> list; //用于存放轮播图的图片额集合 List<LbBean.NewslistBean> list1; //轮播图的bena包 private List<ImageView> imagesList; //用于存放小圆点的集合 LinearLayout linearLayout; //小园点的布局控件 Button bt_ma; //Button按钮用于实现跳转 //handler机制 //用于实现无限轮播 private Handler handler = new Handler(){ public void handleMessage(Message msg) { //获取当前条目 int index = vp_ma.getCurrentItem(); //向右轮播 vp_ma.setCurrentItem(index+=1); //间隔2秒 handler.sendEmptyMessageDelayed(1,1000);//轮播图轮播的速度 }; }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //找控件 vp_ma = (ViewPager) findViewById(R.id.vp_ma); linearLayout = (LinearLayout) findViewById(R.id.linearLayout); bt_ma = (Button) findViewById(R.id.bt_ma); getBeanByGson(); //viewPager页面改变的监听事件 小圆点的监听 vp_ma.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected(int position) { //如果选中了这一页,,,当前小圆点红色,,,否则绿色 for (int i = 0;i<imagesList.size();i++){ if (i== position%imagesList.size()){ imagesList.get(i).setImageResource(R.drawable.doc_select); }else { imagesList.get(i).setImageResource(R.drawable.doc_select_no); } } } @Override public void onPageScrollStateChanged(int state) { } }); //给Button一个点击事件 用于跳转 bt_ma.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent = new Intent(MainActivity.this,Activity.class); startActivity(intent); } }); } //轮播图的解析 public void getBeanByGson() { // 使用该方法得到了一个 Json的字符输入流 new AsyncTask<String, String, String>() { @Override protected String doInBackground(String... strings) { String reader = LbUtils.getNetDataStr(); return reader; } @Override protected void onPostExecute(String s) { super.onPostExecute(s); // 使用Gson把该字符输入流转换成JavaBean Gson gson = new Gson(); lb = gson.fromJson(s, LbBean.class); list = new ArrayList<ImageView>(); list1 = new ArrayList<>(); list1.addAll(lb.getNewslist()); for (int i = 0; i < list1.size(); i++) { ImageView imageView = new ImageView(MainActivity.this); imageView.setScaleType(ImageView.ScaleType.FIT_XY); ImageLoader.getInstance().displayImage(list1.get(i).getPicUrl(), imageView); list.add(imageView); } initDoc(); lbApdata = new LbApdata(list); vp_ma.setAdapter(lbApdata); handler.sendEmptyMessageDelayed(1, 1000);//轮播图轮播的速度 } }.execute(); } private void initDoc() { //首先需要一个集合记录这些小圆点的图片,,,,当页面切换的时候,可以从集合中取出imageView进行显示图片的设置 imagesList = new ArrayList<>(); linearLayout.removeAllViews();//清空/移除所有的view for (int i = 0;i<list.size();i++){ ImageView imageView = new ImageView(MainActivity.this); if (i==0){//显示第一页,,,红的 imageView.setImageResource(R.drawable.doc_select); }else {//绿的 imageView.setImageResource(R.drawable.doc_select_no); } //添加到集合 imagesList.add(imageView); //加入到线性布局中显示 LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,LinearLayout.LayoutParams.WRAP_CONTENT); params.setMargins(5,0,5,0);//这是小圆点间距 linearLayout.addView(imageView,params);//把小圆点存放到布局中 } } }
Activity布局
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.yuekaolx.MainActivity"> <android.support.v4.view.ViewPager android:id="@+id/vp_ma" android:layout_width="match_parent" android:layout_height="match_parent"> </android.support.v4.view.ViewPager> <LinearLayout android:id="@+id/linearLayout" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBottom="@+id/vp_ma" android:layout_centerHorizontal="true" android:layout_marginBottom="20dp" android:orientation="horizontal"> </LinearLayout> <Button android:id="@+id/bt_ma" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="进入主界面" android:layout_alignParentBottom="true" android:layout_alignParentRight="true" android:layout_alignParentEnd="true" /> </RelativeLayout>
跳转后页面 TabLayout
public class Activity extends AppCompatActivity { TabLayout tab; //横向布局 ViewPager vp_ac;//ViewPage List<String> listStr; //用于存放添加Fragment的结合 List<Fragment> listTv;//用于存放Fragment的集合 private ListView lv; //侧滑的控件 private DrawerLayout drawerLayout; //侧滑 List<PullBean.ResultBean.ListBean> lsit; //PuiiBean的结合 PullBean Pb; //PullBean包 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_); //找控件 tab = (TabLayout) findViewById(R.id.tab); vp_ac = (ViewPager) findViewById(R.id.vp_ac); ListView lv = (ListView) findViewById(R.id.lv); //侧滑的集合 List<String> list = new ArrayList<>(); //给侧滑页面添加数据 list.add("数据1"); list.add("数据2"); list.add("数据3"); //侧滑的适配器 ArrayAdapter<String> array = new ArrayAdapter<String>(Activity.this, android.R.layout.simple_list_item_1, list); lv.setAdapter(array); init(); //侧滑的数据调用 //TabLayout的横向布局 添加数据 listStr = new ArrayList(); listStr.add("美女"); listStr.add("段子"); listStr.add("社会"); listStr.add("汽车"); listStr.add("博客"); listStr.add("前端"); listStr.add("公司"); listStr.add("资讯"); listStr.add("视频"); listStr.add("文学"); listTv = new ArrayList<>(); for (int i = 0; i < 10; i++) { listTv.add(new NewsFragment(listStr.get(i))); } vp_ac.setAdapter(new MyAdapter(getSupportFragmentManager())); //ViewpAge的预加载解决方法 vp_ac.setOffscreenPageLimit(listTv.size()); //TabLayout和ViewPage进行联动 tab.setupWithViewPager(vp_ac); } //ViewPage的适配器 class MyAdapter extends FragmentPagerAdapter { public MyAdapter(FragmentManager fm) { super(fm); } @Override public Fragment getItem(int position) { return listTv.get(position); } @Override public int getCount() { return listTv.size(); } @Override public CharSequence getPageTitle(int position) { return listStr.get(position); } } //侧滑 private void init() { drawerLayout = (DrawerLayout) findViewById(R.id.mydraw); lv = (ListView) findViewById(R.id.lv); //点击lv的条目,关闭侧滑,在主界面显示相关详细 lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { drawerLayout.closeDrawer(lv);//关闭侧滑 //改变主界面 String str = parent.getItemAtPosition(position).toString(); } }); } }
TabLayout布局
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" xmlns:app="http://schemas.android.com/apk/res-auto" tools:context="com.example.yuekaolx.Activity"> <android.support.design.widget.TabLayout android:id="@+id/tab" android:layout_width="match_parent" android:layout_height="wrap_content" app:tabGravity="center" app:tabIndicatorColor="@color/colorAccent" app:tabMode="scrollable" app:tabSelectedTextColor="@color/colorPrimaryDark" app:tabTextColor="@color/colorPrimary" > </android.support.design.widget.TabLayout> <android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/mydraw" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/colorAccent" > <android.support.v4.view.ViewPager android:id="@+id/vp_ac" android:layout_below="@+id/tab" android:layout_width="match_parent" android:layout_height="match_parent"> </android.support.v4.view.ViewPager> <ListView android:id="@+id/lv" android:layout_width="240sp" android:layout_height="match_parent" android:layout_gravity="start" android:choiceMode="singleChoice" android:divider="#f00" android:dividerHeight="1dp" android:background="#fff" /> </android.support.v4.widget.DrawerLayout> <TextView android:id="@+id/tv" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout>
TabLyout的Fragment数据
public class NewsFragment extends Fragment { PullToRefreshListView refresh_list_view; //用于实现上拉刷新下拉加载 List<PullBean.ResultBean.ListBean> list = new ArrayList<>(); //上拉刷新下拉啊加载的结合 boolean boo; int NUM=1; //实现刷新的时候可以加载更多和刷新不同的数据 LbUtils lb; //数据的请求包 PullBean PB; //PullBean包 MyApdata myApdata; //适配器 ListView lv; public NewsFragment(String s) { } @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { //找布局 View view = View.inflate(getActivity(),R.layout.fragment,null); //找控件 refresh_list_view = view.findViewById(R.id.refresh_list_view); //设置打开文件方式 refresh_list_view.setMode(PullToRefreshBase.Mode.BOTH); lv = view.findViewById(R.id.lv); return view; } @Override public void onActivityCreated(@Nullable Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); //这用于实现上拉刷新下拉加载 ILoadingLayout startLabels = refresh_list_view .getLoadingLayoutProxy(true, false); startLabels.setPullLabel("下拉刷新"); startLabels.setRefreshingLabel("正在拉"); startLabels.setReleaseLabel("放开刷新"); ILoadingLayout endLabels = refresh_list_view.getLoadingLayoutProxy( false, true); endLabels.setPullLabel("上拉刷新"); endLabels.setRefreshingLabel("正在载入..."); endLabels.setReleaseLabel("放开刷新..."); ListGson(); //PullToRefreshListView给他一个监听用于监听上拉还是下拉 refresh_list_view.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() { @Override public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) { NUM++; boo = true; ListGson(); } @Override public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) { NUM++; boo = false; ListGson(); } }); } //异步请求数据 public void ListGson(){ new AsyncTask<String,String,String>(){ @Override protected String doInBackground(String... strings) { String read = LbUtils.getNetData(); return read; } @Override protected void onPostExecute(String result) { super.onPostExecute(result); Gson gson = new Gson(); PullBean PB = gson.fromJson(result, PullBean.class); list.addAll(0,PB.getResult().getList());//把数据存放到集合中 setAdapter(list);//发送集合 refresh_list_view.onRefreshComplete(); } }.execute(); } //给适配器做判断 public void setAdapter(List<PullBean.ResultBean.ListBean> list){ if(myApdata == null){ myApdata = new MyApdata(list,getActivity()); refresh_list_view.setAdapter(myApdata); }else{ myApdata.notifyDataSetChanged(); } } }
布局文件
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <com.handmark.pulltorefresh.library.PullToRefreshListView xmlns:ptr="http://schemas.android.com/apk/res-auto" android:layout_height="match_parent" android:layout_width="match_parent" android:id="@+id/refresh_list_view" ptr:ptrDrawable="@drawable/default_ptr_flip" ptr:ptrAnimationStyle="flip" ptr:ptrHeaderBackground="#383838" ptr:ptrHeaderTextColor="#FFFFFF" > </com.handmark.pulltorefresh.library.PullToRefreshListView> </LinearLayout>
轮播适配器
//轮播图的适配器 public class LbApdata extends PagerAdapter{ List<ImageView> list = new ArrayList<>(); public LbApdata(List<ImageView> list) { this.list = list; } @Override public int getCount() { return Integer.MAX_VALUE;//Integer.MAX_VALUE可实现无限轮播 } @Override public boolean isViewFromObject(View view, Object object) { return view == object;//固定的 } @Override public Object instantiateItem(ViewGroup container, int position) { position %= list.size(); container.addView(list.get(position)); return list.get(position); } @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView((View) object); } }PullToRefreshListView适配器
public class MyApdata extends BaseAdapter { //构造参数 List<PullBean.ResultBean.ListBean> list; //创建上下文 Context context; public MyApdata(List<PullBean.ResultBean.ListBean> list, Context context) { this.list = list; this.context = context; } //有几个条目类型 @Override public int getViewTypeCount() { return 2; } //判断怎样分辨每个条目的位置 @Override public int getItemViewType(int position) { if(position%2==0){ return 0; }else{ return 1; } } @Override public int getCount() { return list.size(); } @Override public Object getItem(int i) { return list.get(i); } @Override public long getItemId(int i) { return i; } @Override public View getView(int i, View view, ViewGroup viewGroup) { ViewHolder holder=null; ViewHolder2 holder2 = null; int type = getItemViewType(i); //进行多条目的判断 switch (type){ //如果为0,则是第一种布局 case 0: if(view==null){ view=View.inflate(context,R.layout.itme_one,null); holder=new ViewHolder(); holder.iv_one= (ImageView) view.findViewById(R.id.iv_one); holder.tv_one= (TextView) view.findViewById(R.id.tv_one); view.setTag(holder); }else{ holder= (ViewHolder) view.getTag(); } holder.tv_one.setText(list.get(i).getTitle()); ImageLoader.getInstance().displayImage(list.get(i).getFirstImg(),holder.iv_one); break; //如果为1,则是第二种布局 case 1: if(view==null){ view=View.inflate(context,R.layout.itme_two,null); holder2=new ViewHolder2(); holder2.tv_two= (TextView) view.findViewById(R.id.tv_two); view.setTag(holder2); }else{ holder2= (ViewHolder2) view.getTag(); } holder2.tv_two.setText(list.get(i).getTitle()); break; } DisplayImageOptions build = new DisplayImageOptions.Builder() .cacheInMemory(true) .cacheOnDisk(true) .showImageForEmptyUri(R.mipmap.ic_launcher) .showImageOnFail(R.mipmap.ic_launcher) .showImageOnLoading(R.mipmap.ic_launcher) .build(); return view; } //优化XlistView class ViewHolder{ ImageView iv_one; TextView tv_one; } class ViewHolder2{ TextView tv_two ; } }
数据请求包
public class LbUtils { //无限轮播的数据请求 public static String getNetDataStr() { String json = null; try { URL url = new URL( "https://api.tianapi.com/wxnew/?key=8d6e3228d25298f13af4fc40ce6c9679&num=10"); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod("GET"); int code = conn.getResponseCode(); if (code == 200) { InputStream is = conn.getInputStream(); ByteArrayOutputStream bos = new ByteArrayOutputStream(); int len = -1; byte[] buff = new byte[1024]; while((len = is.read(buff)) != -1){ bos.write(buff,0,len); } json = new String(bos.toByteArray()); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return json; } //上拉刷新下拉加载的数据请求 public static String getNetData() { try { URL url = new URL( "http://v.juhe.cn/weixin/query?key=88f7bbc507e3ecacfaeab2b47dd8936f"); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); //设置 conn.setRequestMethod("GET"); conn.setReadTimeout(5000); conn.setConnectTimeout(5000); int code = conn.getResponseCode(); if (code == 200) { InputStream is = conn.getInputStream(); ByteArrayOutputStream bos = new ByteArrayOutputStream(); int len = -1; byte[] buff = new byte[1024]; while((len = is.read(buff)) != -1){ bos.write(buff,0,len); } String json = new String(bos.toByteArray()); return json; } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return ""; } }温馨提示:联网权限,读取权限,第三方架包,清单文件配置。