您的位置:首页 > 移动开发 > Android开发

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

2016-09-15 21:49 507 查看

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);
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐