package tk.djcrazy.MyCC98;
import android.annotation.SuppressLint;
import android.annotation.TargetApi;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.os.Build;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;
import android.widget.ProgressBar;
import com.actionbarsherlock.app.ActionBar;
import com.google.inject.Inject;
import roboguice.inject.ContentView;
import roboguice.inject.InjectExtra;
import roboguice.inject.InjectView;
import roboguice.util.RoboAsyncTask;
import tk.djcrazy.MyCC98.util.Intents;
import tk.djcrazy.MyCC98.util.ToastUtils;
import tk.djcrazy.MyCC98.util.ViewUtils;
import tk.djcrazy.libCC98.NewCC98Service;
import tk.djcrazy.libCC98.util.RequestResultListener;
import uk.co.senab.photoview.PhotoViewAttacher;
import uk.co.senab.photoview.PhotoViewAttacher.OnViewTapListener;
@ContentView(R.layout.activity_photo_view)
public class
PhotoViewActivity extends BaseActivity implements RequestResultListener<Bitmap> {
@InjectExtra(value = Intents.EXTRA_DOWNLOAD_LINK, optional = true)
private String mPhotoUrl;
@InjectView(R.id.photo_load_progress)
private ProgressBar mProgressBar;
@InjectView(R.id.photo_view)
private ImageView mImageView;
@Inject
private NewCC98Service service;
public static Intent createIntent(String url) {
Log.i("PhotoViewActivity", "Load url:" + url);
Intent intent = new Intents.Builder("photo.VIEW").downloadLink(url).toIntent();
return intent;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
configureActionBar();
service.submitBitmapRequest(this.getClass(),mPhotoUrl, this);
}
private void configureActionBar() {
ActionBar actionBar = getSupportActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setLogo(new BitmapDrawable(getResources(), service.getCurrentUserAvatar()));
actionBar.setTitle("查看图片");
}
@Override
public boolean onOptionsItemSelected(
com.actionbarsherlock.view.MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
finish();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
@Override
public void onRequestComplete(Bitmap result) {
ViewUtils.setGone(mProgressBar, true);
if (Build.VERSION.SDK_INT >= 11) {
changeRenderTypeIfNessary(result);
}
mImageView.setImageBitmap(result);
ViewUtils.setGone(mImageView, false);
PhotoViewAttacher mAttacher = new PhotoViewAttacher(mImageView);
mAttacher.setMaxScale((float)Math.max(
Math.max(result.getHeight(), result.getWidth()) / 100,
mAttacher.getMidScale()*1.5));
mAttacher.setOnViewTapListener(new OnViewTapListener() {
@SuppressLint("NewApi")
@Override
public void onViewTap(View view, float x, float y) {
if (getActionBar().isShowing()) {
getActionBar().hide();
} else {
getActionBar().show();
}
}
});
getSupportActionBar().hide();
}
@Override
protected void onStop() {
super.onStop();
service.cancelRequest(this.getClass());
}
@Override
public void onRequestError(String msg) {
ToastUtils.alert(this, msg);
}
/**
* OpenGL max bitmap supoorts 2048*2048, see http://stackoverflow.com/questions/10271020/bitmap-too-large-to-be-uploaded-into-a-texture
*/
@TargetApi(11)
private void changeRenderTypeIfNessary(Bitmap t) {
if (t.getHeight() > 2048 || t.getWidth() > 2048) {
mImageView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
ToastUtils.info(PhotoViewActivity.this, "图片过大,关闭硬件加速");
}
}
}