package com.hua.goddess.fragment;
import java.util.ArrayList;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.os.Bundle;
import android.os.Handler;
import android.support.v4.app.FragmentActivity;
import android.text.Html;
import android.text.method.LinkMovementMethod;
import android.util.DisplayMetrics;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.widget.BaseAdapter;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.PopupWindow;
import android.widget.RelativeLayout;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;
import android.widget.TextView;
import android.widget.Toast;
import com.hua.goddess.R;
import com.hua.goddess.base.communicate.GetNewsDetailInterface;
import com.hua.goddess.global.Globe;
import com.hua.goddess.utils.HtmlResolving;
import com.hua.goddess.utils.PreferencesUtils;
import com.hua.goddess.vo.NewsContentVo;
import com.jeremyfeinstein.slidingmenu.lib.SlidingMenu;
import com.nostra13.universalimageloader.core.assist.PauseOnScrollListener;
import com.nostra13.universalimageloader.core.assist.SimpleImageLoadingListener;
import com.umeng.analytics.MobclickAgent;
public class NewsTextDetailFragment extends BaseFragment implements
OnClickListener {
private String newsId;
private View container_view;
private LayoutInflater inflater;
private LinearLayout container_lin;
private ArrayList<NewsContentVo> content_list;
private Handler handler = new Handler();
private ImageButton back, comment;
private ImageButton read_mode;
private boolean readerMode; // 阅读模式(夜间,白天)
private ImageButton change_text_size;
public static final int TEXT_TYPE = 0;
public static final int IMG_TYPE = 1;
private int fontsize = 17; // 字体大小
private PreferencesUtils pu;
private LinearLayout menu_layout;
private PopupWindow popupWindow;
private SeekBar fontseek;
private TextView text1;
private MAdapter mAdapter;
private ListView listView;
private int width;
private RelativeLayout title_bar;
private TextView time_smallfont;
private TextView news_title_name;
private SlidingMenu sm;
private FragmentActivity context;
public NewsTextDetailFragment(String newsId,SlidingMenu sm) {
this.newsId = newsId;
this.sm = sm;
}
@Override
public void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
context = getActivity();
this.inflater = inflater;
container_view = inflater.inflate(R.layout.fragment_container, null);
container_lin = (LinearLayout) container_view
.findViewById(R.id.container);
// 取出屏幕的宽和高
DisplayMetrics metric = new DisplayMetrics();
context.getWindowManager().getDefaultDisplay().getMetrics(metric);
width = metric.widthPixels;
new getNewsDataThread().start();
pu = new PreferencesUtils(context);
readerMode = pu.getBoolean(Globe.READERMODE, false);
fontsize = pu.getInt(Globe.FONTSIZE, 17); // 初始化文字大小
return container_view;
}
private void initView() {
View view = inflater.inflate(R.layout.news_text_detail, null);
view.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,
LayoutParams.MATCH_PARENT));
listView = (ListView) view.findViewById(R.id.listview_text);
listView.setOnScrollListener(new PauseOnScrollListener(imageLoader,
false, true));
View head_view = inflater.inflate(R.layout.fragment_container_headview,
null);
title_bar = (RelativeLayout) head_view.findViewById(R.id.title_bar);
time_smallfont = (TextView) head_view.findViewById(R.id.time_smallfont);
time_smallfont.setText(content_list.get(0).getContentList());
((TextView) head_view.findViewById(R.id.auther_smallfon))
.setText(content_list.get(1).getContentList());
news_title_name = (TextView) head_view
.findViewById(R.id.news_title_name);
news_title_name.setText(content_list.get(2).getContentList());
listView.addHeaderView(head_view);
content_list.subList(0, 3).clear();
mAdapter = new MAdapter(content_list);
listView.setAdapter(mAdapter);
// 初始化底部菜单
menu_layout = (LinearLayout) view.findViewById(R.id.menu_layout);
change_text_size = (ImageButton) view
.findViewById(R.id.change_text_size);
change_text_size.setOnClickListener(this);
read_mode = (ImageButton) view.findViewById(R.id.read_mode);
read_mode.setOnClickListener(this);
back = (ImageButton) view.findViewById(R.id.back_img);
back.setOnClickListener(this);
comment = (ImageButton) view.findViewById(R.id.comment_img);
comment.setOnClickListener(this);
if (readerMode) {
// 夜间模式
readerModeNight();
} else {
readerMode();
}
container_lin.removeAllViews();
container_lin.addView(view);
}
public void onResume() {
super.onResume();
MobclickAgent.onPageStart("NewsTextDetail"); // 统计页面
}
public void onPause() {
super.onPause();
MobclickAgent.onPageEnd("NewsTextDetail");
}
class getNewsDataThread extends Thread {
@Override
public void run() {
try {
String news_detaiol = GetNewsDetailInterface.getNetData(newsId);
HtmlResolving hResolving = new HtmlResolving();
content_list = hResolving.getNewsContent(news_detaiol);
handler.post(new Runnable() {
@Override
public void run() {
if (content_list != null && content_list.size() > 0) {
initView();
} else {
Toast.makeText(context, R.string.no_net_data,
Toast.LENGTH_SHORT).show();
}
}
});
} catch (Exception e) {
e.printStackTrace();
}
}
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.change_text_size: // 修改字体大小
LinearLayout layout = (LinearLayout) inflater.inflate(
R.layout.pop_text_size, null);
popupWindow = new PopupWindow(context);
popupWindow.setBackgroundDrawable(new BitmapDrawable());
popupWindow.setWidth(context.getWindowManager()
.getDefaultDisplay().getWidth());
popupWindow.setHeight(context.getWindowManager()
.getDefaultDisplay().getHeight() / 6);
popupWindow.setAnimationStyle(R.style.AnimationPreview2);
popupWindow.setOutsideTouchable(true);
popupWindow.setFocusable(true);// 响应回退按钮事件
popupWindow.setContentView(layout);
int[] location = new int[2];
v.getLocationOnScreen(location);
popupWindow.showAtLocation(v.findViewById(R.id.change_text_size),
Gravity.NO_GRAVITY, location[0],
location[1] - popupWindow.getHeight());
fontseek = (SeekBar) layout.findViewById(R.id.settings_font);
fontseek.setMax(20);
fontseek.setProgress(fontsize - 10);
fontseek.setSecondaryProgress(0);
text1 = (TextView) layout.findViewById(R.id.fontSub);
text1.setText(fontsize + "");
fontseek.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
fontsize = progress + 10;
text1.setText("" + fontsize);
notifyAdapter();
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
pu.putInt(Globe.FONTSIZE, fontsize);
}
});
break;
case R.id.read_mode:
if (readerMode) {
readerMode = false;
notifyAdapter();
readerMode();
// 保存数据
pu.putBoolean(Globe.READERMODE, false);
} else {
readerMode = true;
notifyAdapter();
readerModeNight();
// 保存数据
pu.putBoolean(Globe.READERMODE, true);
}
break;
case R.id.back_img:
context.finish();
break;
case R.id.comment_img:
if (sm.isMenuShowing()) {
sm.showMenu(false);
} else {
sm.showMenu(true);
}
break;
}
}
private void notifyAdapter() {
if (mAdapter != null)
mAdapter.notifyDataSetChanged();
}
// 白天模式修改界面
public void readerMode() {
title_bar.setBackgroundColor(-1);
listView.setBackgroundColor(-1); // #000000
time_smallfont.setTextColor(-13421773);
news_title_name.setTextColor(-13421773);
read_mode.setImageResource(R.drawable.bottom_menu_mode_light1);
menu_layout.setBackgroundColor(context.getResources().getColor(
R.color.menu_bottom_bg));
}
// 夜间模式修改界面
public void readerModeNight() {
title_bar.setBackgroundColor(-13947856);
listView.setBackgroundColor(-13947856); // #2b2c30
time_smallfont.setTextColor(-7895161);
news_title_name.setTextColor(-7895161);
read_mode.setImageResource(R.drawable.bottom_menu_mode_light2);
menu_layout.setBackgroundColor(-13947856);
}
public class MAdapter extends BaseAdapter {
ArrayList<NewsContentVo> voList;
public MAdapter(ArrayList<NewsContentVo> voList) {
this.voList = voList;
}
@Override
public int getCount() {
return voList == null ? 0 : voList.size();
}
@Override
public Object getItem(int position) {
return voList == null ? null : voList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
public boolean isEnabled(int position) {
return false;
}
public boolean areAllItemsEnabled() {
return false;
}
@Override
public int getItemViewType(int position) {
NewsContentVo vo = (NewsContentVo) getItem(position);
return vo.getIsImg();
}
@Override
public int getViewTypeCount() {
return 2;
}
@Override
public View getView(final int position, View convertView,
ViewGroup parent) {
final NewsContentVo vo = (NewsContentVo) getItem(position);
int type = getItemViewType(position);// 获取当前位置对应的类别
if (convertView == null) {
switch (type) {
case TEXT_TYPE:
convertView = inflater.inflate(
R.layout.news_content_textview, null);
break;
case IMG_TYPE:
convertView = inflater.inflate(R.layout.news_content_image,
null);
break;
}
}
if (vo != null) {
switch (type) {
case TEXT_TYPE:
// 对应设置文字内容F
TextView tv = (TextView) convertView
.findViewById(R.id.content_textView1);
String text = vo.getContentList();
tv.setTextSize(fontsize);
if (readerMode) {
tv.setTextColor(-7895161);// #878787
} else {
tv.setTextColor(-13421773);
}
tv.setText(Html.fromHtml(text));
tv.setMovementMethod(LinkMovementMethod.getInstance());
break;
case IMG_TYPE:
// 加载图片
ImageView iv = (ImageView) convertView
.findViewById(R.id.content_imageView1);
String url = vo.getContentList();
if (vo.getContentList().startsWith("http:")) {
url = vo.getContentList();
} else {
url = Globe.SUZHOU + vo.getContentList();
}
imageLoader.displayImage(url, iv, options,
new ListImgLoadingListener());
break;
default:
break;
}
}
return convertView;
}
}
private class ListImgLoadingListener extends SimpleImageLoadingListener {
final List<String> displayedImages = Collections
.synchronizedList(new LinkedList<String>());
// int list_img_margin = context.getResources()
// .getDimensionPixelOffset(R.dimen.activity_article_img_margin);
@Override
public void onLoadingComplete(String imageUri, View view,
Bitmap loadedImage) {
if (loadedImage != null) {
// ImageView imageView = (ImageView) view;
boolean firstDisplay = !displayedImages.contains(imageUri);
if (firstDisplay) {
// FadeInBitmapDisplayer.animate(imageView, 500);
displayedImages.add(imageUri);
int bmHeight = loadedImage.getHeight();
int bmWidth = loadedImage.getWidth();
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
android.widget.LinearLayout.LayoutParams.MATCH_PARENT,
(bmHeight * width - 300) / bmWidth);
lp.leftMargin = 100;
lp.rightMargin = 100;
lp.topMargin = 10;
lp.bottomMargin = 10;
view.setLayoutParams(lp);
}
}
}
}
}