package com.example.jingbin.cloudreader.ui.one;
import android.app.Activity;
import android.content.Intent;
import android.databinding.DataBindingUtil;
import android.graphics.Color;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.support.v4.app.ActivityCompat;
import android.support.v4.app.ActivityOptionsCompat;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.Toast;
import com.bumptech.glide.Glide;
import com.bumptech.glide.load.resource.drawable.GlideDrawable;
import com.bumptech.glide.request.RequestListener;
import com.bumptech.glide.request.target.Target;
import com.example.jingbin.cloudreader.R;
import com.example.jingbin.cloudreader.bean.moviechild.SubjectsBean;
import com.example.jingbin.cloudreader.databinding.ActivitySlideShadeViewBinding;
import com.example.jingbin.cloudreader.utils.CommonUtils;
import com.example.jingbin.cloudreader.utils.DebugUtil;
import com.example.jingbin.cloudreader.utils.StringFormatUtil;
import com.example.jingbin.cloudreader.view.MyNestedScrollView;
import com.example.jingbin.cloudreader.view.statusbar.StatusBarUtil;
import com.example.jingbin.cloudreader.view.test.StatusBarUtils;
import jp.wasabeef.glide.transformations.BlurTransformation;
import static com.example.jingbin.cloudreader.view.statusbar.StatusBarUtil.getStatusBarHeight;
/**
* 思路:
* 1、透明状态栏(透明titlebar,使背景图上移)
* 2、titlebar底部增加和背景一样的高斯模糊图,并上移图片的高度-titlebar的高度(为了使背景图的底部作为titlebar的背景)
* 3、上移,通过scrollview拿到上移的高度,同时(在背景图的高度内) 调整titlebar的颜色使透明变为不透明,调整背景图的颜色,是不透明变为透明
* 4、下拉,使上面反过来即可
*/
public class SlideShadeViewActivity extends AppCompatActivity {
private int slidingDistance;
private SubjectsBean subjectsBean;
private ActivitySlideShadeViewBinding binding;
private String TAG = "---SlideShadeView:";
// 这个是高斯图背景的高度
private int imageBgHeight;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding = DataBindingUtil.setContentView(this, R.layout.activity_slide_shade_view);
if (getIntent() != null) {
subjectsBean = (SubjectsBean) getIntent().getSerializableExtra("bean");
}
setData();
// toolbar 的高
int toolbarHeight = binding.titleToolBar.getLayoutParams().height;
Log.i(TAG, "toolbar height:" + toolbarHeight);
final int headerBgHeight = toolbarHeight + getStatusBarHeight(this);
Log.i(TAG, "headerBgHeight:" + headerBgHeight);
// 使背景图向上移动到图片的最低端,保留(titlebar+statusbar)的高度
ViewGroup.LayoutParams params = binding.ivTitleHeadBg.getLayoutParams();
ViewGroup.MarginLayoutParams ivTitleHeadBgParams = (ViewGroup.MarginLayoutParams) binding.ivTitleHeadBg.getLayoutParams();
int marginTop = params.height - headerBgHeight;
ivTitleHeadBgParams.setMargins(0, -marginTop, 0, 0);
binding.ivTitleHeadBg.setImageAlpha(0);
StatusBarUtils.setTranslucentImageHeader(this, 0, binding.titleToolBar);
// 上移背景图片,使空白状态栏消失
if (binding.include.imgItemBg != null) {
ViewGroup.MarginLayoutParams layoutParams = (ViewGroup.MarginLayoutParams) binding.include.imgItemBg.getLayoutParams();
layoutParams.setMargins(0, -StatusBarUtil.getStatusBarHeight(this), 0, 0);
}
ViewGroup.LayoutParams imgItemBgparams = binding.include.imgItemBg.getLayoutParams();
// 获得高斯图背景的高度
imageBgHeight = imgItemBgparams.height;
// 数据配置
setTitleBar();
setHeaderData(subjectsBean);
// 变色
initScrollViewListener();
initNewSlidingParams();
}
/**
* 加载titlebar背景
*/
private void setData() {
if (subjectsBean != null) {
// 高斯模糊背景 原来 参数:12,5 23,4
Glide.with(this).load(subjectsBean.getImages().getLarge())
.error(R.drawable.stackblur_default)
.bitmapTransform(new BlurTransformation(this, 23, 4)).listener(new RequestListener<String, GlideDrawable>() {
@Override
public boolean onException(Exception e, String model, Target<GlideDrawable> target, boolean isFirstResource) {
return false;
}
@Override
public boolean onResourceReady(GlideDrawable resource, String model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) {
binding.titleToolBar.setBackgroundColor(Color.TRANSPARENT);
binding.ivTitleHeadBg.setImageAlpha(0);
binding.ivTitleHeadBg.setVisibility(View.VISIBLE);
return false;
}
}).into(binding.ivTitleHeadBg);
}
}
private void setHeaderData(SubjectsBean positionData) {
binding.include.setSubjectsBean(positionData);
}
private void setTitleBar() {
setSupportActionBar(binding.titleToolBar);
ActionBar actionBar = getSupportActionBar();
if (actionBar != null) {
//去除默认Title显示
actionBar.setDisplayShowTitleEnabled(false);
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setHomeAsUpIndicator(R.drawable.icon_back);
}
// title
binding.tvTitle.setText(subjectsBean.getTitle());
// 副标题
binding.tvSubtitle.setText("主演:" + StringFormatUtil.formatName(subjectsBean.getCasts()));
binding.titleToolBar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onBackPressed();
}
});
}
//
private void initScrollViewListener() {
// 为了兼容23以下
binding.nsvScrollview.setOnScrollChangeListener(new MyNestedScrollView.ScrollInterface() {
@Override
public void onScrollChange(int scrollX, int scrollY, int oldScrollX, int oldScrollY) {
scrollChangeHeader(scrollY);
}
});
}
private void initNewSlidingParams() {
int titleBarAndStatusHeight = (int) (CommonUtils.getDimens(R.dimen.nav_bar_height) + getStatusBarHeight(this));
slidingDistance = imageBgHeight - titleBarAndStatusHeight - (int) (CommonUtils.getDimens(R.dimen.nav_bar_height_more));
}
/**
* 根据页面滑动距离改变Header方法
*/
private void scrollChangeHeader(int scrolledY) {
DebugUtil.error("---scrolledY: " + scrolledY);
DebugUtil.error("-----slidingDistance: " + slidingDistance);
if (scrolledY < 0) {
scrolledY = 0;
}
float alpha = Math.abs(scrolledY) * 1.0f / (slidingDistance);
DebugUtil.error("----alpha: " + alpha);
Drawable drawable = binding.ivTitleHeadBg.getDrawable();
if (scrolledY <= slidingDistance) {
// title部分的渐变
drawable.mutate().setAlpha((int) (alpha * 255));
binding.ivTitleHeadBg.setImageDrawable(drawable);
} else {
drawable.mutate().setAlpha(255);
binding.ivTitleHeadBg.setImageDrawable(drawable);
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.slide, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_search:
Toast.makeText(this, "搜索", Toast.LENGTH_SHORT).show();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
/**
* @param context activity
* @param positionData bean
* @param imageView imageView
*/
public static void start(Activity context, SubjectsBean positionData, ImageView imageView) {
Intent intent = new Intent(context, SlideShadeViewActivity.class);
intent.putExtra("bean", positionData);
ActivityOptionsCompat options =
ActivityOptionsCompat.makeSceneTransitionAnimation(context,
imageView, CommonUtils.getString(R.string.transition_movie_img));//与xml文件对应
ActivityCompat.startActivity(context, intent, options.toBundle());
}
}