/**
*
*/
package com.keju.maomao.activity.event;
import java.util.ArrayList;
import java.util.List;
import java.util.Timer;
import java.util.TimerTask;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.LinearLayout.LayoutParams;
import android.widget.TextView;
import com.keju.maomao.Constants;
import com.keju.maomao.R;
import com.keju.maomao.SystemException;
import com.keju.maomao.activity.bar.BarDetailActivity;
import com.keju.maomao.activity.base.BaseActivity;
import com.keju.maomao.bean.EventBean;
import com.keju.maomao.helper.BusinessHelper;
import com.keju.maomao.imagecache.ImageCache;
import com.keju.maomao.imagecache.ImageCache.ImageCacheParams;
import com.keju.maomao.imagecache.ImageFetcher;
import com.keju.maomao.util.AndroidUtil;
import com.keju.maomao.util.ImageUtil;
import com.keju.maomao.util.NetUtil;
import com.keju.maomao.util.SharedPrefUtil;
import com.keju.maomao.view.azzviewpager.JazzyViewPager;
import com.keju.maomao.view.azzviewpager.OutlineContainer;
/**
* 活动详情界面
*
* @author zhouyong
* @data 创建时间:2013-12-5 下午3:28:38
*/
public class EventDetailActivity extends BaseActivity implements OnClickListener {
private ImageButton ibLeft;
private Button btnRight;
private TextView tvTitle;
private TextView tvEventTitle, tvDistanceLabel;// 活动标题和详细地址
private TextView tvStartTime, tvEndTime;// 活动的开始时间和结束时间
private TextView tvJionNum, tvEventContent;// 活动的蚕参加的人数和内容
private List<EventBean> eventList = new ArrayList<EventBean>();// 活动
private JazzyViewPager eventViewPager;// 活动图片滚动空间
private MyPagerAdapter eventAdapter;
private ArrayList<View> views = new ArrayList<View>();
private LinearLayout viewMenuList;// 原点
private int currPosition = 0;// 当前位置
private View viewBanner;
private ImageView ivBanner;
private Handler iHandler;
private TimerTask timerTask;
private Timer timer;
private static final int HANDLE_TYPE_RUN = 1;
private ImageFetcher mImageFetcher;
private int screenWidth;// 屏幕宽度
private int count = 0;
// private boolean isCollectingTask = false;// 是否收藏
private String barName;
private int eventId; // 活动id
private Boolean isCollect;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.event_detail);
barName = getIntent().getExtras().getString("BARNAME");
eventId = getIntent().getExtras().getInt(Constants.EXTRA_DATA);
isCollect = getIntent().getExtras().getBoolean("ISCOLLECT");
screenWidth = this.getWindowManager().getDefaultDisplay().getWidth();// 获取图片宽度
ImageCacheParams cacheParams = new ImageCacheParams(this, Constants.APP_DIR_NAME);
cacheParams.memoryCacheEnabled = false;
cacheParams.compressQuality = 60;
mImageFetcher = new ImageFetcher(this, (int) ((screenWidth + 100) * AndroidUtil.getDensity(this)));
mImageFetcher.addImageCache(cacheParams);
findView();
fillData();
}
private void findView() {
ibLeft = (ImageButton) this.findViewById(R.id.ibLeft);
btnRight = (Button) this.findViewById(R.id.btnRight);
tvTitle = (TextView) this.findViewById(R.id.tvTitle);
eventViewPager = (JazzyViewPager) this.findViewById(R.id.eventViewPager);
viewMenuList = (LinearLayout) this.findViewById(R.id.viewMenuList);
tvEventTitle = (TextView) this.findViewById(R.id.tvEventTitle);
tvDistanceLabel = (TextView) this.findViewById(R.id.tvDistanceLabel);
tvStartTime = (TextView) this.findViewById(R.id.tvStartTime);
tvEndTime = (TextView) this.findViewById(R.id.tvEndTime);
tvJionNum = (TextView) this.findViewById(R.id.tvJionNum);
tvEventContent = (TextView) this.findViewById(R.id.tvEventContent);
}
private void fillData() {
ibLeft.setImageResource(R.drawable.ic_btn_left);
ibLeft.setOnClickListener(this);
btnRight.setBackgroundResource(R.drawable.bg_btn_collection);
btnRight.setOnClickListener(this);
if (isCollect) {
btnRight.setText("已收藏");
} else {
btnRight.setText("收藏");
}
tvTitle.setText(barName);
initMessageHandler();
if (NetUtil.checkNet(EventDetailActivity.this)) {
new GetEventDetailTask().execute();
} else {
showShortToast(R.string.NoSignalException);
}
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.ibLeft:
finish();
break;
case R.id.btnRight:
// showShortToast("正在执行收藏操作,请稍等...");
if (NetUtil.checkNet(this)) {
new CollectTask().execute();
// refreshData();
} else {
showShortToast(R.string.NoSignalException);
}
break;
default:
break;
}
}
/**
* 收藏
*
* @author Zhouyong
*
*/
private class CollectTask extends AsyncTask<Void, Void, JSONObject> {
@Override
protected JSONObject doInBackground(Void... params) {
int uid = SharedPrefUtil.getUid(EventDetailActivity.this);
try {
return new BusinessHelper().collectEvent(eventId, uid);
} catch (SystemException e) {
return null;
}
}
@Override
protected void onPostExecute(JSONObject result) {
super.onPostExecute(result);
if (result != null) {
try {
int status = result.getInt("status");
if (status == Constants.REQUEST_SUCCESS) {
if (isCollect) {
btnRight.setText("收藏");
showShortToast("取消收藏成功");
isCollect = false;
} else {
btnRight.setText("已收藏");
showShortToast("收藏成功");
isCollect = true;
}
} else {
}
} catch (JSONException e) {
showShortToast(R.string.json_exception);
}
} else {
showShortToast(R.string.connect_server_exception);
}
// isCollect = false;
}
}
/***
* 获取活动的详情
*
*/
private class GetEventDetailTask extends AsyncTask<Void, Void, JSONObject> {
@Override
protected void onPreExecute() {
super.onPreExecute();
showPd(R.string.loading);
}
@Override
protected JSONObject doInBackground(Void... params) {
int userId = SharedPrefUtil.getUid(EventDetailActivity.this);
try {
return new BusinessHelper().getEventDetail(eventId, userId);
} catch (SystemException e) {
e.printStackTrace();
}
return null;
}
/* (non-Javadoc)
* @see android.os.AsyncTask#onPostExecute(java.lang.Object)
*/
@Override
protected void onPostExecute(JSONObject result) {
super.onPostExecute(result);
dismissPd();
if (result != null) {
if (result.has("status")) {
try {
int status = result.getInt("status");
if (status == Constants.REQUEST_SUCCESS) {
JSONObject objEvent = result.getJSONObject("activity");
tvEventTitle.setText(objEvent.getString("title"));
tvDistanceLabel.setText(objEvent.getString("address"));
tvStartTime.setText(objEvent.getString("start_date"));
tvEndTime.setText(objEvent.getString("end_date"));
tvJionNum.setText(objEvent.getInt("join_people_number") + "");
tvEventContent.setText(objEvent.getString("activity_info"));
// isCollect = objEvent.getBoolean("is_collect");
if (result.has("activity_picture")) {
JSONArray showArrList = result.getJSONArray("activity_picture");
if (showArrList != null) {
ArrayList<EventBean> showBeans = (ArrayList<EventBean>) EventBean
.constractList(showArrList);
eventList.addAll(showBeans);
fillEventRecommend(showBeans);
}
}
}
} catch (JSONException e) {
showShortToast(R.string.json_exception);
}
}
} else {
showShortToast("服务器连接失败");
}
}
}
/**
* 填充活动数据
*
* @param list
*/
private void fillEventRecommend(final List<EventBean> eventList) {
if (eventList.size() <= 0) {
return;
}
views.clear();
viewMenuList.removeAllViews();
count = eventList.size();
for (int i = 0; i < eventList.size(); i++) {
final EventBean bean = eventList.get(i);
viewBanner = getLayoutInflater().inflate(R.layout.today_commened_item, null);
ivBanner = (ImageView) viewBanner.findViewById(R.id.ivBannerImage);
String picUrl = bean.getRecommendPhotoUrl();
final int viewPagerHeight = eventViewPager.getHeight();
ImageUtil.resetViewSize(ivBanner, screenWidth, viewPagerHeight);
if (mImageFetcher != null) {
mImageFetcher.loadImage(picUrl, ivBanner);
}
ivBanner.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
views.add(viewBanner);
ImageView iviewMenuList = new ImageView(this);// 原点设置
LayoutParams params = new LayoutParams(0, LayoutParams.WRAP_CONTENT, 1.0f);
params.leftMargin = 2;
params.rightMargin = 2;
iviewMenuList.setLayoutParams(params);
if (i == 0) {
iviewMenuList.setBackgroundResource(R.drawable.ic_pager_sel);
} else {
iviewMenuList.setBackgroundResource(R.drawable.ic_pager_nor);
}
viewMenuList.addView(iviewMenuList, i);
if (count == 1) {
viewMenuList.setVisibility(View.GONE);
} else {
viewMenuList.setVisibility(View.VISIBLE);
}
}
eventAdapter = new MyPagerAdapter(views);
eventViewPager.setAdapter(eventAdapter);
// int maxSize = 65535;
eventViewPager.setCurrentItem(0);
eventViewPager.setOnPageChangeListener(listener);
startTask();
}
private OnPageChangeListener listener = new OnPageChangeListener() {
@Override
public void onPageSelected(int position) {
if (count == 1 && position == 1) {
eventViewPager.setCurrentItem(0);
return;
}
currPosition = position;
changeState(position);
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
}
@Override
public void onPageScrollStateChanged(int arg0) {
}
};
/**
* 改变原点的状态
*
* @param position
*/
private void changeState(int position) {
int pos = position % count;
int count = viewMenuList.getChildCount();
for (int i = 0; i < count; i++) {
ImageView ivItem = (ImageView) viewMenuList.getChildAt(i);
if (i == pos) {
ivItem.setBackgroundResource(R.drawable.ic_pager_sel);
} else {
ivItem.setBackgroundResource(R.drawable.ic_pager_nor);
}
}
}
private void startTask() {
if (timerTask == null) {
timerTask = new TimerTask() {
@Override
public void run() {
Message msg = new Message();
msg.what = HANDLE_TYPE_RUN;
iHandler.sendMessage(msg);
}
};
timer = new Timer();
timer.schedule(timerTask, 0, 5000);
}
}
private void closeTimer() {
if (timer != null) {
timer.cancel();
timer = null;
}
if (timerTask != null) {
timerTask = null;
}
}
private void initMessageHandler() {
iHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
int what = msg.what;
switch (what) {
case HANDLE_TYPE_RUN:
if (++currPosition == count) {
currPosition = 0;
}
eventViewPager.setCurrentItem(currPosition);
break;
default:
break;
}
super.handleMessage(msg);
}
};
}
@Override
public void onPause() {
super.onPause();
closeTimer();
mImageFetcher.setExitTasksEarly(true);
mImageFetcher.flushCache();
}
@Override
public void onDestroy() {
super.onDestroy();
ImageCache mImageCache = mImageFetcher.getImageCache();
if (mImageCache != null) {
mImageCache.clearCache();
mImageCache.close();
mImageCache = null;
}
mImageFetcher.closeCache();
mImageFetcher.clearCache();
mImageFetcher = null;
}
@Override
protected void onResume() {
super.onResume();
mImageFetcher.setExitTasksEarly(false);
if (count > 1) {
startTask();
}
}
/**
* ViewPager的适配器
*
* @author Zhoujun
*
*/
private class MyPagerAdapter extends PagerAdapter {
private ArrayList<View> views;
public MyPagerAdapter(ArrayList<View> views) {
this.views = views;
}
@Override
public int getCount() {
if (count == 1) {
return 1;
}
return Integer.MAX_VALUE;// 是否循环滚动
}
public void setData(ArrayList<View> views) {
this.views = views;
}
private void clear() {
if (views != null)
views.clear();
this.notifyDataSetChanged();
}
@Override
public boolean isViewFromObject(View view, Object obj) {
// return arg0 == arg1;
if (view instanceof OutlineContainer) {
return ((OutlineContainer) view).getChildAt(0) == obj;
} else {
return view == obj;
}
}
@Override
public void destroyItem(View container, int position, Object object) {
// ((ViewPager) container).removeView(views.get(position));
((ViewPager) container).removeView(eventViewPager.findViewFromObject(position));
}
@Override
public Object instantiateItem(View container, int position) {
try {
((ViewPager) container).addView(views.get(position % views.size()), 0);
} catch (Exception e) {
}
return views.get(position % views.size());
}
}
}