小圆点+XlistView+RadioGroup
来源:互联网 发布:双硬盘安装ubuntu 编辑:程序博客网 时间:2024/05/20 15:58
主Activity
public class MainActivity extends AppCompatActivity { ViewPager vp; List<Fragment>list; RadioGroup rg; RadioButton rb1,rb2,rb3,rb4; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //初始化控件 vp = (ViewPager) findViewById(R.id.vp); rg = (RadioGroup) findViewById(R.id.rg); rb1 = (RadioButton) findViewById(R.id.rb1); rb2 = (RadioButton) findViewById(R.id.rb2); rb3 = (RadioButton) findViewById(R.id.rb3); rb4 = (RadioButton) findViewById(R.id.rb4); initData(); MyFragmentApdata mfa = new MyFragmentApdata(getSupportFragmentManager()); vp.setAdapter(mfa); //给ViewPage设置监听事件 vp.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected(int position) { switch (position){ case 0: rg.check(R.id.rb1); rb1.setBackgroundColor(Color.BLUE); rb2.setBackgroundColor(Color.GRAY); break; case 1: rg.check(R.id.rb2); rb2.setBackgroundColor(Color.BLUE); rb1.setBackgroundColor(Color.GRAY); break; case 2: rg.check(R.id.rb3); rb3.setBackgroundColor(Color.GREEN); rb4.setBackgroundColor(Color.GRAY); break; case 3: rg.check(R.id.rb4); rb4.setBackgroundColor(Color.GREEN); rb3.setBackgroundColor(Color.GRAY); break; } } @Override public void onPageScrollStateChanged(int state) { } }); //给RadioGroup设置监听事件 rg.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { @Override public void onCheckedChanged(RadioGroup radioGroup, int i) { switch(i){ case R.id.rb1: vp.setCurrentItem(0); break; case R.id.rb2: vp.setCurrentItem(1); break; case R.id.rb3: vp.setCurrentItem(2); break; case R.id.rb4: vp.setCurrentItem(3); break; } } }); } //添加数据 private void initData() { list = new ArrayList<>(); list.add(new Fragment_One()); list.add(new Fragment_Two()); list.add(new Fragment_three()); list.add(new Fragment_Frou()); } //适配器 class MyFragmentApdata extends FragmentPagerAdapter{ public MyFragmentApdata(FragmentManager fm) { super(fm); } @Override public Fragment getItem(int position) { return list.get(position); } @Override public int getCount() { return list.size(); } }}
主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.day9_12.MainActivity"> <android.support.v4.view.ViewPager android:id="@+id/vp" android:layout_width="wrap_content" android:layout_height="wrap_content"> </android.support.v4.view.ViewPager> <RadioGroup android:id="@+id/rg" android:layout_width="match_parent" android:layout_height="50dp" android:orientation="horizontal" android:layout_alignParentBottom="true" > <RadioButton android:id="@+id/rb1" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:text="首页" android:textSize="20dp" android:button="@null" android:layout_gravity="center" /> <RadioButton android:id="@+id/rb2" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:text="西瓜视频" android:textSize="20dp" android:button="@null" android:gravity="center" /> <RadioButton android:id="@+id/rb3" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:text="微头条" android:textSize="20dp" android:button="@null" android:gravity="center" /> <RadioButton android:id="@+id/rb4" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:text="我的" android:textSize="20dp" android:button="@null" android:gravity="center" /> </RadioGroup></RelativeLayout>数据请求的包
public class Util { static int NUM=1; //XListView public static String getNetDataStr() { String json = null; try { URL url = new URL( "http://api.kkmh.com/v1/daily/comic_lists/0?since=0&gender=0&sa_event=eyJwcm9qZWN0Ijoia3VhaWthbl9hcHAiLCJ0aW1lIjoxNDg3NzQyMjQwNjE1LCJwcm9wZXJ0aWVzIjp7IkhvbWVwYWdlVGFiTmFtZSI6IueDremXqCIsIlZDb21tdW5pdHlUYWJOYW1lIjoi54Ot6ZeoIiwiJG9zX3ZlcnNpb24iOiI0LjQuMiIsIkdlbmRlclR5cGUiOiLlpbPniYgiLCJGcm9tSG9tZXBhZ2VUYWJOYW1lIjoi54Ot6ZeoIiwiJGxpYl92ZXJzaW9uIjoiMS42LjEzIiwiJG5ldHdvcmtfdHlwZSI6IldJRkkiLCIkd2lmaSI6dHJ1ZSwiJG1hbnVmYWN0dXJlciI6ImJpZ25veCIsIkZyb21Ib21lcGFnZVVwZGF0ZURhdGUiOjAsIiRzY3JlZW5faGVpZ2h0IjoxMjgwLCJIb21lcGFnZVVwZGF0ZURhdGUiOjAsIlByb3BlcnR5RXZlbnQiOiJSZWFkSG9tZVBhZ2UiLCJGaW5kVGFiTmFtZSI6IuaOqOiNkCIsImFidGVzdF9ncm91cCI6MTEsIiRzY3JlZW5fd2lkdGgiOjcyMCwiJG9zIjoiQW5kcm9pZCIsIlRyaWdnZXJQYWdlIjoiSG9tZVBhZ2UiLCIkY2FycmllciI6IkNoaW5hIE1vYmlsZSIsIiRtb2RlbCI6IlZQaG9uZSIsIiRhcHBfdmVyc2lvbiI6IjMuNi4yIn0sInR5cGUiOiJ0cmFjayIsImRpc3RpbmN0X2lkIjoiQTo2YWRkYzdhZTQ1MjUwMzY1Iiwib3JpZ2luYWxfaWQiOiJBOjZhZGRjN2FlNDUyNTAzNjUiLCJldmVudCI6IlJlYWRIb21lUGFnZSJ9"+NUM); 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; }}第一个Fragment的代码
public class Fragment_One extends Fragment implements XListView.IXListViewListener { ViewPager vp_one; //用于实现轮播 XListView xlv; //XlistView用于实现上拉刷新下拉加载 (记得导第三方架包) bean bn; //bean包 Util ut; //用于请求网路数据进行加载XlsitView和ViewPage List<ImageView> list; //这个集合用于存放XlistView的图片 private LinearLayout linearLayout; //这是一个用于实现小圆点的布局 int NUM = 1;//用于上拉刷新 下拉加载 MyPageApdata myPagerApdata; //轮播图的适配器 MyApdata myApdata; //XlistView的适配器 List<bean.DataBean.ComicsBean> results; boolean boo; //布尔值 用于上拉刷新和下拉加载 //这个是用于存放小圆点的集合 private List<ImageView> imagesList; //Handler机制用于实现无限轮播 private Handler handler = new Handler() { public void handleMessage(Message msg) { //获取当前条目 int index = vp_one.getCurrentItem(); //向右轮播 vp_one.setCurrentItem(index+=1); //间隔3秒 handler.sendEmptyMessageDelayed(3,3000); } }; @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View view = View.inflate(getActivity(), R.layout.fragment_one, null);//加载布局 vp_one = view.findViewById(R.id.vp_one); //这是ViewPage的控件 xlv = view.findViewById(R.id.xlv); //这是XlsitView的控件 linearLayout = view.findViewById(R.id.linear_layout);//这是小圆点的控件 //使xlistview支持下拉刷新和上拉加载 xlv.setPullRefreshEnable(true); //设置是否可以下拉刷新 xlv.setPullLoadEnable(true); //设置是否可以上拉加载 xlv.setXListViewListener(this); //xlistView上拉加载,下拉刷新 getBeanByGson();//轮播图的解析 ListGson(); //XListView的解析 //viewPager页面改变的监听事件 vp_one.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) { } }); return view; } //轮播图的解析 public void getBeanByGson() { // 使用该方法得到了一个 Json的字符输入流 new AsyncTask<String, String, String>() { @Override protected String doInBackground(String... strings) { String reader = Util.getNetDataStr(); return reader; } @Override protected void onPostExecute(String s) { super.onPostExecute(s); // 使用Gson把该字符输入流转换成JavaBean Gson gson = new Gson(); bn = gson.fromJson(s, bean.class); list = new ArrayList<ImageView>(); //循环遍历图片添加道集合 for (int i = 0; i < bn.getData().getComics().size(); i++) { ImageView imageView = new ImageView(getActivity()); imageView.setScaleType(ImageView.ScaleType.FIT_XY); ImageLoader.getInstance().displayImage(bn.getData().getComics().get(i).getCover_image_url(), imageView); list.add(imageView); } //初始化小圆点 initDoc(); myPagerApdata = new MyPageApdata(list);//初始化适配器 vp_one.setAdapter(myPagerApdata);//绑定适配器 handler.sendEmptyMessageDelayed(3, 3000);//handler进行图片的轮播速度的设置发送 } }.execute(); } //XListView的解析 public void ListGson() { new AsyncTask<String, String, String>() { @Override protected String doInBackground(String... strings) { String read = ut.getNetDataStr(); //调用网络请求的数据包 return read; //返回所求到的数据 } @Override protected void onPostExecute(String result) { super.onPostExecute(result); Gson gson = new Gson();//使用Gson解析 bn = gson.fromJson(result, bean.class); //接收传过来的数据 results = bn.getData().getComics(); setAdapter(results); //绑定适配器 Date date = new Date(System.currentTimeMillis());//设置时间 SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH:mm"); String time = simpleDateFormat.format(date); xlv.setRefreshTime(time); //XlistView刷新的时候加载时间 } }.execute(); } //进行适配器的判断 public void setAdapter(List<bean.DataBean.ComicsBean> list){ //如果适配器是空的就行 适配器的绑定 发送 if(myApdata == null){ myApdata = new MyApdata(results, getActivity()); xlv.setAdapter(myApdata); }else{ //相反如果不是空的 把数据添加到适配器中 调代用解析的数据进行刷新适配器 myApdata.add(list,boo); ListGson(); myApdata.notifyDataSetChanged(); } } //下拉加载 @Override public void onRefresh() { NUM++; boo = true; ListGson(); xlv.stopRefresh(); } //上拉刷新 @Override public void onLoadMore() { NUM++; boo = false; ListGson(); xlv.stopLoadMore(); } /** * 初始化小圆点 */ private void initDoc() { //首先需要一个集合记录这些小圆点的图片,,,,当页面切换的时候,可以从集合中取出imageView进行显示图片的设置 imagesList = new ArrayList<>(); linearLayout.removeAllViews();//清空/移除所有的view for (int i = 0;i<list.size();i++){ ImageView imageView = new ImageView(getActivity()); 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); //把小圆点添加到线性集合中 } }}第一个Fragment的布局
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.v4.view.ViewPager android:id="@+id/vp_one" android:layout_width="wrap_content" android:layout_height="200dp"> </android.support.v4.view.ViewPager> <com.example.day9_12.xlistview.XListView android:id="@+id/xlv" android:layout_below="@+id/vp_one" android:layout_width="match_parent" android:layout_height="match_parent"> </com.example.day9_12.xlistview.XListView> <LinearLayout android:id="@+id/linear_layout" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBottom="@+id/vp_one" android:layout_centerHorizontal="true" android:layout_marginBottom="20dp" android:orientation="horizontal"> </LinearLayout></RelativeLayout>XlistView多条目加载适配器
public class MyApdata extends BaseAdapter { //构造参数 private List<bean.DataBean.ComicsBean> list; //创建上下文 private Context context; public MyApdata(List<bean.DataBean.ComicsBean> list, Context context) { this.list = list; this.context = context; } public void add(List<bean.DataBean.ComicsBean> data, boolean b) { for (bean.DataBean.ComicsBean bean : data) { if (b) { list.add(0, bean); } else { list.add(bean); } } } //有几个条目类型 @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 null; } @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 = (ImageView) view.findViewById(R.id.iv); holder.tv1 = (TextView) view.findViewById(R.id.tv1); view.setTag(holder); } else { holder = (ViewHolder) view.getTag(); } holder.tv1.setText(list.get(i).getTitle()); ImageLoader.getInstance().displayImage(list.get(i).getCover_image_url(), holder.iv); break; //如果为1,则是第二种布局 case 1: if (view == null) { view = View.inflate(context, R.layout.itme_two, null); holder2 = new ViewHolder2(); holder2.tv2 = (TextView) view.findViewById(R.id.tv2); view.setTag(holder2); } else { holder2 = (ViewHolder2) view.getTag(); } holder2.tv2.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; TextView tv1; } class ViewHolder2 { TextView tv2; }}轮播图的适配器
public class MyPageApdata extends PagerAdapter { List<ImageView> list = new ArrayList<>(); public MyPageApdata(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) { container.addView(list.get(position % list.size())); return list.get(position % list.size()); } @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView((View) object); }}温馨提示:记得加联网权限,ImageLode的清单文件和架包,XlistView的第三方架包,谢谢观看
阅读全文
0 0
- 小圆点+XlistView+RadioGroup
- Xlistview加小圆点
- RadioGroup修改默认小圆点
- 动漫-无限轮播小圆点+判断网络+网络请求+多条目加载XListView+ImageLoader
- 小圆点
- 小圆点
- 小圆点
- 小圆点
- ViewPager加小圆点
- 代码实现小圆点
- 轮滑加小圆点
- 绘制轮播图小圆点
- ViewPager+小圆点
- viewpager加小圆点
- 图片轮播加小圆点
- 轮播小圆点
- vieapager小圆点
- vp+小圆点
- 编译BPI-M1P的dragonboard模式(草稿)
- BZOJ 2038 小Z的袜子(hose)( 莫队算法)
- mybatis学习中报错:org.apache.ibatis.exceptions.PersistenceException:
- No provider available from registry 127.0.0.1:2181 for service com.focussend.email.service.EdmTaskS
- 关于HLS中SVD分解的精度研究
- 小圆点+XlistView+RadioGroup
- Redis简要
- STM32中FSMC与硬件I2C冲突
- 对象家族后续之单例模式
- 导航条显示隐藏问题(包含改变状态栏颜色)
- hdu 6212 区间dp
- 算术表达式(栈)
- Add Two Numbers
- svg初学——渐变