package com.bigfat.androidltest;
import android.animation.Animator;
import android.app.ActionBar;
import android.app.Activity;
import android.app.ActivityOptions;
import android.content.Intent;
import android.graphics.Outline;
import android.os.Bundle;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.transition.ChangeBounds;
import android.transition.Explode;
import android.util.Pair;
import android.view.View;
import android.view.ViewAnimationUtils;
import android.view.ViewOutlineProvider;
import android.view.Window;
import android.view.animation.AccelerateDecelerateInterpolator;
import android.widget.ImageButton;
import android.widget.Toolbar;
import com.bigfat.androidltest.model.Paper;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends Activity implements View.OnClickListener {
private Toolbar toolbar;
private RecyclerView recyclerView;
private RecyclerViewAdapter recyclerViewAdapter;
private LinearLayoutManager linearLayoutManager;
private ImageButton imgBtnFloatButton;
public static List<Paper> paperList;
//表示是否是添加状态
private boolean isAdd = true;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//开启转场动画功能
getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS);
//设置转场动画
getWindow().setEnterTransition(new ChangeBounds().setDuration(1000));
getWindow().setExitTransition(new ChangeBounds().setDuration(500));
setContentView(R.layout.activity_main);
initView();
initData();
initToolbar();
initEvent();
initFloatButton();
initRecyclerView();
}
private void initView() {
toolbar = (Toolbar) findViewById(R.id.tb_main);
recyclerView = (RecyclerView) findViewById(R.id.rv_main);
imgBtnFloatButton = (ImageButton) findViewById(R.id.imgbtn_main_float_button);
}
private void initToolbar() {
setActionBar(toolbar);
ActionBar actionBar = getActionBar();
if (actionBar != null) {
getActionBar().setTitle("壁纸推荐");
}
}
private void initRecyclerView() {
linearLayoutManager = new LinearLayoutManager(this);
recyclerView.setLayoutManager(linearLayoutManager);
recyclerView.addItemDecoration(new SampleDivider(this));
//设置Item动画,这里使用系统实现的DefaultItemAnimator类
recyclerView.setItemAnimator(new DefaultItemAnimator());
//初始化Adapter
recyclerViewAdapter = new RecyclerViewAdapter(MainActivity.this, paperList);
recyclerView.setAdapter(recyclerViewAdapter);
}
private void initFloatButton() {
//浮动按钮裁剪
imgBtnFloatButton.setOutlineProvider(new ViewOutlineProvider() {
@Override
public void getOutline(View view, Outline outline) {
int shapeSize = (int) getResources().getDimension(R.dimen.shape_size);
outline.setRoundRect(0, 0, shapeSize, shapeSize, shapeSize / 2);
}
});
imgBtnFloatButton.setClipToOutline(true);
}
/**
* 初始化数据
*/
private void initData() {
//初始化/清空数据列表
if (paperList == null) {
paperList = new ArrayList<>();
}
paperList.clear();
//添加一个数据
addData(0);
}
private void addData(int position) {
paperList.add(position, new Paper(C.NAMES[paperList.size()], C.PICS[paperList.size()], C.WORKS[paperList.size()], C.PIC_GROUPS[paperList.size()]));
}
private void removeData(int position) {
paperList.remove(position);
}
private void initEvent() {
imgBtnFloatButton.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.imgbtn_main_float_button://点击后添加/删除一个元素
//浮动按钮点击动画
Animator animator = createCircularRevealAnimator(v);
animator.start();
//找到第一个可见元素的位置
int position = linearLayoutManager.findFirstCompletelyVisibleItemPosition();
//如果没有元素,则从第0位插入元素
if (position == RecyclerView.NO_POSITION) {
position = 0;
}
if (recyclerViewAdapter.getItemCount() != C.NAMES.length && isAdd) {//插入元素
//添加一个元素
addData(position);
//通知Adapter,position这里添加了一个元素,动态的把它显示出来
recyclerViewAdapter.notifyItemInserted(position);
} else {//删除元素
//删除一个元素
removeData(position);
//通知Adapter,position位置的元素没了,动态的把它抹掉
recyclerViewAdapter.notifyItemRemoved(position);
}
//调整增减状态,即当前点击浮动按钮是应该添加元素,还是删除元素
if (recyclerViewAdapter.getItemCount() == 0) {
imgBtnFloatButton.setImageDrawable(getDrawable(android.R.drawable.ic_input_add));
isAdd = true;
}
if (recyclerViewAdapter.getItemCount() == C.NAMES.length) {
imgBtnFloatButton.setImageDrawable(getDrawable(android.R.drawable.ic_delete));
isAdd = false;
}
break;
}
}
/**
* 进入DetailActivity
*/
public void startActivity(final View v, final int position) {
//获取点击的Item,也是与DetailActivity的共享元素
View pic = v.findViewById(R.id.img_list_item_pic);
//共享元素壁纸的TransitionName
String picTransitionName = position + "pic";
//声明使用的共享元素
Bundle bundle = ActivityOptions.makeSceneTransitionAnimation(MainActivity.this, Pair.create(pic,picTransitionName), Pair.create((View) imgBtnFloatButton, imgBtnFloatButton.getTransitionName())).toBundle();
Intent intent = new Intent(MainActivity.this, DetailActivity.class);
intent.putExtra("position", position);
startActivity(intent, bundle);
}
/**
* 获取圆形切小放大动画
*
* @param v 要执行动画的View
*/
private Animator createCircularRevealAnimator(View v) {
Animator animator = ViewAnimationUtils.createCircularReveal(v, v.getWidth() / 2, v.getHeight() / 2, 0, v.getWidth());
animator.setInterpolator(new AccelerateDecelerateInterpolator());
animator.setDuration(300);
return animator;
}
}