android 点击切换头像图片
来源:互联网 发布:c 高级编程 第9版 编辑:程序博客网 时间:2024/06/05 14:57
使用avatarPick插件
显示选择图片dialog:
private void showDialog() {
if (photoChoose == null) {
photoChoose = PhotoChoose.build(mActivity,
new PhotoChoose.OnPhotoChooseListener() {
@Override public void cancel(PhotoChoose target) { target.dismiss(); } @Override public void camera(PhotoChoose target) { target.dismiss(); String status = Environment .getExternalStorageState(); if (status.equals(Environment.MEDIA_MOUNTED)) { try { localTempImageFileName = ""; localTempImageFileName = String .valueOf((new Date()).getTime()) + ".png"; File filePath = FILE_PIC_SCREENSHOT; if (!filePath.exists()) { filePath.mkdirs(); } Intent intent = new Intent( android.provider.MediaStore.ACTION_IMAGE_CAPTURE); File f = new File(filePath, localTempImageFileName); // localTempImgDir和localTempImageFileName是自己定义的名字 Uri u = Uri.fromFile(f); intent.putExtra( MediaStore.Images.Media.ORIENTATION, 0); intent.putExtra(MediaStore.EXTRA_OUTPUT, u); startActivityForResult(intent, FLAG_CHOOSE_PHONE); } catch (ActivityNotFoundException e) { // } } } @Override public void album(PhotoChoose target) { target.dismiss(); Intent intent = new Intent(); intent.setAction(Intent.ACTION_PICK); intent.setType("image/*"); startActivityForResult(intent, FLAG_CHOOSE_IMG); } });}photoChoose.show();
}
PhotoChoose类:
package com.marchsoft.organization.widget;
import android.app.Dialog;
import android.content.Context;
import android.os.Bundle;
import android.view.Gravity;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.view.WindowManager.LayoutParams;
import com.marchsoft.organization.R;
public class PhotoChoose extends Dialog implements OnClickListener {
private OnPhotoChooseListener mOnPhotoChooseListener;
public PhotoChoose(Context context) {
super(context);
}
public PhotoChoose(Context context, int theme) {
super(context, theme);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.dialog_photo_choose);
findViewById(R.id.btn_photo_choose_album).setOnClickListener(this);
findViewById(R.id.btn_photo_choose_camera).setOnClickListener(this);
findViewById(R.id.btn_photo_choose_cancel).setOnClickListener(this);
Window win = getWindow();
LayoutParams params = win.getAttributes();
params.gravity = Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM;
params.width = getLayoutInflater().getContext().getResources()
.getDisplayMetrics().widthPixels;
win.setAttributes(params);
setCanceledOnTouchOutside(true);// 设置点击Dialog外部任意区域关闭Dialog
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_photo_choose_album:
if (mOnPhotoChooseListener != null) {
mOnPhotoChooseListener.album(this);
}
break;
case R.id.btn_photo_choose_camera:
if (mOnPhotoChooseListener != null) {
mOnPhotoChooseListener.camera(this);
}
break;
case R.id.btn_photo_choose_cancel:
if (mOnPhotoChooseListener != null) {
mOnPhotoChooseListener.cancel(this);
}
break;
}
}
public void setOnPhotoChooseListener(
OnPhotoChooseListener onPhotoChooseListener) {
mOnPhotoChooseListener = onPhotoChooseListener;
}
public static interface OnPhotoChooseListener {
void camera(PhotoChoose target);
void album(PhotoChoose target); void cancel(PhotoChoose target);
}
public static PhotoChoose build(Context context,
OnPhotoChooseListener onPhotoChooseListener) {
PhotoChoose pc = new PhotoChoose(context, R.style.AlertDialog);
pc.setOnPhotoChooseListener(onPhotoChooseListener);
return pc;
}
}
onActivityResult:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode==LOGIN_REQUEST_CODE||Preferences.getRefreshing()){
setStatus();
Preferences.isRefreshing(false);
}
if (requestCode == FLAG_CHOOSE_IMG && resultCode == mActivity.RESULT_OK) { if (data != null) { Uri uri = data.getData(); if (!TextUtils.isEmpty(uri.getAuthority())) { Cursor cursor = mActivity.getContentResolver().query(uri, new String[]{MediaStore.Images.Media.DATA}, null, null, null); if (null == cursor) { ToastUtil.make(mActivity).show("没找到图片"); return; } cursor.moveToFirst(); String path = cursor.getString(cursor .getColumnIndex(MediaStore.Images.Media.DATA)); cursor.close(); Intent intent = new Intent(mActivity, CropImageActivity.class); intent.putExtra("path", path); intent.putExtra("rectRatioX", RATIOX); intent.putExtra("rectRatioY", RATIOY); intent.putExtra("name", "name"); startActivityForResult(intent, FLAG_MODIFY_FINISH); } else { Intent intent = new Intent(mActivity, CropImageActivity.class); intent.putExtra("path", uri.getPath()); intent.putExtra("rectRatioX", RATIOX); intent.putExtra("rectRatioY", RATIOY); startActivityForResult(intent, FLAG_MODIFY_FINISH); } }} else if (requestCode == FLAG_CHOOSE_PHONE && resultCode == mActivity.RESULT_OK) { File f = new File(FILE_PIC_SCREENSHOT, localTempImageFileName); Intent intent = new Intent(mActivity, CropImageActivity.class); intent.putExtra("path", f.getAbsolutePath()); intent.putExtra("rectRatioX", RATIOX); intent.putExtra("rectRatioY", RATIOY); startActivityForResult(intent, FLAG_MODIFY_FINISH);} else if (requestCode == FLAG_MODIFY_FINISH && resultCode == mActivity.RESULT_OK) { if (data != null) { final String path = data.getStringExtra("path"); mBitmap = BitmapFactory.decodeFile(path); ByteArrayOutputStream out = new ByteArrayOutputStream(); mBitmap.compress(Bitmap.CompressFormat.JPEG, 100, out); try { out.flush(); out.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } byte[] buffer = out.toByteArray(); byte[] encode = Base64.encode(buffer, Base64.DEFAULT); String photo = new String(encode); UploadPhotoToInternet(photo); }}
}
图片裁剪页面:
package com.gammainfo.avatarpick;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.Gravity;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup.LayoutParams;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;
/**
* 裁剪界面
*
*/
public class CropImageActivity extends Activity implements OnClickListener {
public static final String RECTRATIOX = “rectRatioX”;
public static final String RECTRATIOY = “rectRatioY”;
public static final String IMAGE_WIDTH = “imageWidth”;
private CropImageView mImageView;
private Bitmap mBitmap;
private CropImage mCrop;
private TextView mSave;
private TextView mCancel;
private ImageView rotateRight;
private String mPath = “CropImageActivity”;
private String TAG = “”;
public int screenWidth = 0;
public int screenHeight = 0;
private ProgressBar mProgressBar;
public static final int SHOW_PROGRESS = 2000;
public static final int REMOVE_PROGRESS = 2001;
private int mRectRatioX;//横坐标方框比例
private int mRectRatioY; //纵坐标方框比例
private int mImageWidth; //图片宽
private Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) { case SHOW_PROGRESS: mProgressBar.setVisibility(View.VISIBLE); break; case REMOVE_PROGRESS: mHandler.removeMessages(SHOW_PROGRESS); mProgressBar.setVisibility(View.INVISIBLE); break; } }
};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.gl_modify_avatar);
init();
}
@Override
protected void onStop() {
super.onStop();
if (mBitmap != null) {
mBitmap = null;
}
}
private void init() {
getWindowWH();
Intent intent = getIntent();
mRectRatioX = intent.getIntExtra(RECTRATIOX, 4);
mRectRatioY = intent.getIntExtra(RECTRATIOY, 4);
mImageWidth = intent.getIntExtra(IMAGE_WIDTH, 200);
mPath = intent.getStringExtra(“path”);
Log.i(TAG, “得到的图片的路径是 = ” + mPath);
mImageView = (CropImageView) findViewById(R.id.gl_modify_avatar_image);
mSave = (TextView) this.findViewById(R.id.gl_modify_avatar_save);
mCancel = (TextView) this.findViewById(R.id.gl_modify_avatar_cancel);
rotateRight = (ImageView) this .findViewById(R.id.gl_modify_avatar_rotate_right); mSave.setOnClickListener(this); mCancel.setOnClickListener(this); rotateRight.setOnClickListener(this); try { mBitmap = createBitmap(mPath, screenWidth, screenHeight); if (mBitmap == null) { Toast.makeText(CropImageActivity.this, "没有找到图片", Toast.LENGTH_SHORT).show(); finish(); } else { resetImageView(mBitmap); } } catch (Exception e) { Toast.makeText(CropImageActivity.this, "没有找到图片", Toast.LENGTH_SHORT).show(); finish(); } addProgressbar();
}
/**
* 获取屏幕的高和宽
*/
private void getWindowWH() {
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
screenWidth = dm.widthPixels;
screenHeight = dm.heightPixels;
}
private void resetImageView(Bitmap b) {
mImageView.clear();
mImageView.setImageBitmap(b);
mImageView.setImageBitmapResetBase(b, true);
mCrop = new CropImage(this, mImageView, mHandler, mRectRatioX, mRectRatioY, mImageWidth);
mCrop.crop(b);
}
public void onClick(View v) {
int id = v.getId();
if (id == R.id.gl_modify_avatar_cancel) {
// mCrop.cropCancel();
finish();
} else if (id == R.id.gl_modify_avatar_save) {
//String path = mCrop.saveToLocal(BitmapFactory.decodeFile(mPath));
String path = mCrop.saveToLocal(mCrop.cropAndSave(mPath));
Log.i(TAG, “截取后图片的路径是 = ” + path);
Intent intent = new Intent();
intent.putExtra(“path”, path);
setResult(RESULT_OK, intent);
finish();
} else if (id == R.id.gl_modify_avatar_rotate_right) {
mCrop.startRotate(90.f);
}
}
protected void addProgressbar() {
mProgressBar = new ProgressBar(this);
FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
params.gravity = Gravity.CENTER;
addContentView(mProgressBar, params);
mProgressBar.setVisibility(View.INVISIBLE);
}
public Bitmap createBitmap(String path, int w, int h) {
try {
BitmapFactory.Options opts = new BitmapFactory.Options();
opts.inJustDecodeBounds = true;
// 这里是整个方法的关键,inJustDecodeBounds设为true时将不为图片分配内存。
BitmapFactory.decodeFile(path, opts);
int srcWidth = opts.outWidth;// 获取图片的原始宽度
int srcHeight = opts.outHeight;// 获取图片原始高度
int destWidth = 0;
int destHeight = 0;
// 缩放的比例
double ratio = 0.0;
if (srcWidth < w || srcHeight < h) {
ratio = 0.0;
destWidth = srcWidth;
destHeight = srcHeight;
} else if (srcWidth > srcHeight) {// 按比例计算缩放后的图片大小,maxLength是长或宽允许的最大长度
ratio = (double) srcWidth / w;
destWidth = w;
destHeight = (int) (srcHeight / ratio);
} else {
ratio = (double) srcHeight / h;
destHeight = h;
destWidth = (int) (srcWidth / ratio);
}
BitmapFactory.Options newOpts = new BitmapFactory.Options();
// 缩放的比例,缩放是很难按准备的比例进行缩放的,目前我只发现只能通过inSampleSize来进行缩放,其值表明缩放的倍数,SDK中建议其值是2的指数值
newOpts.inSampleSize = (int) ratio + 1;
// inJustDecodeBounds设为false表示把图片读进内存中
newOpts.inJustDecodeBounds = false;
// 设置大小,这个一般是不准确的,是以inSampleSize的为准,但是如果不设置却不能缩放
newOpts.outHeight = destHeight;
newOpts.outWidth = destWidth;
// 获取缩放后图片
return BitmapFactory.decodeFile(path, newOpts);
} catch (Exception e) {
return null;
}
}
}
- android 点击切换头像图片
- Android CheckBox点击切换
- Android CheckBox 点击切换
- Android之头像图片变圆形
- Android ImageSwitcher 图片切换 按钮点击切换
- Android点击切换主题theme
- android 点击图片切换图片
- Android-用户头像图片选择的简单实现
- jQuery点击头像上传头像图片并预览图片
- 开发一款可以点击头像图片打电话的安卓软件
- android之点击事件ImageView切换
- Android Fragment之间的点击切换
- Android 图片实现按钮点击切换效果
- Android 图片实现按钮点击切换效果
- Android点击图片切换(用XML)
- android 适配器里面的按钮点击切换
- Android gridview 点击item切换图片
- Android 按钮点击切换颜色或者图片
- 动态规划常见题目汇总
- 1039. Course List for Student (25)
- Django环境搭建
- 控制div属性
- System.Data.Sqlite for winform
- android 点击切换头像图片
- iOS 自定义等高cell
- 递归将十进制转化为二进制
- IOS 设计模式 桥接模式(bridge)
- Add Digits | LeetCode 加数字
- 面试题-堆和栈
- ArcObjects c++ 获取栅格或矢量图层的范围
- Reverse Nodes in k-Group
- Android PullToRefreshScrollView、AutoHeightListView、AutoScrollViewPager的使用