package com.kaixin.android.activity; import java.io.Serializable; import java.util.ArrayList; import java.util.List; import android.annotation.SuppressLint; import android.content.Intent; import android.graphics.Bitmap; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentStatePagerAdapter; import android.util.DisplayMetrics; import android.util.TypedValue; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.BaseAdapter; import android.widget.Button; import android.widget.FrameLayout.LayoutParams; import android.widget.GridView; import android.widget.ImageButton; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.ProgressBar; import android.widget.RelativeLayout; import android.widget.TextView; import android.widget.Toast; import com.kaixin.android.KXApplication; import com.kaixin.android.R; import com.kaixin.android.anim.PhotoAnimations; import com.kaixin.android.common.Constants; import com.kaixin.android.result.AlbumResult; import com.kaixin.android.result.PhotoDetailResult; import com.kaixin.android.utils.ActivityForResultUtil; import com.kaixin.android.utils.CallService; import com.kaixin.android.utils.PhotoUtil; import com.kaixin.android.view.HackyViewPager; import com.kaixin.android.view.PhotoViewAttacher; import com.kaixin.android.view.PhotoViewAttacher.OnPhotoTapListener; import com.nostra13.universalimageloader.core.ImageLoader; import com.nostra13.universalimageloader.core.assist.FailReason; import com.nostra13.universalimageloader.core.listener.SimpleImageLoadingListener; /** * 普通照片显示类 * * @author gyz * */ @SuppressLint({ "ValidFragment", "NewApi" }) public class PhotoPictureDetailActivity extends FragmentActivity { private LinearLayout mTopParent; private static LinearLayout mTop; private Button mBack; private TextView mTitle; private ImageView mArrow; private Button mToPeople; private Button mToGallery; private TextView mDescription; private LinearLayout mMore; private TextView mMoreTitle; private GridView mMoreDisplay; private static RelativeLayout mBottom; private ImageButton mSaveas; private Button mComment; private ImageButton mLike; private HackyViewPager mPager; private String mUid;// 照片所属用户的ID private String mName;// 照片所属用户的姓名 private int mAvatar;// 照片所属用户的头像 private int mTotalCount;// 照片总数量 private int mCurrentPosition;// 照片当前的编号 private List<PhotoDetailResult> mPhotoResult; // 照片数据 private boolean mMoreIsShowing;// 是否显示更多相册 private boolean mIsLike;// 是否赞过 private List<AlbumResult> mMorePhotoResults = new ArrayList<AlbumResult>();// 更多相册的显示数据 private int mAlbumId; private int mScreenWidth; private int mScreenHeight; private static final String STATE_POSITION = "STATE_POSITION"; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.photopicturedetail_activity); findViewById(); setListener(); init(); if (savedInstanceState != null) { mCurrentPosition = savedInstanceState.getInt(STATE_POSITION); } mPager.setCurrentItem(mCurrentPosition); } private void findViewById() { mTopParent = (LinearLayout) findViewById(R.id.photopicturedetail_top_parent); mTop = (LinearLayout) findViewById(R.id.photopicturedetail_top); mBack = (Button) findViewById(R.id.photopicturedetail_back); mTitle = (TextView) findViewById(R.id.photopicturedetail_title); mArrow = (ImageView) findViewById(R.id.photopicturedetail_arrow); mToPeople = (Button) findViewById(R.id.photopicturedetail_topeople); mToGallery = (Button) findViewById(R.id.photopicturedetail_togallery); mDescription = (TextView) findViewById(R.id.photopicturedetail_description); mMore = (LinearLayout) findViewById(R.id.photopicturedetail_more); mMoreTitle = (TextView) findViewById(R.id.photopicturedetail_more_title); mMoreDisplay = (GridView) findViewById(R.id.photopicturedetail_more_display); mBottom = (RelativeLayout) findViewById(R.id.photopicturedetail_bottom); mSaveas = (ImageButton) findViewById(R.id.photopicturedetail_saveas); mComment = (Button) findViewById(R.id.photopicturedetail_comment); mLike = (ImageButton) findViewById(R.id.photopicturedetail_like); mPager = (HackyViewPager) findViewById(R.id.photopicturedetail_gallery); } private void setListener() { mBack.setOnClickListener(new OnClickListener() { public void onClick(View v) { // 判断是否显示更多相册,如果显示则隐藏,否则关闭当前界面 if (mMoreIsShowing) { mMoreIsShowing = false; PhotoAnimations.startCloseAnimation(mTopParent, mMore, mDescription, mArrow); } else { finish(); } } }); mTitle.setOnClickListener(new OnClickListener() { public void onClick(View v) { // 判断更多相册是否显示,显示则隐藏,隐藏则显示 mMoreIsShowing = !mMoreIsShowing; if (mMoreIsShowing) { PhotoAnimations.startOpenAnimation(mTopParent, mMore, mDescription, mArrow); } else { PhotoAnimations.startCloseAnimation(mTopParent, mMore, mDescription, mArrow); } } }); mToPeople.setOnClickListener(new OnClickListener() { public void onClick(View v) { // 判断更多相册是否显示,显示则隐藏,否则跳转到该照片所属用户的资料界面 if (mMoreIsShowing) { mMoreIsShowing = false; PhotoAnimations.startCloseAnimation(mTopParent, mMore, mDescription, mArrow); } else { // 跳转到好友资料界面,并传递数据 Intent intent = new Intent(); intent.setClass(PhotoPictureDetailActivity.this, FriendInfoActivity.class); intent.putExtra("uid", mUid); intent.putExtra("name", mName); intent.putExtra("avatar", mAvatar); startActivity(intent); } } }); mToGallery.setOnClickListener(new OnClickListener() { public void onClick(View v) { // 判断更多相册是否显示,显示则隐藏,否则关闭当前界面 if (mMoreIsShowing) { mMoreIsShowing = false; PhotoAnimations.startCloseAnimation(mTopParent, mMore, mDescription, mArrow); } else { // 关闭当前界面 finish(); } } }); mSaveas.setOnClickListener(new OnClickListener() { public void onClick(View v) { // 获取当前照片的编号 // int image = mPhotoResult.get(mCurrentPosition) // .getImage(); // 获取当前照片 Bitmap bitmap = CallService.getPhoto(mAlbumId, mPhotoResult.get(mCurrentPosition).getPhoto_filename(), false, mUid); // 保存当前照片 boolean result = PhotoUtil.saveToSDCard(bitmap); if (result) { Toast.makeText(PhotoPictureDetailActivity.this, "已保存到/sdcard/KaiXin/download/下", Toast.LENGTH_SHORT) .show(); } else { Toast.makeText(PhotoPictureDetailActivity.this, "保存失败,请检查SD卡是否存在", Toast.LENGTH_SHORT).show(); } } }); mComment.setOnClickListener(new OnClickListener() { public void onClick(View v) { // 跳转到评论内容显示界面,并传递照片数据 Intent intent = new Intent(); intent.setClass(PhotoPictureDetailActivity.this, PhotoCommentDetailActivity.class); intent.putExtra("photoId", mPhotoResult.get(mCurrentPosition).getId()); intent.putExtra("result", (Serializable)mPhotoResult.get(mCurrentPosition)); // intent.putExtra("result", mMorePhotoResults.get(mCurrentPosition)); startActivityForResult(intent, ActivityForResultUtil.REQUESTCODE_COMMENT_COUNT); } }); mLike.setOnClickListener(new OnClickListener() { public void onClick(View v) { // 判断是否赞过,如果赞过提示信息,否则修改界面显示内容 if (!mIsLike) { mIsLike = true; mLike.setImageResource(R.drawable.photo_like_disabled); CallService.setPhotoLike(mPhotoResult.get(mCurrentPosition).getId()); mPhotoResult.get(mCurrentPosition).setLike_count(mPhotoResult.get(mCurrentPosition).getLike_count() + 1); Toast.makeText( PhotoPictureDetailActivity.this, "我和"+ mPhotoResult .get(mCurrentPosition).getLike_count() + "个人觉得挺赞的", Toast.LENGTH_SHORT).show(); handler.sendEmptyMessageDelayed(0, 500); } else { Toast.makeText(PhotoPictureDetailActivity.this, "您已经赞过了", Toast.LENGTH_SHORT).show(); } } }); /*mGallery.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView<?> parent, View view, int position, long id) { // 显示或隐藏标题栏和底部栏 if (mTop.isShown() && mBottom.isShown()) { PhotoAnimations.startGoneAnimation(mTop, mBottom); } else { PhotoAnimations.startVisibleAnimation(mTop, mBottom); } } }); mGallery.setOnItemSelectedListener(new OnItemSelectedListener() { public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { // 滑动时修改显示内容 mCurrentPosition = position; changeContent(); } public void onNothingSelected(AdapterView<?> parent) { } });*/ mMoreDisplay.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView<?> parent, View view, int position, long id) { // 跳转到照片列表显示界面,并传递信息 Intent intent = new Intent(); intent.setClass(PhotoPictureDetailActivity.this, PhotoListActivity.class); intent.putExtra("uid", mUid); intent.putExtra("name", mName); intent.putExtra("avatar", mAvatar); intent.putExtra("result", (Serializable)mMorePhotoResults); startActivity(intent); setResult(RESULT_OK); finish(); } }); } @SuppressWarnings("unchecked") private void init() { DisplayMetrics metric = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(metric); mScreenWidth = metric.widthPixels; mScreenHeight = metric.heightPixels; // 获取照片所属用户的ID、姓名、头像、照片数据、当前照片的编号 mUid = getIntent().getStringExtra("uid"); mAlbumId = getIntent().getIntExtra("albumid", -1); mName = getIntent().getStringExtra("name"); mAvatar = getIntent().getIntExtra("avatar", -1); mPhotoResult = (List<PhotoDetailResult>)getIntent().getSerializableExtra("result"); mCurrentPosition = getIntent().getIntExtra("position", 0); // 获得照片总数量 mTotalCount = mPhotoResult.size(); // 修改显示的内容 changeContent(); // 添加适配器 mPager.setAdapter(new ImagePagerAdapter(getSupportFragmentManager(), mPhotoResult)); // ID为空时代表当前用户,根据用户显示内容 if (mUid == null) { mMoreTitle.setText("我的其他照片专辑"); mMoreDisplay.setAdapter(new PhotoMoreAdapter(KXApplication.getInstance().mMyPhotoResults)); } else { mMoreTitle.setText(mName + "的其他照片专辑"); mMoreDisplay.setAdapter(new PhotoMoreAdapter(KXApplication.getInstance().mFriendPhotoResults.get(mUid))); } } /** * 修改显示内容 */ private void changeContent() { mTitle.setText(mCurrentPosition + 1 + "/" + mTotalCount); mDescription.setText(mPhotoResult.get(mCurrentPosition).getDescription()); mComment.setText(mPhotoResult.get(mCurrentPosition).getComment_count() + ""); } Handler handler = new Handler() { public void handleMessage(Message msg) { super.handleMessage(msg); mIsLike = false; mLike.setImageResource(R.drawable.photoview_like_button); if (mCurrentPosition + 1 >= mTotalCount) { mMoreIsShowing = true; PhotoAnimations.startOpenAnimation(mTopParent, mMore, mDescription, mArrow); } else { mPager.setCurrentItem(mCurrentPosition + 1); } } }; private class ImagePagerAdapter extends FragmentStatePagerAdapter { public List<PhotoDetailResult> fileList; public ImagePagerAdapter(android.support.v4.app.FragmentManager fm, List<PhotoDetailResult> fileList) { super(fm); this.fileList = fileList; } @Override public int getCount() { return fileList == null ? 0 : fileList.size(); } @Override public android.support.v4.app.Fragment getItem(int position) { String url = fileList.get(position).getPhoto_filename(); return ImageDetailFragment.newInstance(url); } } static class ImageDetailFragment extends Fragment { private String mImageUrl; private ImageView mImageView; private ProgressBar progressBar; private PhotoViewAttacher mAttacher; public static ImageDetailFragment newInstance(String imageUrl) { final ImageDetailFragment f = new ImageDetailFragment(); final Bundle args = new Bundle(); args.putString("url", imageUrl); f.setArguments(args); return f; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mImageUrl = getArguments() != null ? getArguments().getString("url") : null; } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { final View v = inflater.inflate(R.layout.image_detail_fragment, container, false); mImageView = (ImageView) v.findViewById(R.id.image); mAttacher = new PhotoViewAttacher(mImageView); mAttacher.setOnPhotoTapListener(new OnPhotoTapListener() { @Override public void onPhotoTap(View arg0, float arg1, float arg2) { // getActivity().finish(); if (mTop.isShown() && mBottom.isShown()) { PhotoAnimations.startGoneAnimation(mTop, mBottom); } else { PhotoAnimations.startVisibleAnimation(mTop, mBottom); } } }); progressBar = (ProgressBar) v.findViewById(R.id.loading); return v; } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); ImageLoader.getInstance().displayImage(Constants.getImageUrl() + mImageUrl, mImageView, new SimpleImageLoadingListener() { @Override public void onLoadingStarted(String imageUri, View view) { progressBar.setVisibility(View.VISIBLE); } @Override public void onLoadingFailed(String imageUri, View view, FailReason failReason) { String message = null; switch (failReason.getType()) { case IO_ERROR: message = "下载错误"; break; case DECODING_ERROR: message = "图片无法显示"; break; case NETWORK_DENIED: message = "网络有问题,无法下载"; break; case OUT_OF_MEMORY: message = "图片太大无法显示"; break; case UNKNOWN: message = "未知的错误"; break; } Toast.makeText(getActivity(), message, Toast.LENGTH_SHORT).show(); progressBar.setVisibility(View.GONE); } @Override public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) { progressBar.setVisibility(View.GONE); mAttacher.update(); } }); } } public void onBackPressed() { // 判断是更多相册是否显示,显示则隐藏,否则关闭当前界面 if (mMoreIsShowing) { mMoreIsShowing = false; PhotoAnimations.startCloseAnimation(mTopParent, mMore, mDescription, mArrow); } else { // 关闭当前界面 finish(); } } private class PhotoMoreAdapter extends BaseAdapter { public PhotoMoreAdapter(List<AlbumResult> results) { // 获取是不当前显示的相册 for (int i = 0; i < results.size(); i++) { if (results.get(i).getId() != mPhotoResult.get(0).getAlbum_id()) { mMorePhotoResults.add(results.get(i)); } } } public int getCount() { return mMorePhotoResults.size(); } public Object getItem(int position) { return mMorePhotoResults.get(position); } public long getItemId(int position) { return position; } @SuppressWarnings("unchecked") public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder = null; if (convertView == null) { convertView = LayoutInflater.from( PhotoPictureDetailActivity.this).inflate( R.layout.photopicturedetail_avtivity_item, null); holder = new ViewHolder(); holder.image = (ImageView) convertView .findViewById(R.id.photopicturedetail_item_img); // padding为40dip换算成px值 int padding = (int) TypedValue.applyDimension( TypedValue.COMPLEX_UNIT_DIP, 40, PhotoPictureDetailActivity.this.getResources() .getDisplayMetrics()); // 设置图片显示为屏幕大小的1/3 LayoutParams params = new LayoutParams( LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); params.width = (mScreenWidth - padding) / 3; params.height = (mScreenWidth - padding) / 3; holder.image.setLayoutParams(params); holder.title = (TextView) convertView .findViewById(R.id.photopicturedetail_item_title); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } AlbumResult result = mMorePhotoResults.get(position); ImageLoader.getInstance().displayImage(Constants.getImageUrl() + result.getImage(), holder.image); // holder.image.setImageBitmap(CallService.getPhoto(result.getId(), result.getImage(), false, mUid)); holder.title.setText(result.getName()); // 判断相册类型,根据类型获取图片,0为头像相册,1为其他相册 // holder.image.setImageBitmap(CallService.getPhoto(mAlbumId, result, false, mUid)); return convertView; } class ViewHolder { ImageView image; TextView title; } } @SuppressWarnings("unchecked") protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); switch (requestCode) { // 在评论回复上评论返回数据 case ActivityForResultUtil.REQUESTCODE_COMMENT_COUNT: if (resultCode == RESULT_OK) { // 添加回复的数据 Bundle bundle = data.getBundleExtra("result"); mComment.setText(bundle.getInt("count") + ""); } break; } } }