package com.kaixin.android.activity; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Bundle; 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.AdapterView.OnItemSelectedListener; import android.widget.BaseAdapter; import android.widget.Button; import android.widget.Gallery; import android.widget.ImageButton; import android.widget.LinearLayout; import android.widget.RelativeLayout; import android.widget.TextView; import android.widget.Toast; import com.kaixin.android.KXActivity; import com.kaixin.android.R; import com.kaixin.android.anim.PhotoAnimations; import com.kaixin.android.common.Constants; import com.kaixin.android.result.PhotoResult; import com.kaixin.android.ui.base.PhotoGallery; import com.kaixin.android.ui.base.PhotoImageView; import com.kaixin.android.utils.PhotoUtil; import com.nostra13.universalimageloader.core.ImageLoader; import com.nostra13.universalimageloader.core.assist.FailReason; import com.nostra13.universalimageloader.core.listener.ImageLoadingListener; /** * 头像照片内容显示类 * * @author gyz * */ public class PhotoAvatarDetailActivity extends KXActivity { private RelativeLayout mTop; private Button mBack; private TextView mTitle; private TextView mTime; private LinearLayout mBottom; private ImageButton mSaveas; private ImageButton mPre; private ImageButton mNext; private ImageButton mComment; private PhotoGallery mGallery; private int mTotalCount;// 照片的总数量 private int mCurrentPosition; // 当前照片的编号 private PhotoResult mPhotoResult;// 照片数据 private Bitmap avatar_bitmap = null; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.photoavatardetail_activity); findViewById(); setListener(); init(); } private void findViewById() { mTop = (RelativeLayout) findViewById(R.id.photoavatardetail_top); mBack = (Button) findViewById(R.id.photoavatardetail_back); mTitle = (TextView) findViewById(R.id.photoavatardetail_title); mTime = (TextView) findViewById(R.id.photoavatardetail_time); mBottom = (LinearLayout) findViewById(R.id.photoavatardetail_bottom); mSaveas = (ImageButton) findViewById(R.id.photoavatardetail_saveas); mPre = (ImageButton) findViewById(R.id.photoavatardetail_pre); mNext = (ImageButton) findViewById(R.id.photoavatardetail_next); mComment = (ImageButton) findViewById(R.id.photoavatardetail_comment); mGallery = (PhotoGallery) findViewById(R.id.photoavatardetail_gallery); } private void setListener() { mBack.setOnClickListener(new OnClickListener() { public void onClick(View v) { // 关闭当前界面 finish(); } }); mSaveas.setOnClickListener(new OnClickListener() { public void onClick(View v) { // 获取照片位置 String avatar = mPhotoResult.getAvatar(); // -1代表为当前用户的头像 if (avatar == null) { avatar_bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.head); } else { // 根据编号获取头像 getAvatar(avatar); } // 保存该头像到本地SD卡 boolean result = PhotoUtil.saveToSDCard(avatar_bitmap); if (result) { Toast.makeText(PhotoAvatarDetailActivity.this, "已保存到/sdcard/KaiXin/download/下", Toast.LENGTH_SHORT) .show(); } else { Toast.makeText(PhotoAvatarDetailActivity.this, "保存失败,请检查SD卡是否存在", Toast.LENGTH_SHORT).show(); } } }); mPre.setOnClickListener(new OnClickListener() { public void onClick(View v) { // 显示上一张图片并修改显示内容 mCurrentPosition--; mGallery.setSelection(mCurrentPosition); changeContent(); } }); mNext.setOnClickListener(new OnClickListener() { public void onClick(View v) { // 显示下一张图片并修改显示内容 mCurrentPosition++; mGallery.setSelection(mCurrentPosition); changeContent(); } }); mComment.setOnClickListener(new OnClickListener() { public void onClick(View v) { // 传递图片信息到照片评论界面 Intent intent = new Intent(); intent.setClass(PhotoAvatarDetailActivity.this, PhotoCommentDetailActivity.class); intent.putExtra("result", mPhotoResult.getImages().get(mCurrentPosition)); startActivity(intent); } }); mGallery.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView<?> parent, View view, int position, long id) { // 显示/隐藏顶部和底部栏 if (mTop.isShown() && mBottom.isShown()) { PhotoAnimations.startOutAnimation(mTop, mBottom, mTime); } else { PhotoAnimations.startInAnimation(mTop, mBottom, mTime); } } }); mGallery.setOnItemSelectedListener(new OnItemSelectedListener() { public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { // 滑动时修改内容 mCurrentPosition = position; changeContent(); } public void onNothingSelected(AdapterView<?> parent) { } }); } public void getAvatar(String avatar) { ImageLoader.getInstance().loadImage(Constants.getImageUrl() + avatar, new ImageLoadingListener() { @Override public void onLoadingStarted(String arg0, View arg1) { // TODO Auto-generated method stub } @Override public void onLoadingFailed(String arg0, View arg1, FailReason arg2) { } @Override public void onLoadingComplete(String arg0, View arg1, Bitmap arg2) { avatar_bitmap = arg2; } @Override public void onLoadingCancelled(String arg0, View arg1) { // TODO Auto-generated method stub } }); } private void init() { // 获取照片数据 mPhotoResult = getIntent().getParcelableExtra("result"); // 获取当前的图片编号 mCurrentPosition = getIntent().getIntExtra("position", 0); // 获取图片的总数量 mTotalCount = mPhotoResult.getImages().size(); // 修改显示的内容 changeContent(); // 添加适配器 mGallery.setAdapter(new PhotoGalleryAdapter()); // 显示当前编号的图片 mGallery.setSelection(mCurrentPosition); } /** * 修改显示内容 */ private void changeContent() { mTitle.setText(mCurrentPosition + 1 + "/" + mTotalCount); mTime.setText(mPhotoResult.getImages().get(mCurrentPosition).getTime()); if (mCurrentPosition + 1 == 1) { mPre.setImageResource(R.drawable.photoview_pre_disable); mPre.setEnabled(false); } else { mPre.setImageResource(R.drawable.photoview_pre_button); mPre.setEnabled(true); } if (mCurrentPosition + 1 == mTotalCount) { mNext.setImageResource(R.drawable.photoview_next_disable); mNext.setEnabled(false); } else { mNext.setImageResource(R.drawable.photoview_next_button); mNext.setEnabled(true); } } private class PhotoGalleryAdapter extends BaseAdapter { public int getCount() { return mPhotoResult.getImages().size(); } public Object getItem(int position) { return mPhotoResult.getImages().get(position); } public long getItemId(int position) { return position; } public View getView(int position, View convertView, ViewGroup parent) { PhotoImageView view = null; if (convertView == null) { view = new PhotoImageView(PhotoAvatarDetailActivity.this); view.setLayoutParams(new Gallery.LayoutParams(mScreenWidth, mScreenHeight)); } else { view = (PhotoImageView) convertView; } // 获取头像编号 String avatar = mPhotoResult.getAvatar(); // -1代表当前用户的头像,其他根据编号获取头像 if (avatar == null) { avatar_bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.head); } else { getAvatar(avatar); } // 获取缩放比例 float scale = getScale(avatar_bitmap); // 获取缩放后的宽度和高度 int bitmapWidth = (int) (avatar_bitmap.getWidth() * scale); int bitmapHeight = (int) (avatar_bitmap.getHeight() * scale); // 创建缩放图片 Bitmap zoomBitmap = Bitmap.createScaledBitmap(avatar_bitmap, bitmapWidth, bitmapHeight, true); // 显示图片 view.setImageWidth(bitmapWidth); view.setImageHeight(bitmapHeight); view.setImageBitmap(zoomBitmap); return view; } } /** * 获取缩放比例 * * @param bitmap * 需要缩放的图片 * @return 缩放比例 */ private float getScale(Bitmap bitmap) { float scaleWidth = mScreenWidth / (float) bitmap.getWidth(); float scaleHeight = mScreenHeight / (float) bitmap.getHeight(); return Math.min(scaleWidth, scaleHeight); } }