Fresco网络请求图片和跳转传参

来源:互联网 发布:远走高飞网络歌曲 编辑:程序博客网 时间:2024/05/20 14:25

  效果图


首先我们先写一个MyApp类

package com.xxx.day1_fresco;import android.app.Application;import com.facebook.drawee.backends.pipeline.Fresco;public class MyApp extends Application {    @Override    public void onCreate() {        super.onCreate();        Fresco.initialize(this);    }}
我们用的是RecyclerView展示数据的,然后我们在写一下RecyclerView适配器,里面也有点击事件

package com.xxx.day1_fresco;import android.content.Context;import android.net.Uri;import android.support.v7.widget.RecyclerView;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.TextView;import com.facebook.drawee.backends.pipeline.Fresco;import com.facebook.drawee.interfaces.DraweeController;import com.facebook.drawee.view.SimpleDraweeView;/** * Created by 信徒° on 2017/11/27. */public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyHolder> {    private Context context;    private Bean bean;    private OnItemClickListener mOnItemClickListener;    public MyAdapter(Context context, Bean bean) {        this.context = context;        this.bean = bean;    }    //点击的接口    public interface OnItemClickListener{        void onItemClick(View view,int position);    }    public void setOnItemClickListener(OnItemClickListener mOnItemClickListener){        this.mOnItemClickListener = mOnItemClickListener;    }    @Override    public MyHolder onCreateViewHolder(ViewGroup parent, int viewType) {        //拿到我们自己定义的布局        MyHolder holder = new MyHolder(LayoutInflater.from(context).inflate(R.layout.rv_item, parent, false));        return holder;    }    @Override    public void onBindViewHolder(final MyHolder holder, final int position) {        //加载文字        holder.tv.setText(bean.getResult().getTopics().get(position).getTitle());        Uri uri=Uri.parse(bean.getResult().getTopics().get(position).getPic());        //图片构造者        DraweeController controller = Fresco.newDraweeControllerBuilder()                .setUri(uri)                .setAutoPlayAnimations(true)                .build();        holder.simpleDraweeView.setController(controller);        //判断图片点击        if(mOnItemClickListener != null){            holder.simpleDraweeView.setOnClickListener(new View.OnClickListener() {                @Override                public void onClick(View view) {                    mOnItemClickListener.onItemClick(holder.simpleDraweeView,position);                }            });        }    }    @Override    public int getItemCount() {        return bean.getResult().getTopics().size();    }    class MyHolder extends RecyclerView.ViewHolder {        SimpleDraweeView simpleDraweeView;        TextView tv;        public MyHolder(View itemView) {            super(itemView);            simpleDraweeView=itemView.findViewById(R.id.iv);            tv = itemView.findViewById(R.id.tv);        }    }}
适配器rv_litem的布局

<?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="wrap_content"    android:orientation="vertical"    >    <com.facebook.drawee.view.SimpleDraweeView        android:id="@+id/iv"        android:layout_width="match_parent"        android:layout_height="150dp"        android:scaleType="fitXY"        />    <TextView        android:id="@+id/tv"        android:layout_width="match_parent"        android:layout_height="30dp"        android:text="字体"        /></LinearLayout>

Activity中我用的是OkHttp请求的数据,OkHttp那个类我就不写了

package com.xxx.day1_fresco;import android.content.Intent;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.support.v7.widget.LinearLayoutManager;import android.support.v7.widget.RecyclerView;import android.view.View;import android.widget.Toast;import com.google.gson.Gson;import java.io.IOException;import okhttp3.Request;public class MainActivity extends AppCompatActivity {    private RecyclerView rv;    private String path = "http://www.babybuy100.com/API/getShopOverview.ashx";    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        //找控件       rv = (RecyclerView) findViewById(R.id.rv);        //请求数据        initData();    }    private void initData() {        OkHttp.getAsync(path, new OkHttp.DataCallBack() {            @Override            public void requestFailure(Request request, IOException e) {                Toast.makeText(MainActivity.this,"请求失败",Toast.LENGTH_SHORT).show();            }            @Override            public void requestSuccess(String result) throws Exception {                //解析                Gson gson = new Gson();                final Bean bean = gson.fromJson(result, Bean.class);                LinearLayoutManager ling = new LinearLayoutManager(MainActivity.this);                rv.setLayoutManager(ling);                //拿到适配器                MyAdapter apter = new MyAdapter(MainActivity.this,bean);                rv.setAdapter(apter);                //点击事件                apter.setOnItemClickListener(new MyAdapter.OnItemClickListener() {                    @Override                    public void onItemClick(View view, int position) {                      //跳转传数据                        Intent intent = new Intent(MainActivity.this,Shu_Activity.class);                        intent.putExtra("tp",bean.getResult().getTopics().get(position).getPic());                        intent.putExtra("zt",bean.getResult().getTopics().get(position).getTitle());                        startActivity(intent);                    }                });            }        });    }}

主布局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:layout_width="match_parent"    android:layout_height="match_parent"    tools:context="com.xxx.day1_fresco.MainActivity">    <android.support.v7.widget.RecyclerView        android:id="@+id/rv"        android:layout_width="match_parent"        android:layout_height="match_parent"        /></RelativeLayout>

Shu_Activity类

package com.xxx.day1_fresco;import android.content.Intent;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.widget.ImageView;import android.widget.TextView;import com.bumptech.glide.Glide;public class Shu_Activity extends AppCompatActivity {    private TextView shu_tv;    private ImageView shu_iv;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_shu);        //找控件        shu_iv = (ImageView) findViewById(R.id.shu_iv);        shu_tv = (TextView) findViewById(R.id.shu_tv);        //接受传值        Intent intent = getIntent();       String tp = intent.getStringExtra("tp");        Glide.with(this).load(tp).into(shu_iv);        shu_tv.setText(intent.getStringExtra("zt"));    }}
activity_shu.xml布局

<?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:layout_height="match_parent"    android:orientation="vertical"    tools:context="com.xxx.day1_fresco.Shu_Activity">    <ImageView        android:id="@+id/shu_iv"        android:layout_width="match_parent"        android:layout_height="150dp"        android:scaleType="fitXY"        />    <TextView        android:id="@+id/shu_tv"        android:layout_width="match_parent"        android:layout_height="30dp"        android:text="字"        /></LinearLayout>

 最后我们一定不要忘记在清单文件里写网络请求权限

<uses-permission android:name="android.permission.INTERNET"></uses-permission>
android:name=".MyApp"
build.gradle依赖

compile 'com.facebook.fresco:fresco:0.11.0'compile 'com.android.support:recyclerview-v7:26.0.0-alpha1'compile 'com.github.bumptech.glide:glide:3.6.1'

阅读全文
0 0
原创粉丝点击