package com.jerey.keepgank.fragment; import android.animation.ValueAnimator; import android.os.Build; import android.os.Bundle; import android.support.design.widget.AppBarLayout; import android.support.design.widget.CollapsingToolbarLayout; import android.support.design.widget.FloatingActionButton; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.DefaultItemAnimator; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.Toolbar; import android.util.Log; import android.view.View; import android.view.animation.AccelerateInterpolator; import android.widget.ImageView; import com.bumptech.glide.Glide; import com.jerey.keepgank.R; import com.jerey.keepgank.View.SlideInOutRightItemAnimator; import com.jerey.keepgank.adapter.DayFragmentAdapter; import com.jerey.keepgank.bean.GankDay; import com.jerey.keepgank.net.GankApi; import com.jerey.lruCache.DiskLruCacheManager; import com.orhanobut.logger.Logger; import com.trello.rxlifecycle.FragmentEvent; import com.wdullaer.materialdatetimepicker.date.DatePickerDialog; import java.io.IOException; import java.util.Calendar; import java.util.Date; import butterknife.Bind; import rx.Subscriber; import rx.android.schedulers.AndroidSchedulers; import rx.schedulers.Schedulers; import static com.jerey.keepgank.R.id.toolbar; /** * Created by Xiamin on 2017/2/15. */ public class TodayFragment extends BaseFragment implements DatePickerDialog.OnDateSetListener { private static final String TAG = "TodayFragment"; @Bind(toolbar) Toolbar mToolbar; @Bind(R.id.toolbar_layout) CollapsingToolbarLayout mToolbarLayout; @Bind(R.id.app_bar) AppBarLayout mAppBar; @Bind(R.id.day_recycleview) RecyclerView mRecyclerView; @Bind(R.id.story_img) ImageView mImageView; @Bind(R.id.float_action_button) FloatingActionButton mButton; private LinearLayoutManager mLinearLayoutManager; private DayFragmentAdapter mAdapter; int year; int month; int day; private DiskLruCacheManager mDiskLruCacheManager; @Override protected int returnLayoutID() { return R.layout.fragment_day; } @Override protected void afterCreate(Bundle savedInstanceState) { ((AppCompatActivity) getActivity()).setSupportActionBar(mToolbar); initUI(); mAdapter = new DayFragmentAdapter(getActivity()); Calendar c = null; java.util.Calendar calendar = java.util.Calendar.getInstance(); calendar.setTime(new Date()); year = calendar.get(java.util.Calendar.YEAR); month = calendar.get(java.util.Calendar.MONTH) + 1; day = calendar.get(java.util.Calendar.DAY_OF_MONTH); //加载前一天的先 load(year, month, day - 1); //再加载今天的 load(year, month, day); try { mDiskLruCacheManager = new DiskLruCacheManager(getActivity(), "xiamin"); Log.i(TAG, "DiskLruCacheManager 创建"); GankDay gankDay = mDiskLruCacheManager.getAsSerializable(TAG); Log.i(TAG, "DiskLruCacheManager 读取数据 " + gankDay); if(gankDay != null) { loadUIByGankday(gankDay); } } catch (IOException e) { Log.e(TAG, "DiskLruCacheManager 创建失败"); e.printStackTrace(); } } private void initUI() { mToolbarLayout.setTitle("今日热点"); mImageView.setImageResource(R.drawable.jay); //设置渐显动画,替换状态栏颜色 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { int statusBarColor = ((AppCompatActivity) getActivity()).getWindow().getStatusBarColor(); mToolbarLayout.setContentScrimColor(statusBarColor); if (statusBarColor != ((AppCompatActivity) getActivity()).getWindow().getStatusBarColor()) { ValueAnimator statusBarColorAnim = ValueAnimator.ofArgb( ((AppCompatActivity) getActivity()).getWindow().getStatusBarColor(), statusBarColor); statusBarColorAnim.addUpdateListener(new ValueAnimator .AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator animation) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { ((AppCompatActivity) getActivity()).getWindow().setStatusBarColor((int) animation.getAnimatedValue()); } } }); //设置转换颜色的动画时间 statusBarColorAnim.setDuration(1000L); statusBarColorAnim.setInterpolator( new AccelerateInterpolator()); statusBarColorAnim.start(); } } mRecyclerView.setHasFixedSize(true); mRecyclerView.setItemAnimator(new DefaultItemAnimator()); mLinearLayoutManager = new LinearLayoutManager(mRecyclerView.getContext()); mRecyclerView.setLayoutManager(mLinearLayoutManager); mButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Calendar now = Calendar.getInstance(); DatePickerDialog datePickerDialog = DatePickerDialog.newInstance( TodayFragment.this, now.get(Calendar.YEAR), now.get(Calendar.MONTH), now.get(Calendar.DAY_OF_MONTH) ); datePickerDialog.setVersion(DatePickerDialog.Version.VERSION_2); datePickerDialog.show(getActivity().getFragmentManager(), "Datepickerdialog"); } }); } private void load(final int year, final int month, final int day) { GankApi.getInstance() .getWebService() .getGoodsByDay(year, month, day) .compose(this.<GankDay>bindUntilEvent(FragmentEvent.DESTROY_VIEW)) .cache() .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Subscriber<GankDay>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { showSnackbar(R.string.error); } @Override public void onNext(GankDay gankDay) { Logger.d(gankDay.toString()); if (gankDay != null && gankDay.results != null && gankDay.results.Android != null) { mToolbarLayout.setTitle(year + "年" + month + "月" + day + "日"); mDiskLruCacheManager.put(TAG, gankDay); loadUIByGankday(gankDay); } else { showSnackbar("该日可能没有更新哦"); } } }); } private void loadUIByGankday(GankDay gankDay){ Logger.d(gankDay.results.福利.get(0).getUrl()); Glide.with(TodayFragment.this) .load(gankDay.results.福利.get(0).getUrl()) .centerCrop() .crossFade() .error(R.drawable.jay) .into(mImageView); mAdapter.setData(gankDay.results); mRecyclerView.setAdapter(mAdapter); mRecyclerView.setItemAnimator(new SlideInOutRightItemAnimator(mRecyclerView)); } @Override public void onDateSet(DatePickerDialog view, int year, int monthOfYear, int dayOfMonth) { Log.d("###", "DatePickerDialog" + year + "-" + monthOfYear + "-" + dayOfMonth); load(year, monthOfYear + 1, dayOfMonth); } @Override public void onDestroy() { super.onDestroy(); } }