//fresco图片依赖 compile 'com.facebook.fresco:fresco:1.5.0' compile 'com.facebook.fresco:animated-gif:1.5.0' //加载gif动图需添加此库 compile 'com.facebook.fresco:animated-webp:1.5.0' //加载webp动图需添加此库 compile 'com.facebook.fresco:webpsupport:1.5.0' //支持webp需添加此库 compile 'com.facebook.fresco:imagepipeline-okhttp3:1.5.0' //网络实现层使用okhttp3需添加此库 compile 'jp.wasabeef:fresco-processors:2.1.0@aar' //用于提供fresco的各种图片变换 //ok implementation 'com.squareup.okhttp3:logging-interceptor:3.10.0' implementation 'com.squareup.okhttp3:okhttp:3.10.0' //gson implementation 'com.google.code.gson:gson:2.8.5' //recycleview依赖 implementation 'com.android.support:recyclerview-v7:26.1.0' //rxjava implementation 'com.squareup.retrofit2:retrofit:2.4.0' implementation 'com.squareup.retrofit2:converter-gson:2.4.0' implementation 'com.squareup.retrofit2:adapter-rxjava2:2.4.0' implementation 'io.reactivex.rxjava2:rxjava:2.1.13' implementation 'io.reactivex.rxjava2:rxandroid:2.0.2' implementation 'com.google.dagger:dagger:2.8' annotationProcessor 'com.google.dagger:dagger-compiler:2.7' implementation files('libs/flowlayout-lib.zip')
compile 'cn.jzvd:jiaozivideoplayer:6.2.3'
//解决版本冲突 configurations.all { resolutionStrategy.eachDependency { DependencyResolveDetails details -> def requested = details.requested if (requested.group == 'com.android.support') { if (!requested.name.startsWith("multidex")) { details.useVersion '27.1.1' } } } }
清单文件
fresco工具类
package com.example.administrator.myapplication13.presenter; import android.app.Application; import com.facebook.drawee.backends.pipeline.Fresco; /** * data:2018/06/16. * author : 殷成龙(Administrator) * function : */ public class MyApplication extends Application { @Override public void onCreate() { super.onCreate(); Fresco.initialize(this); } }ok解析工具类
package com.example.administrator.myapplication13.presenter; import java.io.IOException; import java.util.concurrent.TimeUnit; import okhttp3.Call; import okhttp3.Callback; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; import okhttp3.logging.HttpLoggingInterceptor; import android.os.Handler; /** * data:2018/06/16. * author : 殷成龙(Administrator) * function : */ public class OkHttpManger { private final OkHttpClient okHttpClient; private static Handler handler; private static OkHttpManger smanager; HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BODY); private OkHttpManger(){ okHttpClient = new OkHttpClient.Builder() .addInterceptor(interceptor) .writeTimeout(1000, TimeUnit.SECONDS) .readTimeout(1000,TimeUnit.SECONDS) .connectTimeout(1000,TimeUnit.SECONDS) .build(); handler = new Handler(); } public static OkHttpManger getInstance(){ if(smanager==null){ smanager = new OkHttpManger(); } return smanager; } public interface Func1{ void onResponse(String reqult); } private static void onSuccessJsonStringMethod(final String jsonValue,final Func1 callBack){ handler.post(new Runnable() { @Override public void run() { if(callBack!=null){ callBack.onResponse(jsonValue); } } }); } public void asyncJsonStringByURL(final String url,final Func1 callBack){ Request request = new Request.Builder().url(url).build(); okHttpClient.newCall(request).enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { } @Override public void onResponse(Call call, Response response) throws IOException { onSuccessJsonStringMethod(response.body().string(),callBack); } }); } }
图片适配器
package com.example.administrator.myapplication13.view.adapter; import android.content.Context; import android.support.annotation.NonNull; import android.support.v7.widget.RecyclerView; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import com.example.administrator.myapplication13.R; import com.example.administrator.myapplication13.model.SuperClass; import com.facebook.drawee.view.SimpleDraweeView; import java.util.List; /** * data:2018/06/16. * author : 殷成龙(Administrator) * function : */ public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> { private List<SuperClass.DataBean> list; private Context context; public MyAdapter(List<SuperClass.DataBean> list, Context context) { this.list = list; this.context = context; } @NonNull @Override public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { View view = View.inflate(context, R.layout.fragment03_item, null); ViewHolder holder = new ViewHolder(view); return holder; } @Override public void onBindViewHolder(@NonNull ViewHolder holder, int position) { holder.tv1.setText(list.get(position).getScreen_name()); holder.img1.setImageURI(list.get(position).getProfile_image()); holder.tv2.setText(list.get(position).getText()); holder.img2.setImageURI(list.get(position).getCdn_img()); } @Override public int getItemCount() { return list.size(); } public class ViewHolder extends RecyclerView.ViewHolder { private final TextView tv1; private final TextView tv2; private final SimpleDraweeView img1; private final SimpleDraweeView img2; public ViewHolder(View itemView) { super(itemView); tv1 = itemView.findViewById(R.id.fragment03_tv1); tv2 = itemView.findViewById(R.id.fragment03_tv2); img1 = itemView.findViewById(R.id.fragmetn03_img1); img2 = itemView.findViewById(R.id.fragment03_img2); } } }
视频适配器
package com.example.administrator.myapplication13.view.adapter; import android.content.Context; import android.support.annotation.NonNull; import android.support.v7.widget.RecyclerView; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import com.example.administrator.myapplication13.R; import com.example.administrator.myapplication13.model.BeanClass; import com.facebook.drawee.view.SimpleDraweeView; import java.util.List; import cn.jzvd.JZVideoPlayerStandard; /** * data:2018/06/16. * author : 殷成龙(Administrator) * function : */ public class MyBeanAdapter extends RecyclerView.Adapter<MyBeanAdapter.ViewHolder> { private List<BeanClass.DataBean> list; private Context context; public MyBeanAdapter(List<BeanClass.DataBean> list, Context context) { this.list = list; this.context = context; } @NonNull @Override public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { View view = View.inflate(context, R.layout.fragment04_item, null); ViewHolder holder = new ViewHolder(view); return holder; } @Override public void onBindViewHolder(@NonNull ViewHolder holder, int position) { holder.tv1.setText(list.get(position).getScreen_name()); holder.img1.setImageURI(list.get(position).getProfile_image()); holder.tv2.setText(list.get(position).getText()); holder.img2.setUp(list.get(position).getCdn_img(),holder.img2.SCREEN_WINDOW_NORMAL); } @Override public int getItemCount() { return list.size(); } public class ViewHolder extends RecyclerView.ViewHolder { private final TextView tv1; private final TextView tv2; private final SimpleDraweeView img1; private final JZVideoPlayerStandard img2; public ViewHolder(View itemView) { super(itemView); tv1 = itemView.findViewById(R.id.fragment04_tv1); tv2 = itemView.findViewById(R.id.fragment04_tv2); img1 = itemView.findViewById(R.id.fragmetn04_img1); img2 = itemView.findViewById(R.id.fragment04_img2); } } }
图片界面
package com.example.administrator.myapplication13.view.fragment; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.support.annotation.NonNull; 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.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Toast; import com.example.administrator.myapplication13.R; import com.example.administrator.myapplication13.model.SuperClass; import com.example.administrator.myapplication13.presenter.OkHttpManger; import com.example.administrator.myapplication13.presenter.okhttputil; import com.example.administrator.myapplication13.view.adapter.MyAdapter; import com.google.gson.Gson; import java.io.IOException; import java.util.ArrayList; import java.util.List; import okhttp3.Call; import okhttp3.Callback; import okhttp3.Response; /** * data:2018/06/16. * author : 殷成龙(Administrator) * function : */ public class Fragment03 extends Fragment { private int type = 3; private String url = "https://www.apiopen.top/satinApi?type="+type+"&page=1"; private List<SuperClass.DataBean> list; private RecyclerView rv; private static final int SUCCESS = 492; Handler handler = new Handler(){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); String string = (String) msg.obj; } }; @Nullable @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment03, container, false); initView(view); //initData(); getDataMao(); return view; } private void getDataMao() { list=new ArrayList<>(); OkHttpManger instance = OkHttpManger.getInstance(); instance.asyncJsonStringByURL(url, new OkHttpManger.Func1() { @Override public void onResponse(String reqult) { Gson gson = new Gson(); // Toast.makeText(getActivity(),reqult,Toast.LENGTH_SHORT).show(); SuperClass superClass = gson.fromJson(reqult, SuperClass.class); list = superClass.getData(); //Toast.makeText(getActivity(), list+"",Toast.LENGTH_SHORT).show(); MyAdapter myAdapter = new MyAdapter(list,getActivity()); rv.setAdapter(myAdapter); } }); } private void initView(View view) { rv = view.findViewById(R.id.rv); rv.setLayoutManager(new LinearLayoutManager(getActivity(),LinearLayoutManager.VERTICAL, false)); } private void initData() { okhttputil.doGet(url, new Callback() { @Override public void onFailure(Call call, IOException e) { } @Override public void onResponse(Call call, Response response) throws IOException { String string = response.body().string(); Gson gson = new Gson(); SuperClass superClass = gson.fromJson(string, SuperClass.class); list = superClass.getData(); //Toast.makeText(getActivity(), list+"",Toast.LENGTH_SHORT).show(); MyAdapter myAdapter = new MyAdapter(list,getActivity()); rv.setAdapter(myAdapter); } }); } }
视频界面
package com.example.administrator.myapplication13.view.fragment; import android.annotation.SuppressLint; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.support.annotation.NonNull; 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.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Toast; import com.example.administrator.myapplication13.R; import com.example.administrator.myapplication13.model.BeanClass; import com.example.administrator.myapplication13.model.SuperClass; import com.example.administrator.myapplication13.presenter.okhttputil; import com.example.administrator.myapplication13.view.adapter.MyAdapter; import com.example.administrator.myapplication13.view.adapter.MyBeanAdapter; import com.google.gson.Gson; import java.io.IOException; import java.util.List; import okhttp3.Call; import okhttp3.Callback; import okhttp3.Response; /** * data:2018/06/16. * author : 殷成龙(Administrator) * function : */ public class Fragment04 extends Fragment { private RecyclerView rv; private int type = 4; private String url = "https://www.apiopen.top/satinApi?type="+type+"&page=1"; private static final int SUCCESS = 492; private List<BeanClass.DataBean> list; @SuppressLint("HandlerLeak") Handler handler = new Handler(){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); String string = (String) msg.obj; Gson gson = new Gson(); BeanClass beanClass = gson.fromJson(string, BeanClass.class); list = beanClass.getData(); MyBeanAdapter myAdapter = new MyBeanAdapter(list,getActivity()); rv.setAdapter(myAdapter); } }; @Nullable @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment04, container, false); initView(view); initData(); return view; } private void initData() { okhttputil.doGet(url, new Callback() { @Override public void onFailure(Call call, IOException e) { } @Override public void onResponse(Call call, Response response) throws IOException { String string = response.body().string(); Message message = handler.obtainMessage(); message.obj = string; message.what = SUCCESS; handler.sendMessage(message); } }); } private void initView(View view) { rv = view.findViewById(R.id.rv); rv.setLayoutManager(new LinearLayoutManager(getContext(),LinearLayoutManager.VERTICAL, false)); } }
主页面
package com.example.administrator.myapplication13; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentTransaction; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.widget.FrameLayout; import android.widget.RadioGroup; import com.example.administrator.myapplication13.view.fragment.Fragment01; import com.example.administrator.myapplication13.view.fragment.Fragment02; import com.example.administrator.myapplication13.view.fragment.Fragment03; import com.example.administrator.myapplication13.view.fragment.Fragment04; import com.example.administrator.myapplication13.view.fragment.Fragment05; import java.util.ArrayList; import java.util.List; public class MainActivity extends AppCompatActivity { private RadioGroup rg; private FrameLayout fl; private Fragment01 fragment01; private Fragment02 fragment02; private Fragment03 fragment03; private Fragment04 fragment04; private Fragment05 fragment05; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); List<Fragment> list = new ArrayList<>(); fragment01 = new Fragment01(); fragment02 = new Fragment02(); fragment03 = new Fragment03(); fragment04 = new Fragment04(); fragment05 = new Fragment05(); list.add(fragment01); list.add(fragment02); list.add(fragment03); list.add(fragment04); list.add(fragment05); final FragmentManager fragmentManager = getSupportFragmentManager(); FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); fragmentTransaction.add(R.id.fl,list.get(0)).commit(); rg.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { @Override public void onCheckedChanged(RadioGroup group, int checkedId) { switch (checkedId){ case R.id.rg1: fragmentManager.beginTransaction().replace(R.id.fl,fragment01).commit(); break; case R.id.rg2: fragmentManager.beginTransaction().replace(R.id.fl,fragment02).commit(); break; case R.id.rg3: fragmentManager.beginTransaction().replace(R.id.fl,fragment03).commit(); break; case R.id.rg4: fragmentManager.beginTransaction().replace(R.id.fl,fragment04).commit(); break; case R.id.rg5: fragmentManager.beginTransaction().replace(R.id.fl,fragment05).commit(); break; } } }); } private void initView() { rg = findViewById(R.id.rg); fl = findViewById(R.id.fl); } }
布局
主布局
<?xml version="1.0" encoding="utf-8"?> <LinearLayout android:orientation="vertical" xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.administrator.myapplication13.MainActivity"> <RadioGroup android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" android:id="@+id/rg" android:orientation="horizontal"> <RadioButton android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity="center" android:background="@drawable/selector" android:gravity="center" android:layout_weight="1" android:button="@null" android:text="推荐" android:id="@+id/rg1"/> <RadioButton android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity="center" android:background="@drawable/selector" android:gravity="center" android:layout_weight="1" android:button="@null" android:text="文字" android:id="@+id/rg2"/> <RadioButton android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity="center" android:background="@drawable/selector" android:gravity="center" android:layout_weight="1" android:button="@null" android:text="图片" android:id="@+id/rg3"/> <RadioButton android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity="center" android:background="@drawable/selector" android:gravity="center" android:layout_weight="1" android:button="@null" android:checked="true" android:text="视频" android:id="@+id/rg4"/> <RadioButton android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity="center" android:background="@drawable/selector" android:gravity="center" android:layout_weight="1" android:button="@null" android:text="预留" android:id="@+id/rg5"/> </RadioGroup> <FrameLayout android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="9" android:id="@+id/fl"></FrameLayout> </LinearLayout>
两个fragment布局
图片布局
<?xml version="1.0" encoding="utf-8"?> <LinearLayout android:orientation="vertical" xmlns:fresco="http://schemas.android.com/apk/res-auto" xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <com.facebook.drawee.view.SimpleDraweeView android:layout_width="50dp" android:layout_height="50dp" fresco:actualImageScaleType="centerCrop" fresco:placeholderImageScaleType="centerCrop" android:id="@+id/fragmetn03_img1"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/fragment03_tv1"/> </LinearLayout> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/fragment03_tv2"/> <com.facebook.drawee.view.SimpleDraweeView android:layout_width="200dp" android:layout_height="200dp" fresco:actualImageScaleType="centerCrop" fresco:placeholderImageScaleType="centerCrop" android:id="@+id/fragment03_img2"/> </LinearLayout>
视频布局
<?xml version="1.0" encoding="utf-8"?> <LinearLayout android:orientation="vertical" xmlns:fresco="http://schemas.android.com/apk/res-auto" xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <com.facebook.drawee.view.SimpleDraweeView android:layout_width="wrap_content" android:layout_height="wrap_content" fresco:actualImageScaleType="centerCrop" fresco:placeholderImageScaleType="centerCrop" android:id="@+id/fragmetn04_img1"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/fragment04_tv1"/> </LinearLayout> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/fragment04_tv2"/> <cn.jzvd.JZVideoPlayerStandard android:layout_width="match_parent" android:layout_height="200dp" fresco:actualImageScaleType="centerCrop" fresco:placeholderImageScaleType="centerCrop" android:id="@+id/fragment04_img2"/> </LinearLayout>
加载视频所需包