首先打开的出现的是 自动轮播,完事点击按钮跳转。
在第二个界面进行 侧滑菜单,头部是 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;
}
}