activity_main
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:orientation="vertical" android:layout_height="match_parent" > <android.support.design.widget.TabLayout android:id="@+id/tab" android:layout_width="match_parent" android:layout_height="wrap_content"></android.support.design.widget.TabLayout> <android.support.v4.view.ViewPager android:id="@+id/viewpagers" android:layout_width="match_parent" android:layout_height="match_parent"></android.support.v4.view.ViewPager> </LinearLayout>
</RelativeLayout>
//这布局显示的是fragmen里面的recycleview
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.v7.widget.RecyclerView android:id="@+id/recycles" android:layout_width="match_parent" android:layout_height="match_parent"></android.support.v7.widget.RecyclerView> </LinearLayout>//条目一
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <uk.co.senab.photoview.PhotoView android:id="@+id/ph" android:layout_width="match_parent" android:layout_height="match_parent" /> </LinearLayout>
//条目二
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:id="@+id/leantwo" android:layout_height="match_parent"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="New Text" android:id="@+id/titletwo" android:layout_alignParentTop="true" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" /> <LinearLayout android:layout_below="@+id/titletwo" android:layout_width="match_parent" android:orientation="horizontal" android:layout_height="match_parent"> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/m2" android:scaleType="fitXY" android:layout_weight="1" android:src="@mipmap/ic_launcher" android:layout_alignParentTop="true" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:layout_marginTop="60dp" /> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/m3" android:scaleType="fitXY" android:layout_weight="1" android:src="@mipmap/ic_launcher" android:layout_alignParentTop="true" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:layout_marginTop="60dp" /> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/m4" android:scaleType="fitXY" android:layout_weight="1" android:src="@mipmap/ic_launcher" android:layout_alignParentTop="true" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:layout_marginTop="60dp" /> </LinearLayout> </LinearLayout>//fragment跳转的activity
<?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:layout_width="match_parent" android:layout_height="match_parent" > <android.support.v4.view.ViewPager android:id="@+id/vp" android:layout_width="match_parent" android:layout_height="match_parent"> </android.support.v4.view.ViewPager> </RelativeLayout>
//最后显示图片放大缩小的位置
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <uk.co.senab.photoview.PhotoView android:id="@+id/ph" android:layout_width="match_parent" android:layout_height="match_parent" /> </LinearLayout>
接下来就是代码的实现了
Mainactivity主要是用来拿到图片的地址 存到image_list里面通过intent跳转
package fengras.com.bigerandsmall; import android.os.Bundle; import android.support.design.widget.TabLayout; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentPagerAdapter; import android.support.v4.view.ViewPager; import java.util.ArrayList; import java.util.List; import fengras.com.bigerandsmall.bean.MyNews; public class MainActivity extends FragmentActivity { private TabLayout tab; private ViewPager vp; private List<String> title=new ArrayList<>(); private List<MyNews.DataBean> list=new ArrayList<>(); private String str="http://ic.snssdk.com/2/article/v25/stream/?count=20&min_behot_time=1455521444&bd_city=%E5%8C%97%E4%BA%AC%E5%B8%82&bd_latitude=40.049317&bd_longitude=116.296499&bd_loc_time=1455521401&loc_mode=5&lac=4527&cid=28883&iid=3642583580&device_id=11131669133&ac=wifi&channel=baidu&aid=13&app_name=news_article&version_code=460&device_platform=android&device_type=SCH-I919U&os_api=19&os_version=4.4.2&uuid=285592931621751&openudid=AC9E172CE2490000"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tab = (TabLayout) findViewById(R.id.tab); vp = (ViewPager) findViewById(R.id.viewpagers); title.add("今日"); title.add("头条"); title.add("我的"); FragmentPagerAdapter fragm=MyFragment(title); tab.setTabMode(tab.MODE_SCROLLABLE ); vp.setAdapter(fragm); tab.setTabsFromPagerAdapter(fragm);//数据传给Tab tab.setupWithViewPager(vp); //关联ViewPager } private FragmentPagerAdapter MyFragment(List<String> list){ FragmentPagerAdapter fragmentPagerAdapter=new FragmentPagerAdapter(getSupportFragmentManager()) { @Override public Fragment getItem(int position) { Bundle bundle=new Bundle(); bundle.putString("str",title.get(position)); Fragment01 fragment01 = new Fragment01(); fragment01.setArguments(bundle); return fragment01; } @Override public int getCount() { return title.size(); } @Override public CharSequence getPageTitle(int position) { return title.get(position); } }; return fragmentPagerAdapter; } }
//这个类是bean
package fengras.com.bigerandsmall.bean; import java.util.List; /** * Created by Administrator on 2017/3/14. */ public class Newsinfocus { public List<Databean> data; public Newsinfocus(List<Databean> data) { this.data = data; } public List<Databean> getData() { return data; } public void setData(List<Databean> data) { this.data = data; } public static class Databean{ public String source; public String title; public Myimage middle_image; public String display_url; public List<Imagelist> image_list; public static class Imagelist{ public String url; public Imagelist(String url) { this.url = url; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } } class Myimage{ public String url; public Myimage(String url) { this.url = url; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } } } }
//recycleview的适配器
package fengras.com.bigerandsmall.adapters; import android.content.Context; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; import com.bumptech.glide.Glide; import java.util.List; import fengras.com.bigerandsmall.R; import fengras.com.bigerandsmall.bean.Newsinfocus; /** * Created by Administrator on 2017/3/28. */ public class Recyleadapters extends RecyclerView.Adapter<RecyclerView.ViewHolder> { private List<Newsinfocus.Databean> list; private Context context; private final int type_1=1; private final int type_2=2; public Recyleadapters(List<Newsinfocus.Databean> list, Context context) { this.list = list; this.context = context; //用recycleview 定义适配器的时候必须要重写三个方法 还要自己在重写一个getitemtype方法 返回条目类型的 } @Override public int getItemViewType(int position) { if(list.get(position).image_list!=null&&list.get(position).image_list.size()>0){ return type_2; }else{ return type_1; } } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { //初始化viewholer if(viewType==type_1){ View view= LayoutInflater.from(context).inflate(R.layout.itemtype01,parent,false); return new Myholer(view); }else if(viewType==type_2){ View view= LayoutInflater.from(context).inflate(R.layout.itemtype02,parent,false); return new Muityholer(view); } return null; } @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { if(holder instanceof Myholer ){ ((Myholer) holder).setadata(position); }else{ ((Muityholer) holder).setdata(position); } } @Override public int getItemCount() { return list.size(); } class Myholer extends RecyclerView.ViewHolder{ TextView t1; LinearLayout lan; public Myholer(View itemView) { super(itemView); t1= (TextView) itemView.findViewById(R.id.title); lan= (LinearLayout) itemView.findViewById(R.id.lan); } public void setadata(final int position){ t1.setText(list.get(position).title); lan.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { listner.onItemClicklistener(position); } }); } } class Muityholer extends RecyclerView.ViewHolder{ TextView t2; LinearLayout lentwo; ImageView m2,m3,m4; public Muityholer(View itemView) { super(itemView); t2= (TextView) itemView.findViewById(R.id.titletwo); lentwo= (LinearLayout) itemView.findViewById(R.id.leantwo); m2= (ImageView) itemView.findViewById(R.id.m2); m3= (ImageView) itemView.findViewById(R.id.m3); m4= (ImageView) itemView.findViewById(R.id.m4); } public void setdata(final int position){ t2.setText(list.get(position).title); showimage(list.get(position).image_list.get(0).url,m2); showimage(list.get(position).image_list.get(1).url,m3); showimage(list.get(position).image_list.get(2).url,m4); lentwo.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { listner.onItemClicklistener(position); } }); } } public void showimage(String str,ImageView imageView){ Glide.with(context).load(str).into(imageView); } //声明一个接口供fragment回调 public ItemClickListner listner; /* 接口回调实现点击事件 */ public interface ItemClickListner{ void onItemClicklistener(int position); } public void setOnitemOncliclistenr(ItemClickListner listner){ this.listner=listner; } }
fragment里面网络请求数据并且通过recycleview适配器适配数据
package fengras.com.bigerandsmall; import android.content.Intent; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import com.google.gson.Gson; import com.zhy.http.okhttp.OkHttpUtils; import com.zhy.http.okhttp.callback.StringCallback; import java.util.ArrayList; import fengras.com.bigerandsmall.adapters.Recyleadapters; import fengras.com.bigerandsmall.bean.Newsinfocus; import okhttp3.Call; /** * Created by Administrator on 2017/3/28. */ public class Fragment01 extends Fragment { private String str="http://ic.snssdk.com/2/article/v25/stream/?category=news_hot&count=20&min_behot_time=1455521166&bd_city=%E5%8C%97%E4%BA%AC%E5%B8%82&bd_latitude=40.049317&bd_longitude=116.296499&bd_loc_time=1455521401&loc_mode=5&lac=4527&cid=28883&iid=3642583580&device_id=11131669133&ac=wifi&channel=baidu&aid=13&app_nme=news_article&version_code=460&device_platform=android&device_type=SCH-I919U&os_api=19&os_version=4.4.2&uuid=285592931621751&openudid=AC9E172CE2490000\n"; private ArrayList<String> imag_list=new ArrayList<>(); private RecyclerView rv; @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View view=inflater.inflate(R.layout.myrecycle,null); rv = (RecyclerView) view.findViewById(R.id.recycles); return view; } @Override public void onActivityCreated(@Nullable Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); Bundle arguments = getArguments(); String url = arguments.getString("url"); getdata(); } private void getdata() { OkHttpUtils.get().url(str).build().execute(new StringCallback() { @Override public void onError(Call call, Exception e, int id) { } @Override public void onResponse(String response, int id) { Gson gson =new Gson(); final Newsinfocus newsinfocus = gson.fromJson(response, Newsinfocus.class); Log.e("ss",newsinfocus.getData().get(0).image_list.size()+" a"); Recyleadapters re=new Recyleadapters(newsinfocus.getData(),getActivity()); rv.setAdapter(re); rv.setLayoutManager(new LinearLayoutManager(getActivity())); re.setOnitemOncliclistenr(new Recyleadapters.ItemClickListner() { @Override public void onItemClicklistener(int position) { for (int i = 0; i < newsinfocus.getData().get(position).image_list.size(); i++) { imag_list.add( newsinfocus.getData().get(position).image_list.get(i).url); } Intent in=new Intent(getActivity(),TwoActivity.class); in.putStringArrayListExtra("title",imag_list); in.putExtra("position",position); startActivity(in); } }); } }); } }
//点击条目跳转到目标activity
package fengras.com.bigerandsmall; import android.content.Intent; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentPagerAdapter; import android.support.v4.view.ViewPager; import java.util.ArrayList; public class TwoActivity extends FragmentActivity { private ViewPager vp; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_two); vp = (ViewPager) findViewById(R.id.vp); Intent intent = getIntent(); final ArrayList<String> title = intent.getStringArrayListExtra("title"); int position = intent.getIntExtra("position", 0); vp.setAdapter(new FragmentPagerAdapter(getSupportFragmentManager()) { @Override public Fragment getItem(int position) { Myfragment frahment=new Myfragment(); Bundle bundle=new Bundle(); bundle.putString("image",title.get(position)); frahment.setArguments(bundle); return frahment; } @Override public int getCount() { return title.size(); } }); } }//最后的fragment是用来展示图片的放大缩小的
package fengras.com.bigerandsmall; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import com.bumptech.glide.Glide; import uk.co.senab.photoview.PhotoView; import uk.co.senab.photoview.PhotoViewAttacher; /** * Created by Administrator on 2017/3/28. */ public class Myfragment extends Fragment { private View view; private PhotoView pv; @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { view = inflater.inflate(R.layout.fragemnt01,null); pv = (PhotoView) view.findViewById(R.id.ph); return pv; } @Override public void onActivityCreated(@Nullable Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); Bundle arguments = getArguments(); String image = arguments.getString("image"); Glide.with(getActivity()).load(image).into(pv); pv.setOnPhotoTapListener(new PhotoViewAttacher.OnPhotoTapListener() { @Override public void onPhotoTap(View view, float v, float v1) { getActivity().finish(); } }); } }