1. 程式人生 > >友盟登陸傳值+OkHttp+recyclerview展示瀑布流+跳轉Intent傳值+屬性動畫

友盟登陸傳值+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();
        }
    });
}

}