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(); } }