package com.cjj.cartoon.fragment;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.graphics.drawable.AnimationDrawable;
import android.os.AsyncTask;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.util.DisplayMetrics;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.AnimationUtils;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.cjj.cartoon.R;
import com.cjj.cartoon.adapter.ComicPagerAdapter;
import com.cjj.cartoon.callback.SeekbarImagePageCallback;
import com.cjj.cartoon.constants.Constant;
import com.cjj.cartoon.custom.HackyViewPager;
import com.cjj.cartoon.dao.YinhunDao;
import com.romainpiel.shimmer.Shimmer;
import com.romainpiel.shimmer.ShimmerTextView;
public class ComicImageFragment extends Fragment implements OnPageChangeListener{
String link = null;
String title = null;
private HackyViewPager vp_comic;
private ComicPagerAdapter mAdapter;
private static final String ISLOCKED_ARG = "isLocked";
private BatteryBroadcastReceiver batteryBroadcastReceiver;
private ImageView iv_battery;
private TextView tv_time,tv_title;
private RelativeLayout rl_time_battery , rl_tile;
public static ComicImageFragment instance;
private ImageView iv_shaonv;
private AnimationDrawable animationDrawable;
private ComicDataAsyncTask task;
private boolean timeFlag = true;
private LinearLayout ll_shaonv;
private Shimmer shimmer;
// private ListView lv_comic;
private boolean isListView = false;
public static ComicImageFragment newInstance(String url,String title) {
ComicImageFragment fragment = new ComicImageFragment();
Bundle args = new Bundle();
args.putString("url", url);
args.putString("title", title);
fragment.setArguments(args);
return fragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
instance = this;
task = new ComicDataAsyncTask();
if (savedInstanceState != null&&vp_comic!=null) {
boolean isLocked = savedInstanceState.getBoolean(ISLOCKED_ARG, false);
((HackyViewPager) vp_comic).setLocked(isLocked);
}
Bundle bundle = getArguments();
if (bundle != null)
{
link = bundle.getString("url");
title = bundle.getString("title");
}
initScreen();
registerVpReceiver();
registerBatteryReceiver();
super.onCreate(savedInstanceState);
}
private void registerBatteryReceiver() {
//注册一个接受广播类型
batteryBroadcastReceiver = new BatteryBroadcastReceiver();
getActivity().registerReceiver(batteryBroadcastReceiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
}
private void registerVpReceiver() {
IntentFilter myIntentFilter = new IntentFilter();
myIntentFilter.addAction(Constant.SEEKBAR_PAGE);
// 注册广播
getActivity().registerReceiver(mBroadcastReceiver, myIntentFilter);
}
private int screenWidth, screenHeight;
private void initScreen() {
DisplayMetrics dm = new DisplayMetrics();
getActivity().getWindowManager().getDefaultDisplay().getMetrics(dm);
screenWidth = dm.widthPixels;
screenHeight = dm.heightPixels;
}
@Override
public View onCreateView(LayoutInflater inflater,
@Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View v =inflater.inflate(R.layout.fragment_comic_vertical,null);
return v;
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
vp_comic = (HackyViewPager) view.findViewById(R.id.vp_comic);
vp_comic.setOnPageChangeListener(this);
vp_comic.setSeekbarViewPager(new SeekbarImagePageCallback() {
@Override
public void imagePage(int page) {
vp_comic.setCurrentItem(page);
}
});
// lv_comic = (ListView) view.findViewById(R.id.list_comic);
// lv_comic.setVerticalScrollBarEnabled(false);
rl_tile = (RelativeLayout) view.findViewById(R.id.rl_title);
tv_title = (TextView) view.findViewById(R.id.tv_title);
rl_time_battery = (RelativeLayout) view.findViewById(R.id.rl_time_battery);
iv_battery = (ImageView) view.findViewById(R.id.iv_battery);
tv_time = (TextView) view.findViewById(R.id.tv_time);
iv_shaonv = (ImageView) view.findViewById(R.id.imageView_load);
animationDrawable = (AnimationDrawable) iv_shaonv.getBackground();
animationDrawable.start();
ShimmerTextView tv_wait = (ShimmerTextView) view.findViewById(R.id.shimmer_tv);
if(checkVersionForShimmerEnable())
{
shimmer = new Shimmer();
shimmer.start(tv_wait);
}
ll_shaonv = (LinearLayout) view.findViewById(R.id.ll_shaonv);
super.onViewCreated(view, savedInstanceState);
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
task.execute(link);
new TimeThread().start();
showTitle();
super.onActivityCreated(savedInstanceState);
}
public HackyViewPager getViewpager()
{
if(vp_comic!=null)
{
return vp_comic;
}
return null;
}
private void showTitle() {
tv_title.setText(title);
}
@Override
public void onDestroyView() {
getActivity().unregisterReceiver(mBroadcastReceiver);
getActivity().unregisterReceiver(batteryBroadcastReceiver);
if(animationDrawable!=null&&animationDrawable.isRunning())
{
animationDrawable.stop();
animationDrawable = null;
}
timeFlag = false;
if(checkVersionForShimmerEnable())
{
shimmer.cancel();
}
super.onDestroyView();
}
// 当该Fragment被添加,显示到Activity时调用该方法
// 在此判断显示到的Activity是否已经实现了接口
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
if (!(activity instanceof ImageNumberFragmentCallBack)) {
throw new IllegalStateException(
"ComicImageFragment所在的Activity必须实现ImageNumberFragmentCallBack接口");
}
imageNumberFragmentCallBack = (ImageNumberFragmentCallBack) activity;
}
// 定义一个业务接口
// 该Fragment所在Activity需要实现该接口
// 该Fragment将通过此接口与它所在的Activity交互
private ImageNumberFragmentCallBack imageNumberFragmentCallBack;
public interface ImageNumberFragmentCallBack {
public void Size(int size);
public void currentPage(int page);
}
private class ComicDataAsyncTask extends
AsyncTask<String, Integer, ArrayList<String>> {
@Override
protected void onPostExecute(ArrayList<String> result) {
if(result!=null&&result.size()>0)
{
if(mAdapter == null)
{
if(!isListView)
{
if(imageNumberFragmentCallBack!=null)
imageNumberFragmentCallBack.Size(result.size());
mAdapter = new ComicPagerAdapter(getActivity(), result,screenWidth,screenHeight,vp_comic,handler);
vp_comic.setAdapter(mAdapter);
}else
{
// lv_comic.setAdapter(new ComicListViewAdapter(getActivity(), result,lv_comic,screenWidth));
}
ll_shaonv.setVisibility(View.GONE);
}else
{
}
}
}
@Override
protected void onProgressUpdate(Integer... values) {
super.onProgressUpdate(values);
}
@Override
protected ArrayList<String> doInBackground(String... params) {
ArrayList<String> all = null;
try {
all = YinhunDao.getInstance().getDetailComicImage(params[0]);
} catch (Exception e) {
e.printStackTrace();
}
publishProgress(90);
return all;
}
}
@Override
public void onSaveInstanceState(Bundle outState) {
if (isViewPagerActive()) {
outState.putBoolean(ISLOCKED_ARG, ((HackyViewPager) vp_comic).isLocked());
}
super.onSaveInstanceState(outState);
}
private boolean isViewPagerActive() {
return (vp_comic != null && vp_comic instanceof HackyViewPager);
}
@Override
public void onPageScrollStateChanged(int arg0) {
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
}
@Override
public void onPageSelected(int arg0) {
if(imageNumberFragmentCallBack!=null)
{
imageNumberFragmentCallBack.currentPage(arg0);
}
}
/**
* 监听页数广播
*/
private BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver(){
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
int item = intent.getIntExtra("pro",0);
if(action.equals(Constant.SEEKBAR_PAGE)){
vp_comic.setCurrentItem(item-1);
}
}
};
/**接受电量改变广播*/
class BatteryBroadcastReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
if(intent.getAction().equals(Intent.ACTION_BATTERY_CHANGED)){
int level = intent.getIntExtra("level", 0);
int scale = intent.getIntExtra("scale", 100);
int curPower = (level * 100 / scale)/25;
switch (curPower) {
case 0:
iv_battery.setImageResource(R.drawable.battery_4);
break;
case 1:
iv_battery.setImageResource(R.drawable.battery_25);
break;
case 2:
iv_battery.setImageResource(R.drawable.battery_50);
break;
case 3:
iv_battery.setImageResource(R.drawable.battery_75);
break;
case 4:
iv_battery.setImageResource(R.drawable.battery_100);
break;
}
}
}
}
public class TimeThread extends Thread
{
@Override
public void run() {
// TODO Auto-generated method stub
try {
while(timeFlag){
SimpleDateFormat sdf=new SimpleDateFormat("HH:mm");
String str=sdf.format(new Date());
handler.sendMessage(handler.obtainMessage(100,str));
Thread.sleep(1000);
}
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public Handler handler = new Handler()
{
public void handleMessage(android.os.Message msg) {
switch(msg.what)
{
case 100:
tv_time.setText(String.valueOf(msg.obj));
break;
case 101:
break;
}
};
};
public void showBatteryTip()
{
if(rl_time_battery!=null)
{
rl_time_battery.setVisibility(View.VISIBLE);
rl_tile.setVisibility(View.VISIBLE);
rl_time_battery.startAnimation(AnimationUtils.loadAnimation(getActivity(), R.anim.fade_in_time));
rl_tile.startAnimation(AnimationUtils.loadAnimation(getActivity(), R.anim.fade_in_title));
}
}
public void hideBatteryTip()
{
if(rl_time_battery!=null)
{
rl_time_battery.setVisibility(View.GONE);
rl_tile.setVisibility(View.GONE);
rl_time_battery.startAnimation(AnimationUtils.loadAnimation(getActivity(), R.anim.fade_out_time));
rl_tile.startAnimation(AnimationUtils.loadAnimation(getActivity(), R.anim.fade_out_title));
}
}
public boolean checkVersionForShimmerEnable()
{
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) {
return false;
}
return true;
}
}