自动轮播+侧滑菜单+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;    }}






















原创粉丝点击