android通过点击ImageView弹出上下文菜单,然后通过访问系统的相册和相机,更换ImageView图片

android通过点击ImageView弹出上下文菜单,然后通过访问系统的相册和相机,更换ImageView图片


布局:
     <RelativeLayout
         android:id="@+id/baseinfo_content_view"
         android:layout_width="match_parent"
         android:layout_height="match_parent" >
        <RelativeLayout 
            android:id="@+id/rv_img_photo"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" 
            android:layout_alignParentRight="true"
            android:layout_alignParentTop="true"
            android:layout_marginLeft="10dp"
            android:layout_marginTop="10dp"
            android:orientation="vertical">
           <ImageView
             android:id="@+id/img_photo"
             android:layout_width="130dp"
             android:layout_height="130dp"
             android:contentDescription="@string/app_name"
             android:src="@drawable/my"/>
            <TextView
             android:id="@+id/tv_set_img"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:layout_marginRight="40dp"
             android:layout_below="@+id/img_photo"
             android:text="@string/baseinfo_set_img"
             android:textStyle="bold"
             android:textColor="@color/bluedeep" 
             android:layout_centerHorizontal="true"/>
        </RelativeLayout>


Activity:
package com.myresume.cn.activity;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import com.myresume.cn.R;
import com.myresume.cn.util.BitmapUtils;
import android.app.Activity;
import android.content.ContentResolver;
import android.content.Intent;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.view.ContextMenu;
import android.view.MenuItem;
import android.view.View;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.View.OnClickListener;
import android.widget.ImageView;
import android.widget.TextView;


public class BaseinfoLayoutActivity extends Activity implements OnClickListener{
private static final int IMAGE_MENU1 = 0;
private static final int IMAGE_MENU2 = 1;
private static final int REQUEST_CODE_PICK_IMAGE = 2;
private static final int CAMERA_WITH_DATA = 3;
//返回的imageview
private ImageView imageview;
//形象图像View
private ImageView imgPhoto;
private TextView tvSetImg;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_baseinfo_layout);
//返回的ImageView
imageview=(ImageView) findViewById(R.id.img_slide);
imageview.setOnClickListener(this);

//形象图像
imgPhoto=(ImageView) findViewById(R.id.img_photo);
tvSetImg=(TextView) findViewById(R.id.tv_set_img);
//注册上下文菜单
this.registerForContextMenu(imgPhoto);
this.registerForContextMenu(tvSetImg);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.img_slide:
finish();
break;
}
}


@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
menu.add(0, IMAGE_MENU1, 0, "从手机相册选择");
menu.add(0, IMAGE_MENU2, 0, "相机拍照");
//设置上下文菜单的标题,图标
menu.setHeaderIcon(R.drawable.menu);
menu.setHeaderTitle("头像设置");
}

@Override
public boolean onContextItemSelected(MenuItem item) {
switch (item.getItemId()) {
case IMAGE_MENU1:
item.setCheckable(true);
//打开系统相册
Intent intent=new Intent(Intent.ACTION_PICK);
intent.setType("image/*");//相片类型
   startActivityForResult(intent, REQUEST_CODE_PICK_IMAGE);
break;


case IMAGE_MENU2:
item.setCheckable(true);
//打开系统照相机
Intent intent2=new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent2, CAMERA_WITH_DATA);
break;
}
return true;
}


//此方法是返回的图片资源
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
ContentResolver resolver=getContentResolver();

if(requestCode == REQUEST_CODE_PICK_IMAGE){//从相册返回的图片资源
Uri uri = data.getData();


try {
//将图片内容解析成字节数组
byte[] result=readStream(resolver.openInputStream(Uri.parse(uri.toString())));
Bitmap bitmap = BitmapUtils.loadBitmap(result, 130, 130);
imgPhoto.setImageBitmap(bitmap);
//将bitmap保存到sd卡里,下次启动程序从sd卡里面加载图片资源

} catch (Exception e) {
e.printStackTrace();
}
}else if (requestCode ==CAMERA_WITH_DATA) {//从照相机拍照返回的图片资源
//将图片内容解析成字节数组
try {
Bitmap photo = data.getParcelableExtra("data");
Uri uri=Uri.parse(MediaStore.Images.Media.insertImage(getContentResolver(), photo, null, null));
byte[] result=readStream(resolver.openInputStream(Uri.parse(uri.toString())));
Bitmap bitmap = BitmapUtils.loadBitmap(result, 130, 130);
imgPhoto.setImageBitmap(bitmap);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

}


public static byte[] readStream(InputStream inStream) throws Exception { 
        byte[] buffer = new byte[1024]; 
        int len = -1; 
        ByteArrayOutputStream outStream = new ByteArrayOutputStream(); 
        while ((len = inStream.read(buffer)) != -1) { 
                 outStream.write(buffer, 0, len); 
        } 
        byte[] data = outStream.toByteArray(); 
        outStream.close(); 
        inStream.close(); 
        return data; 


   } 


}





/**
 * 图片操作的工具类
 */
public class BitmapUtils {
/**
* 压缩图片
* @param bytes 数据源
* @param width 图片的目标宽度
* @param height  图片的目标高度
* @return bitmap对象
*/
public static Bitmap loadBitmap(byte[] bytes, int width, int height){
Options opts=new Options();
opts.inJustDecodeBounds=true;
BitmapFactory.decodeByteArray(bytes, 0, bytes.length, opts);
int w=opts.outWidth/width;
int h=opts.outHeight/height;
int scale=w>h ? w : h;
opts.inSampleSize=scale;
opts.inJustDecodeBounds=false;
return BitmapFactory.decodeByteArray(bytes, 0, bytes.length, opts);
}
}

猜你喜欢

转载自blog.csdn.net/qq_33897656/article/details/52551178