package com.partynetwork.iparty.ishare;
import java.util.ArrayList;
import java.util.List;
import uk.co.senab.photoview.PhotoView;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.Color;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.os.Parcelable;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.view.ViewGroup.LayoutParams;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.SlidingDrawer;
import android.widget.SlidingDrawer.OnDrawerCloseListener;
import android.widget.SlidingDrawer.OnDrawerOpenListener;
import android.widget.SlidingDrawer.OnDrawerScrollListener;
import android.widget.TextView;
import com.partynetwork.dataprovider.DataProvider.IJsonResultListener;
import com.partynetwork.dataprovider.json.NetworkEntity;
import com.partynetwork.dataprovider.json.struct.Albums_getPhotoInfoRequest;
import com.partynetwork.dataprovider.json.struct.Albums_getPhotoInfoResponse;
import com.partynetwork.dataprovider.json.struct.Comment_getCommentRequest;
import com.partynetwork.dataprovider.json.struct.Comment_getCommentResponse;
import com.partynetwork.dataprovider.json.struct.Comment_setCommentRequest;
import com.partynetwork.dataprovider.json.struct.Comment_setCommentResponse;
import com.partynetwork.dataprovider.json.struct.Public_setPraiseRequest;
import com.partynetwork.iparty.R;
import com.partynetwork.iparty.app.AppContext;
import com.partynetwork.iparty.app.common.BitmapManager;
import com.partynetwork.iparty.info.AlbumPhotoInfo;
import com.partynetwork.iparty.info.CommentInfo;
import com.partynetwork.iparty.info.PhotoInfo;
import com.partynetwork.myview.myimageview.CircularImage;
import com.partynetwork.myview.myimageview.ZoomImageView;
import com.baidu.mobstat.StatService;
import com.lidroid.xutils.BitmapUtils;
import com.lidroid.xutils.ViewUtils;
import com.lidroid.xutils.bitmap.BitmapDisplayConfig;
import com.lidroid.xutils.bitmap.callback.BitmapLoadCallBack;
import com.lidroid.xutils.bitmap.callback.BitmapLoadFrom;
import com.lidroid.xutils.util.LogUtils;
import com.lidroid.xutils.view.annotation.ViewInject;
import com.lidroid.xutils.view.annotation.event.OnClick;
/**
*
* com.dongcemedia.iparty.ichoose.IchooseImageDetailsActivity
*
* @author 沈跃双 Create at 2013-11-26 下午4:01:52
*/
public class ImageDetailsActivity extends Activity implements
OnPageChangeListener, IJsonResultListener, OnDrawerCloseListener,
OnDrawerOpenListener, OnDrawerScrollListener {
public static final String IMAGE_ARRAY = "imageArray";
public static final String IMAGE_POSITION = "imagePosition";
/**
* 用于管理图片的滑动
*/
@ViewInject(R.id.view_pager)
private ViewPager viewPager;
/**
* 显示当前图片的页数文本
*/
@ViewInject(R.id.page_tv)
private TextView pagePosition;
/**
* 返回按钮
*/
@ViewInject(R.id.back_iv)
private ImageView backBtn;
/**
* 赞的数量
*/
@ViewInject(R.id.praise_tv_out)
private TextView praiseTvOut;
/**
* 赞的数量
*/
@ViewInject(R.id.praise_tv_in)
private TextView praiseTvIn;
/**
* 评论的数量
*/
@ViewInject(R.id.discuss_tv_out)
private TextView discussTvOut;
/**
* 评论的数量
*/
@ViewInject(R.id.discuss_tv_in)
private TextView discussTvIn;
/**
* 评论框
*/
@ViewInject(R.id.ishare_info_discuss_et)
private EditText et_discuss;
/**
* 发表评论按钮
*/
@ViewInject(R.id.ishare_info_discuss_btn)
private Button btn_discuss;
/**
* 评论列表
*/
@ViewInject(R.id.ishare_info_discuss_ll)
private LinearLayout ll_content;
/**
* 用户姓名
*/
@ViewInject(R.id.name)
private TextView name;
/**
* 用户头像
*/
@ViewInject(R.id.head)
private CircularImage head;
/**
* 抽屉
*/
@ViewInject(R.id.slidingdrawer)
private SlidingDrawer slidingDrawer;
/**
* 抽屉的把手布局
*/
@ViewInject(R.id.handle_content)
private LinearLayout handleContent;
/**
* 当前ishare的所有图片数组
*/
private static PhotoInfo[] photoArray;
/**
* 当前图片数组的长度
*/
private static int photoArrayLength;
/**
* 当前显示第几张图片
*/
private int photoPosition;
/**
* 用来存放所有显示图片的list
*/
private List<View> imageList = new ArrayList<View>();
/**
* 当前的图片数据对象
*/
private AlbumPhotoInfo info;
/** 这里使用单独的图片加载对象 */
private BitmapUtils bitmapUtils;
/** 当前图片的Id */
private int photoId;
AppContext context;
private BitmapManager bitmapManager;
/**
*
* 覆盖方法
*
* @see android.app.Activity#onCreate(android.os.Bundle)
*/
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 设置窗体无标题 全屏
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_image_details);
ViewUtils.inject(this);
context = (AppContext) getApplication();
init();
}
/**
* 初始化数据
*/
private void init() {
bitmapManager = new BitmapManager();
info = new AlbumPhotoInfo();
bitmapUtils = new BitmapUtils(this);
slidingDrawer.setOnDrawerScrollListener(this);
slidingDrawer.setOnDrawerCloseListener(this);
slidingDrawer.setOnDrawerOpenListener(this);
Intent intent = getIntent();
// 获取图片数组
Parcelable[] array = intent.getParcelableArrayExtra(IMAGE_ARRAY);
photoArrayLength = array.length;
photoArray = new PhotoInfo[photoArrayLength];
for (int i = 0; i < photoArrayLength; i++) {
photoArray[i] = (PhotoInfo) array[i];
}
photoPosition = intent.getIntExtra(IMAGE_POSITION, 0);
// 初始化imageList
initData();
ViewPagerAdapter adapter = new ViewPagerAdapter(imageList,
bitmapManager);
viewPager.setAdapter(new SamplePagerAdapter(bitmapManager));
viewPager.setCurrentItem(photoPosition);
viewPager.setOnPageChangeListener(this);
viewPager.setEnabled(false);
// 设定当前的页数和总页数
onPageSelected(photoPosition);
}
/**
* 发送获取照片信息请求
*/
private void sendRequest(int position) {
photoId = photoArray[position].getPhotoId();
Albums_getPhotoInfoRequest infoRequest = new Albums_getPhotoInfoRequest();
infoRequest.setPhotoId(photoId);
infoRequest.setUserId(context.getLoginUid());
context.getmDataProvider().getJsonFromNetwork(infoRequest, this);
Comment_getCommentRequest commentRequest = new Comment_getCommentRequest();
commentRequest.setType(4);
commentRequest.setLastId(1000);
commentRequest.setContentId(photoId);
context.getmDataProvider().getJsonFromNetwork(commentRequest, this);
}
/**
* 初始化图片显示列表
*/
private void initData() {
// 请求成功的回调监听
BitmapLoadCallBack<ZoomImageView> callBack = new BitmapLoadCallBack<ZoomImageView>() {
@Override
public void onLoadCompleted(ZoomImageView container, String uri,
Bitmap bitmap, BitmapDisplayConfig config,
BitmapLoadFrom from) {
container.setImageBitmap(bitmap);
}
@Override
public void onLoadFailed(ZoomImageView container, String uri,
Drawable drawable) {
// TODO 自动生成的方法存根
}
};
// 把传递过来的图片数组添加到显示的list中
for (PhotoInfo photoInfo : photoArray) {
View view = LayoutInflater.from(ImageDetailsActivity.this).inflate(
R.layout.zoom_image_layout, null);
ZoomImageView zoomImageView = (ZoomImageView) view
.findViewById(R.id.zoom_image_view);
bitmapUtils.display(zoomImageView, photoInfo.getPhotoUrl(),
callBack);
imageList.add(view);
}
}
/**
* 按钮监听事件
*
* @param view
*/
@OnClick({ R.id.back_iv, R.id.content, R.id.praise_tv_out,
R.id.praise_tv_in, R.id.ishare_info_discuss_btn })
public void onClick(View view) {
switch (view.getId()) {
case R.id.back_iv:
// 返回按钮
finish();
break;
case R.id.content:
// 传递信息
break;
case R.id.praise_tv_out:
case R.id.praise_tv_in:
// 赞操作
setPraise();
break;
case R.id.ishare_info_discuss_btn:
// 评论
sendComment();
break;
default:
break;
}
}
/**
* 发送评论
*/
private void sendComment() {
String str = et_discuss.getText().toString();
if (str.equals("") || str.equals("")) {
return;
}
Comment_setCommentRequest request = new Comment_setCommentRequest();
request.setUserId(context.getLoginUid());
request.setType(4);
request.setContentId(photoId);
request.setCommentMessage(str);
context.getmDataProvider().getJsonFromNetwork(request, this);
}
/**
* 添加留言
*/
private void addComment(CommentInfo c) {
View view = LayoutInflater.from(this).inflate(
R.layout.ishare_info_item, null);
CircularImage image = (CircularImage) view.findViewById(R.id.iv_head);
bitmapManager.loadBitmap(c.getUserHeadUrl(), image);
TextView say = (TextView) view.findViewById(R.id.tv_say);
say.setText(c.getCommentMessage());
TextView time = (TextView) view.findViewById(R.id.tv_time);
time.setText(c.getCommentTime());
TextView name = (TextView) view.findViewById(R.id.tv_name);
name.setText(c.getUserName());
ll_content.addView(view, 0);
}
/**
* 赞操作
*/
private void setPraise() {
/********************************** 在这里发送赞的点击请求 */
Public_setPraiseRequest request = new Public_setPraiseRequest();
request.setType(3);
request.setId(photoId);
request.setUserId(context.getLoginUid());
context.getmDataProvider().getJsonFromNetwork(request, this);
}
public void onPageScrollStateChanged(int arg0) {
}
public void onPageScrolled(int arg0, float arg1, int arg2) {
}
/**
* 照片切换的选中效果 覆盖方法
*
* @see android.support.v4.view.ViewPager.OnPageChangeListener#onPageSelected(int)
*/
public void onPageSelected(int currentPage) {
// 每当页数发生改变时重新设定一遍当前的页数和总页数
pagePosition.setText("第" + (currentPage + 1) + "张(共" + photoArrayLength
+ "张)");
sendRequest(currentPage);
}
class SamplePagerAdapter extends PagerAdapter {
private BitmapManager bitmapManager;
public SamplePagerAdapter(BitmapManager bitmapManager) {
this.bitmapManager = bitmapManager;
}
@Override
public int getCount() {
return photoArrayLength;
}
@Override
public View instantiateItem(ViewGroup container, int position) {
PhotoView photoView = new PhotoView(container.getContext());
String url = photoArray[position].getPhotoUrl();
LogUtils.i("url:" + url);
bitmapManager.loadBitmap(url, photoView);
// Now just add PhotoView to ViewPager and return it
container.addView(photoView, LayoutParams.MATCH_PARENT,
LayoutParams.MATCH_PARENT);
return photoView;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((View) object);
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
}
}
/**
* ViewPager的适配器
*
* @author guolin
*/
class ViewPagerAdapter extends PagerAdapter {
private List<View> views;
private BitmapManager bitmapManager;
public ViewPagerAdapter(List<View> views, BitmapManager bitmapManager) {
this.views = views;
this.bitmapManager = bitmapManager;
}
@Override
public void finishUpdate(View arg0) {
}
@Override
public void restoreState(Parcelable arg0, ClassLoader arg1) {
}
@Override
public Parcelable saveState() {
return null;
}
@Override
public void startUpdate(View arg0) {
}
@Override
public void destroyItem(View view, int position, Object arg2) {
if (position >= views.size() - 1) {
position = position % views.size();
}
((ViewPager) view).removeView(views.get(position));
}
@Override
public Object instantiateItem(View view, int position) {
try {
((ViewPager) view).addView(views.get(position), 0);
} catch (Exception e) {
}
return views.get(position);
}
@Override
public View instantiateItem(ViewGroup container, int position) {
PhotoView photoView = new PhotoView(container.getContext());
bitmapManager.loadBitmap(photoArray[position].getPhotoUrl(),
photoView);
// Now just add PhotoView to ViewPager and return it
container.addView(photoView, LayoutParams.MATCH_PARENT,
LayoutParams.MATCH_PARENT);
return photoView;
}
@Override
public int getCount() {
return photoArrayLength;
}
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
return arg0 == arg1;
}
}
public void onNetworkRequest() {
// TODO 自动生成的方法存根
}
public void onResultSuccess(NetworkEntity entity) {
if (entity.getRequest().getAction()
.equals(new Albums_getPhotoInfoRequest().getAction())) {
Albums_getPhotoInfoResponse photoResponse = (Albums_getPhotoInfoResponse) entity
.getResponse();
info = photoResponse.getDetails();
initNumber();
} else if (entity.getRequest().getAction()
.equals(new Public_setPraiseRequest().getAction())) {
if (info.getIsPraise() == 0) {
info.setPhotoPraiseNumber(info.getPhotoPraiseNumber() + 1);
info.setIsPraise(1);
} else {
info.setPhotoPraiseNumber(info.getPhotoPraiseNumber() - 1);
info.setIsPraise(0);
}
initPraise();
} else if (entity.getRequest().getAction()
.equals(new Comment_setCommentRequest().getAction())) {
CommentInfo[] comments = ((Comment_setCommentResponse) entity
.getResponse()).getDetails();
if (comments != null) {
addComment(comments[0]);
et_discuss.setText("");
}
} else if (entity.getRequest().getAction()
.equals(new Comment_getCommentRequest().getAction())) {
ll_content.removeAllViews();
CommentInfo[] comments = ((Comment_getCommentResponse) entity
.getResponse()).getDetails();
for (int i = comments.length; i > 0; i--) {
addComment(comments[i - 1]);
}
}
}
public void onResultFail(String result) {
// TODO 自动生成的方法存根
}
/**
* 根据照片信息初始化数据
*
* @param info
*/
private void initNumber() {
// 处理赞操作
initPraise();
discussTvOut.setText(info.getPhotoMessageNumber() + "");
// 姓名
String name = info.getUserName();
if (name != null) {
this.name.setText(info.getUserName());
}
String headUrl = info.getUserHeadUrl();
if (headUrl != null) {
bitmapManager.loadBitmap(headUrl, head);
}
}
/**
* 初始化赞按钮
*/
private void initPraise() {
praiseTvOut.setText(info.getPhotoPraiseNumber() + "");
praiseTvIn.setText(info.getPhotoPraiseNumber() + "");
Drawable left = null;
if (info.getIsPraise() == 1) {
left = this.getResources().getDrawable(
R.drawable.image_details_praise_seleted);
left.setBounds(0, 0, left.getMinimumWidth(),
left.getMinimumHeight());
praiseTvOut.setCompoundDrawables(left, null, null, null);
praiseTvIn.setCompoundDrawables(left, null, null, null);
} else {
left = this.getResources().getDrawable(
R.drawable.image_details_praise_normal);
left.setBounds(0, 0, left.getMinimumWidth(),
left.getMinimumHeight());
praiseTvOut.setCompoundDrawables(left, null, null, null);
left = this.getResources().getDrawable(
R.drawable.image_details_praise_pressed);
left.setBounds(0, 0, left.getMinimumWidth(),
left.getMinimumHeight());
praiseTvIn.setCompoundDrawables(left, null, null, null);
}
}
@Override
public void onDrawerClosed() {
handleContent.setBackgroundResource(R.drawable.flip_menu_gradient_bg);
name.setTextColor(Color.WHITE);
}
@Override
public void onDrawerOpened() {
handleContent.setBackgroundColor(Color.WHITE);
name.setTextColor(Color.BLACK);
}
@Override
public void onScrollStarted() {
if (!slidingDrawer.isOpened()) {
handleContent.setBackgroundColor(Color.WHITE);
name.setTextColor(Color.BLACK);
}
}
@Override
public void onScrollEnded() {
if (!slidingDrawer.isOpened()) {
handleContent
.setBackgroundResource(R.drawable.flip_menu_gradient_bg);
name.setTextColor(Color.WHITE);
}
}
@Override
protected void onResume() {
StatService.onResume(this);
super.onResume();
}
@Override
protected void onPause() {
StatService.onPause(this);
super.onPause();
}
}