package com.tejia.lijin.app.ui.goldtask;
|
|
import android.animation.Animator;
|
import android.animation.AnimatorListenerAdapter;
|
import android.animation.ValueAnimator;
|
import android.annotation.SuppressLint;
|
import android.app.Dialog;
|
import android.graphics.Point;
|
import android.graphics.drawable.AnimationDrawable;
|
import android.os.Bundle;
|
import android.os.Handler;
|
import android.os.Message;
|
import androidx.recyclerview.widget.LinearLayoutManager;
|
import androidx.recyclerview.widget.RecyclerView;
|
import androidx.recyclerview.widget.SimpleItemAnimator;
|
import android.util.Log;
|
import android.view.LayoutInflater;
|
import android.view.View;
|
import android.view.animation.LinearInterpolator;
|
import android.widget.ImageView;
|
import android.widget.RelativeLayout;
|
import android.widget.TextView;
|
import android.widget.Toast;
|
|
import com.bumptech.glide.Glide;
|
import com.google.gson.Gson;
|
import com.google.gson.GsonBuilder;
|
import com.google.gson.reflect.TypeToken;
|
import com.wpc.library.util.NetUtils;
|
import com.wpc.library.util.common.DimenUtils;
|
import com.wpc.library.util.common.StringUtils;
|
import com.tejia.lijin.app.R;
|
import com.tejia.lijin.app.contract.GoldTaskContract;
|
import com.tejia.lijin.app.entity.DailySign;
|
import com.tejia.lijin.app.entity.GoldTaskList;
|
import com.tejia.lijin.app.presenter.GoldTaskPresenter;
|
import com.tejia.lijin.app.ui.goldtask.scrollText.RiseNumberTextView;
|
import com.tejia.lijin.app.ui.goldtask.view.PointEvaluator;
|
import com.tejia.lijin.app.ui.goldtask.view.ProgressBarTime;
|
import com.tejia.lijin.app.ui.goldtask.view.WaterView;
|
import com.tejia.lijin.app.util.GlideCircleTransform;
|
import com.tejia.lijin.app.util.TopStatusSettings;
|
import com.tejia.lijin.app.view.BaseActivity;
|
|
import org.json.JSONException;
|
import org.json.JSONObject;
|
|
import java.util.ArrayList;
|
import java.util.List;
|
|
/**
|
* 金币任务页面
|
*/
|
public class GoldTaskActivity extends BaseActivity<GoldTaskContract.GoldTaskView, GoldTaskPresenter> implements GoldTaskContract.GoldTaskView, View.OnClickListener {
|
private TextView tv_left, tv_middle, tv_top_bar_right;//返回 标题 明细
|
private WaterView goldtask_water;//金币能量球布局
|
private TextView goldtask_waterAll;//一键领取
|
private RelativeLayout goldtask_scroll;
|
private ImageView goldtask_scroll_img;//用户头像
|
private RiseNumberTextView goldtask_scrolltxt;//滚动字体
|
private List<Water> mWaters = new ArrayList<>();//总的 金币数量
|
private List<GoldTaskList> mGoldTaskList = new ArrayList<>();//金币列表数据
|
private DailySign mDailySign;//签到 数据
|
private ProgressBarTime goldtask_progressbartime;//签到日期进度
|
private TextView goldtask_sum;//签到数量
|
private TextView goldtask_exchange;//去兑换
|
// private TextView goldtask_userbankname;//用户等级
|
private ImageView goldtask_userbankimg;//等级图标
|
private RecyclerView goldtask_recycler;
|
private GoldTaskAdapter adapter;
|
|
private TextView tv_loading;
|
private ImageView iv_loading;
|
private RelativeLayout ff_loading_no_data;//无数据
|
private View bottom;//底部布局
|
private Point startscroll;
|
private Point startall;
|
private boolean isCancel = false;//标记是否关闭页面
|
|
/**
|
* 初始化布局
|
*
|
* @param savedInstanceState
|
*/
|
@Override
|
protected void initActivityView(Bundle savedInstanceState) {
|
setContentView(R.layout.activity_goldtask);
|
TopStatusSettings.setStatusViewAndDeepColor(this);
|
}
|
|
/**
|
* 绑定控件
|
*/
|
@Override
|
protected void findViewById() {
|
tv_left = findViewById(R.id.tv_top_bar_left);
|
tv_middle = findViewById(R.id.tv_top_bar_middle);
|
tv_top_bar_right = findViewById(R.id.tv_top_bar_right);
|
goldtask_recycler = findViewById(R.id.goldtask_recycler);//recycler
|
|
tv_left.setOnClickListener(this);
|
goldtask_recycler.setLayoutManager(new LinearLayoutManager(goldtask_recycler.getContext()));
|
((SimpleItemAnimator) goldtask_recycler.getItemAnimator()).setSupportsChangeAnimations(false); //取消RecyclerView的动画效果
|
// goldtask_recycler.setBackgroundColor(getResources().getColor(R.color.white));
|
//--------------Top 顶部-----------
|
View top_view = LayoutInflater.from(this).inflate(R.layout.item_godtask_top, null);
|
// top_view.setLayoutParams(new AbsListView.LayoutParams(AbsListView.LayoutParams.MATCH_PARENT, AbsListView.LayoutParams.MATCH_PARENT));
|
goldtask_water = top_view.findViewById(R.id.goldtask_water);
|
goldtask_waterAll = top_view.findViewById(R.id.goldtask_waterAll);//一键领取
|
goldtask_scroll_img = top_view.findViewById(R.id.goldtask_scroll_img);
|
goldtask_scroll = top_view.findViewById(R.id.goldtask_scroll);
|
goldtask_scrolltxt = top_view.findViewById(R.id.goldtask_scrolltxt);
|
goldtask_progressbartime = top_view.findViewById(R.id.goldtask_progressbartime);
|
goldtask_exchange = top_view.findViewById(R.id.goldtask_exchange);
|
// goldtask_userbankname = top_view.findViewById(R.id.goldtask_userbankname);
|
goldtask_sum = top_view.findViewById(R.id.goldtask_sum);
|
goldtask_userbankimg = top_view.findViewById(R.id.goldtask_userbankimg);
|
|
//--------------------------底部
|
bottom = LayoutInflater.from(goldtask_recycler.getContext()).inflate(R.layout.item_recyclerview_bottom2, null);
|
tv_loading = bottom.findViewById(R.id.tv_loading2);
|
iv_loading = bottom.findViewById(R.id.iv_loading2);
|
ff_loading_no_data = bottom.findViewById(R.id.ff_loading_no_data2);
|
AnimationDrawable animationDrawable = (AnimationDrawable) getResources().getDrawable(R.drawable.anim_list_loading);
|
iv_loading.setImageDrawable(animationDrawable);
|
animationDrawable.start();
|
bottom.setVisibility(View.GONE);
|
|
adapter = new GoldTaskAdapter(this, mGoldTaskList, "id", false);
|
adapter.addHeaderView(top_view);//设置顶布局
|
adapter.addFooterView(bottom);//设置底布局
|
//设置adapter
|
goldtask_recycler.setAdapter(adapter);
|
mPresenter.findViewById(this, tv_top_bar_right, tv_middle, goldtask_exchange, System.currentTimeMillis());//标题栏 设置
|
|
//滑动到底部监听
|
goldtask_recycler.addOnScrollListener(new RecyclerView.OnScrollListener() {
|
@Override
|
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
|
super.onScrollStateChanged(recyclerView, newState);
|
LinearLayoutManager manager = (LinearLayoutManager) recyclerView.getLayoutManager();
|
int last = manager.findLastVisibleItemPosition();
|
int total = manager.getItemCount();
|
if (newState == RecyclerView.SCROLL_STATE_IDLE) {
|
if (last == total - 1 && mGoldTaskList.size() < count && isLoad) {
|
page++;
|
isLoad = false;
|
tv_loading.setText("正在加载更多数据");
|
iv_loading.setVisibility(View.VISIBLE);
|
mPresenter.getTaskList(goldtask_recycler.getContext(), mPresenter.getUid(goldtask_recycler.getContext()), page);
|
}
|
}
|
}
|
});
|
TaskList = getIntent().getStringExtra("jsTaskList");
|
NotReceived = getIntent().getStringExtra("jsNotReceived");
|
tv_middle.postDelayed(new Runnable() {
|
@Override
|
public void run() {
|
startscroll = new Point((int) goldtask_scroll.getX(), (int) goldtask_scroll.getY());
|
startall = new Point((int) goldtask_waterAll.getX(), (int) goldtask_waterAll.getY());
|
}
|
}, 90);
|
}
|
|
private boolean isLoad = true;
|
private int page = 1;
|
|
/**
|
* 返回Presenter
|
*
|
* @return
|
*/
|
@Override
|
protected GoldTaskPresenter createPresenter() {
|
return new GoldTaskPresenter();
|
}
|
|
/**
|
* 初次联网请求
|
*/
|
@Override
|
protected void getData() {
|
//请求未领取金币
|
// mPresenter.getNotReceived(this, mPresenter.getUid(this));
|
}
|
|
private String TaskList = null;//页面传入值
|
private String NotReceived = null;//页面传入值
|
|
@Override
|
protected void onResume() {
|
super.onResume();
|
if (TaskList != null && NotReceived != null &&
|
!StringUtils.isEmpty(TaskList) && !StringUtils.isEmpty(NotReceived)) {//传入有数据
|
JSONObject jsTaskList = null;
|
JSONObject jsNotReceived = null;
|
try {
|
jsTaskList = new JSONObject(TaskList);
|
jsNotReceived = new JSONObject(NotReceived);
|
} catch (JSONException e) {
|
e.printStackTrace();
|
}
|
mfirstnot = true;//未领取金币不请求第二次
|
onTaskList(jsTaskList);//传入金币任务数据
|
onNotReceived(jsNotReceived);//传入未领取金币
|
TaskList = null;
|
NotReceived = null;
|
} else {//传入没有数据 请求网络
|
mfirstnot = false;//未领取金币不请求第二次
|
//请求金币列表
|
mPresenter.getTaskList(this, mPresenter.getUid(this), page);
|
}
|
}
|
|
/**
|
* 单击事件
|
*
|
* @param v
|
*/
|
@Override
|
public void onClick(View v) {
|
switch (v.getId()) {
|
case R.id.tv_top_bar_left://返回
|
finish();
|
break;
|
default:
|
break;
|
}
|
}
|
|
|
/**
|
* 领取 金币
|
* 删除动画完成 回调activity的方法
|
* mWaters 中查询id一样的数据 设置删除标记
|
*/
|
public void onReceive(int Consume, int id) {
|
if (isCancelAnimtion) {//已经退出不进行下一步
|
return;
|
}
|
// Toast.makeText(this, "一键领取了:" + i, Toast.LENGTH_SHORT).show();
|
// Log.e(TAG, "onReceive: " + goldtask_scrolltxt.getText().toString());
|
// goldtask_scrolltxt.withNumber(Consume + Integer.valueOf(goldtask_scrolltxt.getText() + ""), Integer.valueOf(goldtask_scrolltxt.getText() + "")).start();
|
int i = 0;
|
//删除已经领取的金币(点击过该金币)
|
for (int j = 0; j < mWaters.size(); j++) {
|
Water waters = mWaters.get(j);
|
if (waters.id == id) {
|
// Log.e("eee", "删除已经领取的金币: " + id);
|
waters.mremove = true;
|
}
|
if (waters.mremove) {
|
i++;
|
}
|
}
|
// Log.e(TAG, "领取 金币: " + i + "---mWaters" + mWaters.size());
|
if (mWaters.size() == i) {//全部领取完毕
|
mOneKeyreceive = true;//标记一键领取
|
//一件领取向下平移动画
|
goldtask_water.postDelayed(new Runnable() {
|
@Override
|
public void run() {
|
if (isCancelAnimtion) {//已经退出不进行下一步
|
return;
|
}
|
goldtask_water.reset();//重置子view 清空所有数据
|
animRemoveView(goldtask_waterAll, 400);//向下平移动画
|
if (mWaters != null) {
|
mWaters.clear();//清空所有数据
|
}
|
if (mWater != null) {
|
mWater.clear();//清空所有数据
|
}
|
mPresenter.animContentView(goldtask_scroll, null, goldtask_waterAll, 400, false);//平移到屏幕中央
|
}
|
}, 1000);
|
}
|
}
|
|
/**
|
* 一键领取所有金币
|
*
|
* @param view
|
*/
|
public void onReceiveALL(View view) {
|
if (isCancelAnimtion) {//已经退出不进行下一步
|
return;
|
}
|
mOneKeyreceive = true;//标记一键领取
|
goldtask_waterAll.setEnabled(false);
|
//领取所有剩下金币
|
mPresenter.getReceiveGoldCoin(this, mPresenter.getUid(this), "1", "");
|
}
|
|
private Point mDestroyPoint;//view销毁时的点
|
|
/**
|
* 一键领取向下平移动画
|
*
|
* @param view
|
*/
|
private void animRemoveView(final View view, long time) {
|
if (isCancelAnimtion) {//已经退出不进行下一步
|
return;
|
}
|
final float x = view.getX();//子view 的x坐标
|
final float y = view.getY();//子view 的y坐标
|
Point startPoint = new Point((int) x, (int) y);//初始子view坐标
|
if (Pan) {//平移过
|
// if (startPoint != null) {
|
// mDestroyPoint = new Point(startall.x, startall.y);
|
// } else {
|
mDestroyPoint = new Point(0, 0);
|
// }
|
} else {
|
mDestroyPoint = new Point((int) x, (int) (y + y));//最终子view坐标
|
}
|
//计算直线距离
|
final float space = goldtask_water.getDistance(new Point((int) x, (int) y), mDestroyPoint);
|
//更具子view坐标移动到最后坐标 然后返回移动坐标
|
ValueAnimator animator = null;
|
if (Pan) {
|
animator = ValueAnimator.ofObject(new PointEvaluator(), mDestroyPoint, startPoint);
|
} else {
|
animator = ValueAnimator.ofObject(new PointEvaluator(), startPoint, mDestroyPoint);
|
}
|
//根据距离计算动画执行时间
|
animator.setDuration((long) time);
|
animator.setInterpolator(new LinearInterpolator());
|
animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
|
@Override
|
public void onAnimationUpdate(ValueAnimator valueAnimator) {
|
if (isCancelAnimtion) {//已经退出不进行下一步
|
return;
|
}
|
//返回的 实时子view坐标
|
Point value = (Point) valueAnimator.getAnimatedValue();
|
float space2 = goldtask_water.getDistance(new Point(value.x, value.y), mDestroyPoint);
|
float alpha = 0f;
|
if (!Pan) {
|
alpha = (1 - ((space - space2) / space));//更具距离大小 计算透明度
|
} else {
|
alpha = 1;
|
}
|
mPresenter.setViewProperty(view, alpha, (value.y - y), 0, true);//设置移除动画
|
}
|
});
|
animator.addListener(new AnimatorListenerAdapter() {
|
@Override
|
public void onAnimationEnd(Animator animation) {
|
Log.e(TAG, "onAnimationEnd: 动画完毕");
|
if (isCancelAnimtion) {//已经退出不进行下一步
|
return;
|
}
|
Pan = (!Pan);//标记平移过
|
if (Pan || mOneKeyreceive) {//平移时 才减少布局
|
Log.e(TAG, "onAnimationEnd: 平移时 才减少布局");
|
//结束时开始goldtask_water布局缩小
|
view.setVisibility(View.GONE);
|
if (para1 == null) {
|
para1 = (RelativeLayout.LayoutParams) goldtask_water.getLayoutParams();
|
}
|
mHandler.sendEmptyMessage(1001);
|
}
|
|
}
|
});
|
animator.start();
|
}
|
|
/**
|
* 布局缩小 mhandler
|
*/
|
@SuppressLint("HandlerLeak")
|
private Handler mHandler = new Handler() {
|
@Override
|
public void handleMessage(Message msg) {
|
//根据isCancelAnimtion来标识是否退出,防止界面销毁时,再一次改变UI
|
if (isCancel && mHandler != null) {
|
return;
|
}
|
|
setOffheight(false);//缩减布局高度
|
if (msg.what == 1001) {
|
if (goldtask_water.getHeight() <= (goldtask_scroll.getHeight() + DimenUtils.dip2px(GoldTaskActivity.this, 14f) + DimenUtils.dip2px(GoldTaskActivity.this, 13f))) {
|
isCancel = true;
|
mHandler.removeCallbacksAndMessages(this);
|
setOffheight(true);//缩减布局高度
|
return;
|
}
|
mHandler.sendEmptyMessageDelayed(1001, 8);//设置延时发送每隔12发一次
|
}
|
}
|
};
|
private RelativeLayout.LayoutParams para1;
|
|
/**
|
* 减小布局高度
|
*/
|
private void setOffheight(boolean off) {
|
if (isCancelAnimtion) {//已经退出不进行下一步
|
return;
|
}
|
if (para1 == null) {
|
para1 = (RelativeLayout.LayoutParams) goldtask_water.getLayoutParams();
|
}
|
if (off) {//布局结束时 定死高度
|
para1.height = (goldtask_scroll.getHeight() + DimenUtils.dip2px(this, 27f));
|
} else {
|
para1.height = goldtask_water.getHeight() - 40;
|
}
|
goldtask_water.setLayoutParams(para1);
|
}
|
|
//防止页面销毁 标记
|
private boolean isCancelAnimtion = false;
|
|
public boolean mNotReceived = false;//表示网络未领取金币数据请求成功
|
public boolean mOneKeyreceive = false;//表示点击一键领取
|
//金币球数量
|
public List<Water> mWater = new ArrayList<>();
|
|
/**
|
* 请求未领取金币数据
|
*/
|
@Override
|
public void onNotReceived(JSONObject mobj) {
|
if (isCancelAnimtion) {//已经退出不进行下一步
|
return;
|
}
|
// JSONObject mmobj = null;
|
// try {
|
// mmobj = new JSONObject("{\"code\":0,\"data\":{\"list\":[{\"id\":3392,\"goldCoin\":2,\"taskName\":\"浏览奖励\"}]}}");
|
// } catch (JSONException e) {
|
// e.printStackTrace();
|
// }
|
Gson gson = new GsonBuilder().serializeNulls().create();
|
List<Water> mWaterstemp = gson.fromJson(mobj.optJSONObject("data")
|
.optJSONArray("list").toString(), new TypeToken<List<Water>>() {
|
}.getType());
|
|
goldtask_water.setVisibility(View.VISIBLE);//显示金币布局(必须先显示 不然收入动画找不到布局)
|
// mNotReceived = true;//显示请求成功
|
if (mWaterstemp == null || mWaterstemp.size() == 0) {//没有数据
|
if (mfirst) {//数据为0 并且没有进入过其他页面在返回
|
onALLScaleAnimation(100);//收入动画 (不显示金币球)
|
} else {
|
// Log.e(TAG, "onNotReceived: 没有数据 并且进入过其他页面");
|
}
|
} else {
|
boolean judge = mPresenter.Judgehistory(mWaters, mWaterstemp); //判断未领取金币数据 历史数据 和 现在的数据是否相等
|
if (judge) {//请求继续网下走
|
if (mWaters != null) {
|
mWaters.clear();//清空所有数据
|
}
|
if (mWater != null) {
|
mWater.clear();//清空所有数据
|
}
|
mWaters.addAll(mWaterstemp);
|
//重新设置 金币布局高度280dp
|
if (para1 == null) {
|
para1 = (RelativeLayout.LayoutParams) goldtask_water.getLayoutParams();
|
}
|
para1.height = (DimenUtils.dip2px(this, 280f));
|
goldtask_water.setLayoutParams(para1);//设置高度
|
goldtask_waterAll.setVisibility(View.VISIBLE);//显示一键领取
|
if (Pan) {//布局平移过
|
animRemoveView(goldtask_waterAll, 0);
|
mPresenter.animContentView(goldtask_scroll, startscroll, goldtask_waterAll, 0, true);//平移到屏幕中央
|
}
|
mOneKeyreceive = false;//有数据 重置一键领取
|
isCancelAnimtion = false;
|
isCancel = false;
|
//金币球数量大于5
|
if (mWaters.size() > 5) {//一次只添加5条数据
|
for (int i = 0; i < 5; i++) {
|
mWaters.get(i).increase = true;//标记 添加过该条数据
|
Water water = mWaters.get(i);
|
mWater.add(water);
|
}
|
} else {//全部赋值(数据小于等于5)
|
for (int i = 0; i < mWaters.size(); i++) {
|
mWaters.get(i).increase = true;//标记 添加过该条数据
|
Water water = mWaters.get(i);
|
mWater.add(water);
|
}
|
}
|
onWaterView_reset();//重置 金币所有数据
|
goldtask_scroll.postDelayed(new Runnable() {
|
@Override
|
public void run() {
|
int left = goldtask_scroll.getLeft();//得到了正确的值
|
int right = goldtask_scroll.getRight();
|
int top = goldtask_scroll.getTop();
|
int bottom = goldtask_scroll.getBottom();
|
// goldtask_water.reset();//重置子view 清空所有数据
|
goldtask_water.setWaters(mWater, (left + ((right - left) / 2)), (top + ((bottom - top) / 2)) - 80, mfirst);
|
}
|
}, 100);
|
} else {
|
}
|
}
|
}
|
|
/**
|
* 请求未领取金币数据 失败
|
*
|
* @param errorInfo
|
*/
|
@Override
|
public void onNotReceivedFail(String errorInfo) {
|
if (isCancelAnimtion) {//已经退出不进行下一步
|
return;
|
}
|
Toast.makeText(this, "获取金币数量失败", Toast.LENGTH_SHORT).show();
|
}
|
|
private Dialog dialog;
|
|
/**
|
* 请求金币任务列表 成功
|
*
|
* @param obj
|
*/
|
@Override
|
public void onTaskList(JSONObject obj) {
|
if (isCancelAnimtion) {//已经退出不进行下一步
|
return;
|
}
|
isLoad = true;
|
Gson gson = new GsonBuilder().serializeNulls().create();
|
mDailySign = gson.fromJson(obj.optJSONObject("data")
|
.optJSONObject("dailySign").toString(), new TypeToken<DailySign>() {
|
}.getType());
|
if (mDailySign != null) {
|
goldtask_progressbartime.setProgressBarTime(mDailySign);//传入进度数据
|
Glide.with(this).load(obj.optJSONObject("data").optJSONObject("userRank").optString("picture")).into(goldtask_userbankimg);
|
goldtask_sum.setText(mDailySign.days + "");//显示金币
|
}
|
Glide.with(this).load(obj.optJSONObject("data").optString("portrait"))
|
.transform(new GlideCircleTransform(this))
|
.into(goldtask_scroll_img);//头像
|
goldtask_scrolltxt.setText(obj.optJSONObject("data").optString("goldCoin"));//我的可用金币
|
List<GoldTaskList> list = gson.fromJson(obj.optJSONObject("data")
|
.optJSONArray("list").toString(), new TypeToken<List<GoldTaskList>>() {
|
}.getType());
|
count = Integer.parseInt(obj.optJSONObject("data").optString("count"));
|
mGoldTaskList.clear();
|
mGoldTaskList.addAll(list);
|
adapter.notifyItemRangeChanged(1, mGoldTaskList.size());
|
if (obj.optJSONObject("data").optBoolean("signState")) {//// 是否弹出签到成功提示框
|
SigninTodayDialogUtils utils = new SigninTodayDialogUtils(GoldTaskActivity.this);
|
utils.SigninTodayDialog(mDailySign, dialog);
|
}
|
if (mGoldTaskList.size() >= count) { //下拉数据请求完 到底了
|
bottom.setVisibility(View.VISIBLE);
|
iv_loading.setVisibility(View.GONE);
|
tv_loading.setText("更多金币奖励,敬请期待^_^");
|
mPresenter.setmarginTop(tv_loading);
|
} else { //下拉还有数据时
|
bottom.setVisibility(View.GONE);
|
}
|
if (mGoldTaskList.size() == 0) { //没有数据情况
|
bottom.setVisibility(View.VISIBLE);
|
ff_loading_no_data.setVisibility(View.VISIBLE); //展示 无数据页
|
} else {
|
ff_loading_no_data.setVisibility(View.GONE); //隐藏无数据页
|
}
|
if (!mfirstnot) {//首次请求
|
// mfirst = false;//不请求第二次
|
if (isCancelAnimtion) {//已经退出不进行下一步
|
return;
|
}
|
//请求未领取金币
|
mPresenter.getNotReceived(this, mPresenter.getUid(this));
|
}
|
}
|
|
private boolean mfirstnot = false;// 判断 页面传入值不请求 (网络请求复位 继续请求)
|
private boolean mfirst = true;// 判断 页面返回时为false (不显示金币添加动画)
|
|
private int count = 0;
|
|
/**
|
* 请求金币任务列表 失败
|
*
|
* @param errorInfo
|
*/
|
@Override
|
public void onTaskListFail(String errorInfo) {
|
if (isCancelAnimtion) {//已经退出不进行下一步
|
return;
|
}
|
isLoad = true;
|
Toast.makeText(this, "获取金币任务列表失败", Toast.LENGTH_SHORT).show();
|
if (mGoldTaskList.size() == 0) {
|
bottom.setVisibility(View.VISIBLE);
|
ff_loading_no_data.setVisibility(View.VISIBLE); //展示 无数据页
|
} else {
|
if (NetUtils.getNetworkState(ff_loading_no_data.getContext()).equalsIgnoreCase(NetUtils.NETWORK_NONE)) {
|
Toast.makeText(ff_loading_no_data.getContext(), "网络未连接,请检测网络设置", Toast.LENGTH_SHORT).show();
|
} else {
|
Toast.makeText(ff_loading_no_data.getContext(), "网络连接异常,请检测网络设置", Toast.LENGTH_SHORT).show();
|
}
|
}
|
}
|
|
/**
|
* 点击删除 金币(网络请求)
|
* 先请求成功在 删除金币(移动删除)
|
* 此方法在 WaterView中调用
|
*
|
* @param view
|
* @param id
|
*/
|
public void handViewClick(View view, int id) {
|
if (isCancelAnimtion) {//已经退出不进行下一步
|
return;
|
}
|
mview = view;
|
mPresenter.getReceiveGoldCoin(this, mPresenter.getUid(this), "0", "[" + id + "]");
|
}
|
|
private View mview = null;
|
|
/**
|
* 网络请求 领取金币 成功
|
* 显示删除动画
|
*
|
* @param obj
|
*/
|
@Override
|
public void onReceiveGoldCoin(JSONObject obj) {
|
if (isCancelAnimtion) {//已经退出不进行下一步
|
return;
|
}
|
goldtask_waterAll.setEnabled(true);
|
// Log.e(TAG, "onReceiveGoldCoin: " + (mview != null) + mOneKeyreceive);
|
//领取单个
|
if (mview != null && !mOneKeyreceive) {
|
// Log.e(TAG, "领取单个: ");
|
Water water = getWaterRemaining();
|
// Log.e(TAG, "添加的view: " + (water != null));
|
// 取出未添加的 waters
|
goldtask_water.handViewClick(mview, true, water != null ? water : null);
|
}
|
//一键领取
|
if (mview == null && mOneKeyreceive) {
|
onALLScaleAnimation(1300);
|
}
|
mview = null;
|
if (obj.optInt("code") == 0) {//获取返回的金币数量
|
//一共领取总数
|
goldtask_scrolltxt.withNumber(obj.optJSONObject("data").optInt("goldCoin"), Integer.valueOf(goldtask_scrolltxt.getText() + "")).start();
|
}
|
// onNotReceived(obj);//传入未领取金币
|
}
|
|
/**
|
* 网络请求 领取金币失败
|
*
|
* @param errorInfo
|
*/
|
@Override
|
public void onReceiveGoldCoinFail(String errorInfo) {
|
if (isCancelAnimtion) {//已经退出不进行下一步
|
return;
|
}
|
mview = null;
|
mOneKeyreceive = false;
|
goldtask_waterAll.setEnabled(true);
|
Toast.makeText(this, "领取失败", Toast.LENGTH_SHORT).show();
|
}
|
|
/**
|
* 获取 剩下的 金币球
|
*
|
* @return
|
*/
|
private Water getWaterRemaining() {
|
if (isCancelAnimtion) {//已经退出不进行下一步
|
return null;
|
}
|
Water wa = null;
|
if (mWaters.size() > 5) {
|
Log.e(TAG, "获取 剩下的 金币球: " + mWaters.size());
|
//直接从六条数据开始 (查询未标记已添加该数据)
|
for (int i = 0; i < mWaters.size(); i++) {
|
if (!mWaters.get(i).increase) {//未添加该条数据
|
Log.e(TAG, "未添加该条数据: " + mWaters.get(i).taskName);
|
mWaters.get(i).increase = true;//标记添加该条数据
|
Log.e(TAG, "标记添加该条数据: " + mWaters.get(i).increase);
|
wa = mWaters.get(i);
|
Log.e(TAG, " wa = mWaters.get(i);: " + wa.increase);
|
mWater.add(wa);//传入数据添加进去
|
Log.e(TAG, "传入数据添加进去: " + mWater.size());
|
i = mWaters.size() + 10;//跳出循环
|
break;
|
}
|
Log.e(TAG, "查询: " + i + "--" + mWaters.get(i).increase);
|
// //查询到最后一条数据时候
|
// if (i >= mWaters.size() - 1) {
|
//
|
// }
|
}
|
|
return wa;
|
} else {
|
Log.e(TAG, "getWaterRemaining: null");
|
return wa;
|
}
|
}
|
|
private boolean Pan = false;//金币布局和 一键领取是否平移过
|
|
/**
|
* 一键领取所有金币动画
|
* long millis 动画执行时间
|
*/
|
public void onALLScaleAnimation(long millis) {
|
if (isCancelAnimtion) {//已经退出不进行下一步
|
return;
|
}
|
if (mWaters.size() != 0) {
|
//一件领取按钮缩放动画
|
mPresenter.onALLScaleAnimation(goldtask_waterAll);
|
//收取金币球
|
goldtask_water.postDelayed(new Runnable() {
|
@Override
|
public void run() {
|
goldtask_water.setReceiveALL();
|
}
|
}, 200);
|
//一件领取向下平移动画
|
goldtask_water.postDelayed(new Runnable() {
|
@Override
|
public void run() {
|
if (isCancelAnimtion) {//已经退出不进行下一步
|
return;
|
}
|
goldtask_water.reset();//重置子view 清空所有数据
|
mPresenter.animContentView(goldtask_scroll, null, goldtask_waterAll, 400, false);//平移到屏幕中央
|
animRemoveView(goldtask_waterAll, 400);//向下平移动画
|
if (mWaters != null) {
|
mWaters.clear();//清空所有数据
|
}
|
if (mWater != null) {
|
mWater.clear();//清空所有数据
|
}
|
}
|
}, millis);
|
int content = 0;
|
for (Water w : mWaters) {
|
if (!w.mremove) {//获取没有标记删除的 金币总数
|
content += w.goldCoin;
|
}
|
}
|
|
// //一共领取总数
|
// goldtask_scrolltxt.withNumber(content + Integer.valueOf(goldtask_scrolltxt.getText() + ""), Integer.valueOf(goldtask_scrolltxt.getText() + "")).start();
|
} else {//没有数据直接展示收缩布局
|
goldtask_scroll.postDelayed(new Runnable() {//必须设置延时 不然获取不了goldtask_waterAll 的高度
|
@Override
|
public void run() {
|
if (isCancelAnimtion) {//已经退出不进行下一步
|
return;
|
}
|
mPresenter.animContentView(goldtask_scroll, null, goldtask_waterAll, 0, false);//平移到屏幕中央
|
animRemoveView(goldtask_waterAll, 0);//向下平移动画
|
setOffheight(true);
|
}
|
}, 100);
|
|
}
|
}
|
|
|
/**
|
* 开启 金币能量球
|
*/
|
public void onWaterView_create() {
|
//已经开启过了
|
if (mNotReceived || mOneKeyreceive) {
|
return;
|
}
|
goldtask_scroll.postDelayed(new Runnable() {
|
@Override
|
public void run() {
|
mNotReceived = true;//打开标记
|
int left = goldtask_scroll.getLeft();//得到了正确的值
|
int right = goldtask_scroll.getRight();
|
int top = goldtask_scroll.getTop();
|
int bottom = goldtask_scroll.getBottom();
|
//重新设置 金币球
|
goldtask_water.setWaters(mWater, (left + ((right - left) / 2)), (top + ((bottom - top) / 2)) - 80, false);
|
}
|
}, 100);
|
}
|
|
/**
|
* 重置WaterView子view
|
*/
|
public void onWaterView_reset() {
|
if (isCancelAnimtion) {//已经退出不进行下一步
|
return;
|
}
|
goldtask_water.reset();
|
}
|
|
@Override
|
protected void onPause() {
|
super.onPause();
|
mfirst = false;
|
// onWaterView_reset();
|
}
|
|
@Override
|
protected void onStop() {
|
super.onStop();
|
mfirst = false;
|
}
|
|
@Override
|
protected void onDestroy() {
|
super.onDestroy();
|
isCancelAnimtion = true;
|
isCancel = true;
|
mNotReceived = true;
|
mOneKeyreceive = true;
|
if (mHandler != null) {
|
mHandler.removeCallbacksAndMessages(this);
|
}
|
// mHandler = null;
|
// bottom = null;
|
// mview = null;
|
// mDestroyPoint = null;
|
if (mWaters != null) {
|
mWaters.clear();//清空所有数据
|
}
|
if (mWater != null) {
|
mWater.clear();//清空所有数据
|
}
|
if (mGoldTaskList != null) {
|
mGoldTaskList.clear();//清空所有数据
|
}
|
if (dialog != null && dialog.isShowing()) {
|
dialog.dismiss();
|
}
|
}
|
}
|