package com.ouwenjie.note.activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Bundle;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.view.KeyEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import com.ouwenjie.note.R;
import com.ouwenjie.note.model.BaseNote;
import com.ouwenjie.note.utils.ImageUtils;
import com.ouwenjie.note.utils.LogUtils;
import com.ouwenjie.note.utils.ScreenUtils;
import com.umeng.analytics.MobclickAgent;
import java.util.ArrayList;
import java.util.List;
/**
* 图片列表查看Activity
* Created by 文杰 on 2015/4/17.
*/
public class ImageViewPagerActivity extends AppCompatActivity implements View.OnClickListener {
private BaseNote note;
private ImageView backImg;
private TextView imgCountTv;
private ImageView removeImg;
private ViewPager viewPager;
private ImageAlbumAdapter imageAlbumAdapter;
private List<ImageView> imageViewList = new ArrayList<>();
private List<Uri> uriList = new ArrayList<>();
private int curPosition;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_image_list);
initWidget();
getUriList();
initImageViewList();
curPosition = getIntent().getIntExtra("ImageListPosition",0);
initViewPager();
}
private void initWidget() {
backImg = (ImageView) findViewById(R.id.nav_back_img);
imgCountTv = (TextView) findViewById(R.id.nav_count_tv);
removeImg = (ImageView) findViewById(R.id.nav_remove_img);
backImg.setOnClickListener(this);
removeImg.setOnClickListener(this);
viewPager = (ViewPager) findViewById(R.id.nav_image_viewpager);
}
@Override
protected void onResume() {
super.onResume();
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE);// 淡化status bar 和 navigation bar
MobclickAgent.onPageStart("ImageViewPagerActivity"); //统计页面(仅有Activity的应用中SDK自动调用,不需要单独写)
MobclickAgent.onResume(this);
}
@Override
protected void onPause() {
super.onPause();
MobclickAgent.onPageEnd("ImageViewPagerActivity"); // (仅有Activity的应用中SDK自动调用,不需要单独写)保证 onPageEnd 在onPause 之前调用,因为 onPause 中会保存信息
MobclickAgent.onPause(this);
}
private void initViewPager() {
imageAlbumAdapter = new ImageAlbumAdapter();
viewPager.setAdapter(imageAlbumAdapter);
viewPager.setCurrentItem(curPosition);
setImgCountTv(curPosition+1,imageViewList.size());
viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
curPosition = position;
setImgCountTv(position+1,imageViewList.size());
}
@Override
public void onPageSelected(int position) {
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
}
/**
* 从上一个Activity 的 Intent 中获取 UriString 的字符串
* 再拆分成每一个URI
*/
private void getUriList() {
String uriString = getIntent().getStringExtra("UriString");
String[] uris = uriString.split(" "); // 获取每一个URI 字符串
for(String s : uris){
Uri uri = Uri.parse(s);
uriList.add(uri); // 转化为 URI 添加到 uriList
}
}
/**
* 将当前的UriList 合成 URIString
*/
private String setUriString(List<Uri> uriList){
String uriString = "";
for(Uri uri : uriList){
if(uri==null||uri.toString().equals("")){
return "";
}
if(uriString.length() == 0){
uriString = uri.toString();
}else {
uriString = uriString + " " + uri.toString();
}
}
return uriString;
}
/**
* 根据每个图片的URI,初始化ImageView 列表
*/
private void initImageViewList(){
ImageView imageView;
for(int i=0; i<uriList.size(); i++) {
imageView = new ImageView(this);
imageView.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT));
imageView.setImageBitmap(getBigBitmapFromUri(uriList.get(i)));
imageViewList.add(imageView);
}
}
private Bitmap getBigBitmapFromUri(Uri uri){
String path = ImageUtils.getAbsoluteImagePath(this, uri); // 从uri 中拿到 Path
// Log.e("URI ==> PATH", path);
// Log.e("URI ==> ",uri.toString());
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeFile(path, options); // options中已经得到将要拿到的图片的尺寸
// Log.e("REAL width == height", options.outWidth + "==" + options.outHeight);
options.inSampleSize = options.outWidth / ScreenUtils.getScreenWidth(this);
int height = options.outHeight * ScreenUtils.getScreenWidth(this) / options.outWidth;
options.outWidth = ScreenUtils.getScreenWidth(this);
options.outHeight = height;
options.inJustDecodeBounds = false;
// Log.e("SET width == height", options.outWidth + "==" + options.outHeight);
options.inPurgeable = true;
options.inInputShareable = true;
return ImageUtils.getBitmapByPath(path, options); // 将想要获得的尺寸的bitmap 拿到
}
private void setImgCountTv(int currentItem,int totalItem){
imgCountTv.setText(currentItem + " / " + totalItem);
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.nav_back_img:
exitImageListActivity();
break;
case R.id.nav_remove_img:
imageViewList.remove(curPosition);
uriList.remove(curPosition);
initViewPager();
break;
default:
break;
}
}
private void exitImageListActivity() {
Intent intent = new Intent();
intent.putExtra("UriString", setUriString(uriList));
setResult(RESULT_OK, intent);
finish();
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
switch (keyCode){
case KeyEvent.KEYCODE_BACK:
exitImageListActivity();
}
return super.onKeyDown(keyCode, event);
}
/**
* 图片列表适配器
*/
public class ImageAlbumAdapter extends PagerAdapter{
@Override
public int getCount() {
return imageViewList.size();
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
LogUtils.e("destroyItem position = "+position);
LogUtils.e("destroyItem imageViewList = "+imageViewList.size());
container.removeView((View) object);
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
container.addView(imageViewList.get(position));
return imageViewList.get(position);
}
}
}