友盟登陆传值+OkHttp+recyclerview展示瀑布流+跳转Intent传值+属性动画

友盟详情见 https://blog.csdn.net/aijaijgnaw/article/details/84203936

分包
在这里插入图片描述

友盟第三方登录

MyApp(Application)
package com.umeng.soexample.app;

import android.app.Application;

import com.umeng.commonsdk.UMConfigure;
import com.umeng.socialize.PlatformConfig;
import com.umeng.socialize.UMShareAPI;

public class MyApp extends Application {

@Override
public void onCreate() {
    super.onCreate();
    UMConfigure.init(this,"5a12384aa40fa3551f0001d1","umeng",UMConfigure.DEVICE_TYPE_PHONE,"");
    //打开日志
    UMConfigure.setLogEnabled(true);
    PlatformConfig.setWeixin("wxdc1e388c3822c80b", "3baf1193c85774b3fd9d18447d76cab0");
    PlatformConfig.setQQZone("100424468", "c7394704798a158208a74ab60104f0ba");
    UMShareAPI.get(this);
}

}
注意:要在清单文件中添加
在这里插入图片描述
MainActivity
在这里插入图片描述
找控件
在这里插入图片描述
设置监听
在这里插入图片描述

点击事件
在这里插入图片描述

设置登录监听
UMAuthListener umAuthListener = new UMAuthListener() {

    @Override
    public void onStart(SHARE_MEDIA share_media) {

    }

    @Override
    public void onComplete(SHARE_MEDIA share_media, int i, Map<String, String> map) {
        //Toast.makeText(MainActivity.this,map.toString(),Toast.LENGTH_SHORT).show();
        获取到值(把头像和昵称传入第二个页面)
        Map<String, String> login = map;
        String screen_name = login.get("screen_name");
        String iconurl = login.get("iconurl");
        Intent intent = new Intent(MainActivity.this,TwoActivity.class);
        intent.putExtra("nick_name",screen_name);
        intent.putExtra("iconurl",iconurl);
        startActivity(intent);
    }

    @Override
    public void onError(SHARE_MEDIA share_media, int i, Throwable throwable) {

    }

    @Override
    public void onCancel(SHARE_MEDIA share_media, int i) {

    }
};

如果需要用QQ登录 要写onActivityResult
//登录QQ使用
@Override

protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    UMShareAPI.get(this).onActivityResult(requestCode,resultCode,data);
}

Ok网络请求
package com.umeng.soexample.net;

import java.io.IOException;

import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;

public class OkHttpNet {

private AccessData accessData;
public OkHttpNet(){}
public OkHttpNet get(String path){
    OkHttpClient okHttpClient = new OkHttpClient();
    Request request = new Request.Builder()
            .get()
            .url(path)
            .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 {
            //网络请求成功后 得到所有
            String string = response.body().string();
            accessData.Data(string);
        }
    });
    return this;
}
public interface AccessData{
    void Data(String s);
}
public void setAccessData(AccessData accessData) {
    this.accessData = accessData;
}

}
登录MVP
MainActivity实现LoginView接口
在这里插入图片描述
实现接口后会写入接口内的方法
在这里插入图片描述
MainActivity中写入P层
在这里插入图片描述
CallBack接口
在这里插入图片描述

Model层
package com.umeng.soexample.model;

import com.google.gson.Gson;
import com.umeng.soexample.bean.LoginBean;
import com.umeng.soexample.callback.LoginCallBack;
import com.umeng.soexample.net.OkHttpNet;

public class LoginModel {

public void login(String mobile, String password, final LoginCallBack loginCallBack){
    String data = "http://www.zhaoapi.cn/user/login?mobile="+mobile+"&password="+password;
    OkHttpNet okHttpNet = new OkHttpNet();
    okHttpNet.get(data).setAccessData(new OkHttpNet.AccessData() {
        @Override
        public void Data(String s) {
            Gson gson = new Gson();
            LoginBean loginBean = gson.fromJson(s,LoginBean.class);
            if(loginBean.getCode().equals("0")){
                loginCallBack.onLoginSuccess("登陆成功");
                //跳转
            }else{
                loginCallBack.onLoginFailure("登录失败");
            }
        }
    });
}

}
View层
在这里插入图片描述

Presenter层
package com.umeng.soexample.presenter;

import com.umeng.soexample.callback.LoginCallBack;
import com.umeng.soexample.model.LoginModel;
import com.umeng.soexample.view.LoginView;

public class LoginPresenter {

private LoginView loginView;
private final LoginModel loginModel;

public LoginPresenter(LoginView loginView) {
    this.loginView = loginView;
    loginModel = new LoginModel();
}
public void login(String mobile,String password){
    loginModel.login(mobile, password, new LoginCallBack() {
        @Override
        public void onLoginSuccess(String result) {
            loginView.onSuccess(result);
        }

        @Override
        public void onLoginFailure(String msg) {
            loginView.onFailure(msg);
        }
    });
}

}

TwoActivity中
接收第三方登录成功后传过来的值并展示
在这里插入图片描述

在这里插入图片描述
实现V层后会有两个方法(成功和失败)
@Override
public void showSuccess(final List<ShowBean.DataBean> list) {

	//成功后更换线程
    runOnUiThread(new Runnable() {
        @Override
        public void run() {
        	//展示适配器
            adapter = new ShowAdapter(TwoActivity.this,list);
            //设置适配器
            recyclerView.setAdapter(adapter);
            //瀑布流展示
            recyclerView.setLayoutManager(new StaggeredGridLayoutManager(2,StaggeredGridLayoutManager.VERTICAL));
			
            adapter.setOnRecyclerViewItemClick(new ShowAdapter.OnRecyclerViewItemClick() {
                @Override
                public void onItemClick(View view, int position) {
                    Intent intent = new Intent(TwoActivity.this,ThreeActivity.class);
                    intent.putExtra("image",list.get(position).getThumbnail_pic_s());
                    startActivity(intent);
                }
            });
        }
    });
}

点击添加和删除

@Override
public void onClick(View v) {
    switch (v.getId()){
        case R.id.bt_add:
            adapter.insert(1);
            break;
        case R.id.bt_del:
            adapter.del(1);
            break;
    }
}

设置适配器

package com.umeng.soexample.adapter;

import android.content.Context;
import android.support.annotation.NonNull;
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.TextView;
import android.widget.Toast;

import com.squareup.picasso.Picasso;
import com.umeng.soexample.R;
import com.umeng.soexample.bean.ShowBean;

import java.util.List;

public class ShowAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {

private Context context;
List<ShowBean.DataBean> list;

public ShowAdapter(Context context, List<ShowBean.DataBean> list) {
    this.context = context;
    this.list = list;
}

@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
    View view = LayoutInflater.from(context).inflate(R.layout.recycler_item, viewGroup, false);
    MyViewHolder holder = new MyViewHolder(view);
    return holder;
}

@Override
public void onBindViewHolder(@NonNull final RecyclerView.ViewHolder viewHolder, int i) {
    MyViewHolder holder = (MyViewHolder) viewHolder;
    holder.tv_text.setText(list.get(i).getTitle());
    Picasso.with(context).load(list.get(i).getThumbnail_pic_s()).into(holder.iv_image);
}

@Override
public int getItemCount() {
    return list.size();
}
class MyViewHolder extends RecyclerView.ViewHolder{

    private final TextView tv_text;
    private final ImageView iv_image;

    public MyViewHolder(@NonNull View itemView) {
        super(itemView);
        tv_text = itemView.findViewById(R.id.tv_title);
        iv_image = itemView.findViewById(R.id.iv_image);
		//设置点击事件
        if(onRecyclerViewItemClick != null){
            itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                //调用点击条目的接口
                    onRecyclerViewItemClick.onItemClick(v,getAdapterPosition());
                }
            });
        }
    }

}
//添加
public void insert(int position){
    ShowBean.DataBean dataBean = new ShowBean.DataBean();
    dataBean.setTitle("芭蕾美图");
    dataBean.setThumbnail_pic_s("https://ss1.bdstatic.com/70cFvXSh_Q1YnxGkpoWK1HF6hhy/it/u=1010551629,632409382&fm=200&gp=0.jpg");
    list.add(position,dataBean);
    notifyItemInserted(position);

}
//删除
public void del(int position){

    if(position>list.size()-1){
        Toast.makeText(context,"最后一条了",Toast.LENGTH_SHORT).show();
        return;
    }else{
        list.remove(position);
        notifyItemRemoved(position);
    }

}
//点击条目的接口
public interface OnRecyclerViewItemClick{
    void onItemClick(View view,int position);
}
private OnRecyclerViewItemClick onRecyclerViewItemClick;

public void setOnRecyclerViewItemClick(OnRecyclerViewItemClick onRecyclerViewItemClick) {
    this.onRecyclerViewItemClick = onRecyclerViewItemClick;
}

}

展示数据
MVP
在这里插入图片描述

Model层
package com.umeng.soexample.model;

import com.google.gson.Gson;
import com.umeng.soexample.bean.ShowBean;
import com.umeng.soexample.callback.ShowCallBack;
import com.umeng.soexample.net.OkHttpNet;

import java.util.ArrayList;
import java.util.List;

public class ShowModel {

String data = "http://www.xieast.com/api/news/news.php";
public void show(final ShowCallBack<List> showCallBack){
    OkHttpNet okHttpNet = new OkHttpNet();
    okHttpNet.get(data).setAccessData(new OkHttpNet.AccessData() {
        @Override
        public void Data(String s) {
            Gson gson = new Gson();
            ShowBean showBean = gson.fromJson(s,ShowBean.class);
            List<ShowBean.DataBean> data = showBean.getData();
            if(showBean.getCode() == 1){
                showCallBack.onShowSuccess(data);
            }else{
                showCallBack.onShowFailure("展示失败");
            }
        }
    });
}

}
View层在这里插入图片描述

Presenter层
package com.umeng.soexample.presenter;

import com.umeng.soexample.bean.ShowBean;
import com.umeng.soexample.callback.ShowCallBack;
import com.umeng.soexample.model.ShowModel;
import com.umeng.soexample.view.ShowView;

import java.util.List;

public class ShowPresenter {
private ShowView showView;
private final ShowModel showModel;

public ShowPresenter(ShowView showView) {
    this.showView = showView;
    showModel = new ShowModel();
}
public void show(){
    showModel.show(new ShowCallBack<List>() {
        @Override
        public void onShowSuccess(List<ShowBean.DataBean> list) {
            showView.showSuccess(list);
        }

        @Override
        public void onShowFailure(String msg) {
            showView.failSuccess(msg);
        }
    });
}

}
ThreeActivity中接收传过来的图片 及属性动画
package com.umeng.soexample.activity;

import android.animation.AnimatorSet;
import android.animation.ObjectAnimator;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;

import com.squareup.picasso.Picasso;
import com.umeng.soexample.R;

public class ThreeActivity extends AppCompatActivity {

private ImageView start_image;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_three);
    start_image = findViewById(R.id.start_image);
    Intent intent = getIntent();
    //接收到图片
    String image = intent.getStringExtra("image");
    //设置图片
    Picasso.with(ThreeActivity.this).load(image).into(start_image);
    start_image.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
        	//平移 渐变
            ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(start_image,"translationX",0f,200f);
            ObjectAnimator objectAnimator1 = ObjectAnimator.ofFloat(start_image,"alpha",0f,1f);
            AnimatorSet animatorSet = new AnimatorSet();
            animatorSet.playTogether(objectAnimator,objectAnimator1);
            animatorSet.setDuration(2000);
            animatorSet.start();
        }
    });
}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值