自动轮播+侧滑菜单+TabLout+PullToRefresh
来源:互联网 发布:海康网络键盘视频教程 编辑:程序博客网 时间:2024/06/03 17:33
首先打开的出现的是 自动轮播,完事点击按钮跳转。
在第二个界面进行 侧滑菜单,头部是 TabLout滑动导航,下面是 ViewPager加载Fragment。
代码如下。
☆ 设置网络权限
一、首页自动轮播
1、activity_main.xml
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.bwie.administrator.MainActivity"> <android.support.v4.view.ViewPager android:id="@+id/myVP" android:layout_height="match_parent" android:layout_width="match_parent" android:layout_alignParentTop="true"/> <Button android:id="@+id/bt" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="点击跳转" android:layout_above="@+id/ll" /> <LinearLayout android:orientation="horizontal" android:layout_alignParentBottom="true" android:gravity="center" android:id="@+id/ll" android:layout_width="match_parent" android:layout_height="40dp"/></RelativeLayout>
圆点的布局
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <View android:id="@+id/view" android:layout_width="8dp" android:layout_height="8dp" android:layout_margin="3dp" android:background="@drawable/dot_normal"/></LinearLayout>
圆点 drawable
1、dot_focused.xml
<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <solid android:color="#f00"/> <corners android:radius="8dp"/></shape>
2、dot_normal
<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <solid android:color="#88000000"/> <corners android:radius="8dp"/></shape>
2、MainActivity 、图片和小圆点
import android.content.Intent;import android.os.AsyncTask;import android.os.Handler;import android.support.v4.view.PagerAdapter;import android.support.v4.view.ViewPager;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;import android.view.LayoutInflater;import android.view.Menu;import android.view.View;import android.view.ViewGroup;import android.widget.Button;import android.widget.ImageView;import android.widget.LinearLayout;import com.google.gson.Gson;import com.nostra13.universalimageloader.core.ImageLoader;import java.util.ArrayList;import java.util.List;import java.util.Timer;import java.util.TimerTask;public class MainActivity extends AppCompatActivity { private ViewPager myVP; private LinearLayout ll; private Button bt; private LinearLayout dotContainer;//存放小圆点的布局 //图片的集合 private ArrayList<ImageView > imgList = new ArrayList<ImageView>(); //小圆点的集合 private ArrayList<View> dotList = new ArrayList<View>(); //文字的集合 private ArrayList<String> str = new ArrayList<String>(); private int current = 0; private int old_dot = 0; private static final String JSON_URL="http://gank.io/api/data/%E7%A6%8F%E5%88%A9/10/1"; Handler h = new Handler(){ public void handleMessage(android.os.Message msg) { myVP.setCurrentItem(current); //设置圆点 dotList.get(old_dot).setBackgroundResource(R.drawable.dot_normal); dotList.get(current%dotList.size()).setBackgroundResource(R.drawable.dot_focused); old_dot = current%dotList.size(); }; }; //图片数据 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); myVP= (ViewPager) findViewById(R.id.myVP); ll = (LinearLayout) findViewById(R.id.ll); bt = (Button) findViewById(R.id.bt); bt.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(MainActivity.this,SecondActivity.class); startActivity(intent); } }); jiexi(); } private void jiexi() { new AsyncTask<String, Integer, String>() { //网络请求 @Override protected String doInBackground(String... params) { String jsonGet = new JavaUtils().getJsonGet(JSON_URL); return jsonGet; } //解析数据 @Override protected void onPostExecute(String s) { super.onPostExecute(s); Gson gson = new Gson(); List<JavaBean.ResultsBean> newslist = gson.fromJson(s, JavaBean.class).getResults(); for (int i =0;i<newslist.size();i++){ String picUrl = newslist.get(i).getUrl();// String title = newslist.get(i).getTitle(); //获取网络请求的图片数据,并把它添加到imagelist中 getImageView(picUrl); //得到圆点 getYuandian(); } init(); } }.execute(); } private void getYuandian() { View view = LayoutInflater.from(this).inflate(R.layout.dot_layout, null); View imageview = view.findViewById(R.id.view); //不懂 dotList.add(imageview); ll.addView(view); } private void getImageView(String picUrl) { ImageView imageView = new ImageView(MainActivity.this); imageView.setScaleType(ImageView.ScaleType.FIT_XY); ImageLoader.getInstance().displayImage(picUrl,imageView); imgList.add(imageView); } private void init() {// //获得图片数据// getImageView(picUrl);// //获得小圆点// getYuandian();// //把图片适配给ViewPager myVP.setAdapter(new MyVpAdapter()); //设置第一个小圆点选中 dotList.get(0).setBackgroundResource(R.drawable.dot_focused); myVP.setCurrentItem(5000000);//设置viewpager当前在中间 //设置ViewPager的划动监听 myVP.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageSelected(int arg0) { Log.i("TAG",arg0+"aaaaaaaaaaaaaa");dotList.get(old_dot).setBackgroundResource(R.drawable.dot_normal);dotList.get(arg0%dotList.size()).setBackgroundResource(R.drawable.dot_focused);old_dot = arg0%dotList.size(); } @Override public void onPageScrolled(int arg0, float arg1, int arg2) { } @Override public void onPageScrollStateChanged(int arg0) { } }); //自动划动ViewPager Timer timer = new Timer(); timer.schedule(new TimerTask() { @Override public void run() { current = myVP.getCurrentItem()+1; h.sendEmptyMessage(0x123); } }, 3000, 2000); } class MyVpAdapter extends PagerAdapter { @Override public int getCount() { return Integer.MAX_VALUE; } @Override public boolean isViewFromObject(View view, Object object) { return view==object; } @Override public void destroyItem(ViewGroup container, int position, Object object) { // TODO Auto-generated method stub container.removeView((View)object); } @Override public Object instantiateItem(ViewGroup container, int position) { int item = position%imgList.size();//得到当前页应该使用哪张图片 View imgageView = imgList.get(item); container.addView(imgageView); return imgageView; } }}
二、跳转到第二个界面 (侧滑菜单 DrawerLayout、ViewPager、RadioGroup)
1 、activity_second 布局
<?xml version="1.0" encoding="utf-8"?><android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/dl" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.bwie.administrator.SecondActivity"> <LinearLayout android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.v4.view.ViewPager android:id="@+id/vp" android:layout_width="wrap_content" android:layout_height="600dp" android:layout_weight="2" /> <RadioGroup android:layout_width="match_parent" android:layout_height="30dp" android:id="@+id/rg" android:layout_weight="8" android:orientation="horizontal"> <RadioButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/rb1" android:text="首页" android:layout_margin="15dp" android:textSize="20sp" android:button="@null" android:layout_gravity="center" android:gravity="center" android:checked="true" android:layout_weight="1" /> <RadioButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/rb2" android:text="西瓜视频" android:layout_margin="15dp" android:textSize="20sp" android:button="@null" android:layout_gravity="center" android:gravity="center" android:layout_weight="1" /> <RadioButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/rb3" android:text="微头条" android:layout_margin="15dp" android:textSize="20sp" android:button="@null" android:layout_gravity="center" android:gravity="center" android:layout_weight="1" /> <RadioButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:id="@+id/rb4" android:text="我的" android:layout_margin="15dp" android:textSize="20sp" android:button="@null" android:layout_gravity="center" android:gravity="center" /> </RadioGroup> </LinearLayout> <ListView android:id="@+id/lv" android:layout_width="240dp" android:layout_height="match_parent" android:layout_gravity="left" android:background="#fff" android:entries="@array/news" > </ListView></android.support.v4.widget.DrawerLayout>
2、SecondActivity 添加4个Frangment
import android.support.v4.app.Fragment;import android.support.v4.app.FragmentPagerAdapter;import android.support.v4.view.ViewPager;import android.support.v4.widget.DrawerLayout;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.RadioGroup;import java.util.ArrayList;import java.util.List;public class SecondActivity extends AppCompatActivity { private List<Fragment> list = new ArrayList<Fragment>(); private ViewPager vp; private RadioGroup rg; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_second); vp = (ViewPager) findViewById(R.id.vp); rg = (RadioGroup) findViewById(R.id.rg); list.add(new Fragment01()); list.add(new Fragment02()); list.add(new Fragment03()); list.add(new Fragment04()); vp.setAdapter(new FragmentPagerAdapter(getSupportFragmentManager()) { @Override public Fragment getItem(int position) { return list.get(position); } @Override public int getCount() { return list.size(); } }); rg.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { @Override public void onCheckedChanged(RadioGroup group, int checkedId) { switch (checkedId){ 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; } } }); }}
三、在Fragment01里面 TabLout
import android.os.Bundle;import android.support.annotation.Nullable;import android.support.design.widget.TabLayout;import android.support.v4.app.Fragment;import android.support.v4.app.FragmentPagerAdapter;import android.support.v4.view.ViewPager;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import java.util.ArrayList;import java.util.List;/** * Created by Administrator on 2017/9/20. */public class Fragment01 extends Fragment { private TabLayout tb; private ViewPager vp1; private List<String> list= new ArrayList<String>(); @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment01, container, false); vp1 = (ViewPager) view.findViewById(R.id.vp1); tb = (TabLayout) view.findViewById(R.id.tb); //TabLayout的标题 list.add("关注"); list.add("推荐"); list.add("热点"); list.add("科技"); list.add("视频"); list.add("数码"); list.add("汽车"); list.add("人物"); //tablayout和viewpager关联 tb.setupWithViewPager(vp1); //设置适配器 vp1.setAdapter(new FragmentPagerAdapter(getActivity().getSupportFragmentManager()) { @Override public CharSequence getPageTitle(int position) { return list.get(position); } @Override public Fragment getItem(int position) { NewFragment newFragment = new NewFragment(); Bundle bundle = new Bundle(); if (list.get(position).equals("关注")){ bundle.putString("name","1"); } else if(list.get(position).equals("推荐")){ bundle.putString("name","2"); } else if(list.get(position).equals("热点")){ bundle.putString("name","3"); } else if(list.get(position).equals("科技")){ bundle.putString("name","4"); } else if(list.get(position).equals("视频")){ bundle.putString("name","5"); } else if(list.get(position).equals("数码")){ bundle.putString("name","6"); } else if(list.get(position).equals("汽车")){ bundle.putString("name","7"); } else if(list.get(position).equals("人物")){ bundle.putString("name","8"); } //activity与fragment 1.getset,2.接口回调,3.setArguments ,getAraguments newFragment.setArguments(bundle); return newFragment; } @Override public int getCount() { return list.size(); } }); return view; }}
四、写一个NewFragment 加载解析的内容 和 +PullToRefresh 加载和刷新
a 、 导入library包 并关联app
两个build.gradle里面的参数要一致
NewFragment.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 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:id="@+id/pull_refresh_list" android:layout_width="fill_parent" android:layout_height="fill_parent" android:cacheColorHint="#000000" android:divider="#19000000" android:dividerHeight="4dp" android:fadingEdge="none" android:fastScrollEnabled="false" android:footerDividersEnabled="false" android:headerDividersEnabled="false" android:smoothScrollbar="true" ptr:ptrAnimationStyle="rotate" ptr:ptrHeaderTextColor="#ffffff" ptr:ptrHeaderSubTextColor="#00ffff" ptr:ptrHeaderBackground="@null" ptr:ptrDrawable="@mipmap/ic_launcher"/></LinearLayout>
b、NewFragment
package com.bwie.administrator.changwanlei0913rikao13;import android.os.AsyncTask;import android.os.Bundle;import android.support.annotation.Nullable;import android.support.v4.app.Fragment;import android.util.Log;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.ListView;import com.google.gson.Gson;import com.handmark.pulltorefresh.library.PullToRefreshBase;import com.handmark.pulltorefresh.library.PullToRefreshListView;import java.io.UnsupportedEncodingException;import java.net.URLEncoder;import java.util.List;/** * Created by Administrator on 2017/9/20. */public class NewFragment extends Fragment { private PullToRefreshListView lv; private String string; private static final String JSON_URL="http://gank.io/api/data/%E7%A6%8F%E5%88%A9/10/1"; private List<JavaBean.ResultsBean> results; private MyAdapter adapter; @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View view = inflater.inflate(R.layout.newfragment, container, false); lv = (PullToRefreshListView) view.findViewById(R.id.pull_refresh_list); //解析数据 Bundle bundle = getArguments(); //接受传递过来的值 string = bundle.getString("name"); //判断网络是否可用 boolean info = new NetWorkUtil().getInfo(getActivity()); if(info){ //解析图片 jiexi(string); //实现上拉 下载 initView(string); } return view ; } private void initView(final String st) { //下拉刷新 lv.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener<ListView>() { @Override public void onRefresh(PullToRefreshBase<ListView> refreshView) { new AsyncTask<String,Integer,String>(){ @Override protected String doInBackground(String... params) { String connection = new NetWorkUtil().getJsonByHttpUrlConnection("http://gank.io/api/data/%E7%A6%8F%E5%88%A9/10/"+st); return connection; } @Override protected void onPostExecute(String s) {//解析 super.onPostExecute(s); Gson gson = new Gson(); results = gson.fromJson(s, JavaBean.class).getResults(); adapter = new MyAdapter(getActivity(),results); lv.setAdapter( adapter); lv.onRefreshComplete(); } }.execute(); } }); //上拉加载 lv.setOnLastItemVisibleListener(new PullToRefreshBase.OnLastItemVisibleListener() { @Override public void onLastItemVisible() {//网络请求 new AsyncTask<String, Integer, String>() { @Override protected String doInBackground(String... params) { int i = 1; i++; String connection = new NetWorkUtil().getJsonByHttpUrlConnection("http://gank.io/api/data/%E7%A6%8F%E5%88%A9/"+i+"/"+ st); return connection; } @Override protected void onPostExecute(String s) {//解析数据 super.onPostExecute(s); Gson gson = new Gson(); JavaBean javaBean = gson.fromJson(s, JavaBean.class); //添加 results.addAll(javaBean.getResults()); //刷新适配器 adapter.notifyDataSetChanged(); } }.execute(); } }); } private void jiexi(final String string) { new AsyncTask<String, Integer, String>() { @Override protected String doInBackground(String... params) { String s = new NetWorkUtil().getJsonByHttpUrlConnection("http://gank.io/api/data/%E7%A6%8F%E5%88%A9/10/"+string); return s ; } @Override protected void onPostExecute(String s) { super.onPostExecute(s); Gson gson = new Gson(); results = gson.fromJson(s, JavaBean.class).getResults(); adapter = new MyAdapter(getActivity(),results); lv.setAdapter( adapter); } }.execute(); }}
五、网络解析工具类
package com.bwie.administrator.changwanlei0913rikao13;import android.content.Context;import android.net.ConnectivityManager;import android.net.NetworkInfo;import android.util.Log;import java.io.IOException;import java.io.InputStream;import java.net.HttpURLConnection;import java.net.MalformedURLException;import java.net.URL;/** * Created by Administrator on 2017/9/18. */public class NetWorkUtil { //判断当前的网络状态 public boolean getInfo(Context context){ ConnectivityManager conn = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); if(conn!=null){ NetworkInfo info = conn.getActiveNetworkInfo(); if(info!=null&&info.isConnected()){ if(info.getState()==NetworkInfo.State.CONNECTED){ //当前的链接的网络可以用 return true; } } } return false; } public String getJsonByHttpUrlConnection(String jsonUrl){ URL url =null; HttpURLConnection httpURLConnection = null; String jsonStr = ""; try { url = new URL(jsonUrl);//创建URL对象,连接JSON_URL对应的服务器 httpURLConnection = (HttpURLConnection) url.openConnection();//打开连接 httpURLConnection.setConnectTimeout(5000);//设置请求时长为5秒 httpURLConnection.setReadTimeout(5000);//设置读取服务器响应数据的时长 int resCode = httpURLConnection.getResponseCode();//得到响应结果码 if(resCode == 200){//表示响应成功,可以获得相应的额结果 //得到响应的结果,,服务器响应的输入流 InputStream inputStream = httpURLConnection.getInputStream(); byte[] buffers = new byte[1024]; int length = 0; while((length = inputStream.read(buffers)) != -1){//本次循环成立,说明读取到了数据 jsonStr += new String(buffers,0,length); } //循环完毕,读取数据完毕 Log.d("main",jsonStr); } } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return jsonStr; }}
六、ImageLoader
package com.bwie.administrator.changwanlei0913rikao13;import android.app.Application;import com.nostra13.universalimageloader.core.ImageLoader;import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;/** * Created by Administrator on 2017/9/13. */public class MyApp extends Application { @Override public void onCreate() { super.onCreate(); ImageLoaderConfiguration config = ImageLoaderConfiguration.createDefault(this); ImageLoader.getInstance().init(config); }}
七、适配器
package com.bwie.administrator.changwanlei0913rikao13;import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.ImageView;import android.widget.TextView;import com.nostra13.universalimageloader.core.ImageLoader;import java.util.List;import java.util.jar.Pack200;/** * Created by Administrator on 2017/9/20. */public class MyAdapter extends BaseAdapter { private Context context; private List<JavaBean.ResultsBean> results ; public MyAdapter(Context context, List<JavaBean.ResultsBean> results) { this.context = context; this.results = results; } @Override public int getCount() {//不用写 return results.size(); } @Override public Object getItem(int position) {//不用写 return null; } @Override public long getItemId(int position) { return 0; } @Override public int getItemViewType(int position) { JavaBean.ResultsBean resultsBean = results.get(position); if (resultsBean.getUrl()!="" &&resultsBean.getUrl()!= null){ return 1; }else { return 0; } } @Override public int getViewTypeCount() { return 2; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder0 holder0; ViewHolder1 holder1; int i = getItemViewType(position); if (i==0){ if (convertView==null){ holder0 = new ViewHolder0(); convertView = View.inflate(context, R.layout.item0,null); holder0.tv1= (TextView) convertView.findViewById(R.id.tv1); }else { holder0 = (ViewHolder0) convertView.getTag(); } JavaBean.ResultsBean bean = results.get(position); holder0.tv1.setText(bean.get_id()); }else if (i==1){ if (convertView==null){ holder1 = new ViewHolder1(); convertView = View.inflate(context, R.layout.item1,null); holder1.tv1 = (TextView) convertView.findViewById(R.id.tv1); holder1.img = (ImageView) convertView.findViewById(R.id.img); convertView.setTag(holder1); }else{ holder1 = (ViewHolder1) convertView.getTag(); } JavaBean.ResultsBean bean = results.get(position); holder1.tv1.setText(bean.getWho()); ImageLoader.getInstance().displayImage(bean.getUrl(), holder1.img); } return convertView; } class ViewHolder0{ TextView tv1; } class ViewHolder1{ TextView tv1; ImageView img; }}
阅读全文
0 0
- 自动轮播+侧滑菜单+TabLout+PullToRefresh
- 图片自动轮播+上拉加载下拉刷新+侧滑菜单+小圆点
- 自动轮播图
- 自动轮播
- 自动轮播条
- 自动轮播
- ViewPager自动轮播
- 自动轮播
- 自动轮播
- viewpage自动轮播
- ViewPager自动轮播
- 自动轮播
- Banner自动轮播
- viewpager自动轮播
- 图片自动轮播
- 自动轮播+RadioGroup
- 图片自动轮播
- 自动轮播
- Django 信号
- 按钮和滑动
- 树的子结构
- Instance "orcl", status UNKNOWN, has 1 handler(s) for this service...
- XML语法结构(学习)
- 自动轮播+侧滑菜单+TabLout+PullToRefresh
- freemarker数字格式
- AC自动机模板
- mac 生成 ssh-key
- 算法题/从头到尾打印链表
- Activity onDestroy() 回调缓慢问题分析及完美解决方案
- Source Insight 4.0 最简单的破解安装
- webpack入门第三篇
- LeetCode-62-Unique Paths DP水题