Toast 自定义布局 完成图片上传提示

来源:互联网 发布:mac原型设计工具 编辑:程序博客网 时间:2024/05/13 15:06

功能实现 :



Activiyt :

package com.lvche.lvchedingdang.activity.api_calling;import android.app.Activity;import android.app.AlertDialog;import android.content.ContentValues;import android.content.DialogInterface;import android.content.Intent;import android.database.Cursor;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.net.Uri;import android.os.Bundle;import android.os.Environment;import android.provider.MediaStore;import android.view.Gravity;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.AdapterView;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.Toast;import com.lvche.lvcheappframelib.frame.common_utils.LogUtils;import com.lvche.lvcheappframelib.frame.common_utils.Utils;import com.lvche.lvchedingdang.R;import com.lvche.lvchedingdang.activity.BaseActivity;import com.lvche.lvchedingdang.activity.LBS.BaiduMapActivity;import com.lvche.lvchedingdang.activity.Msc.voicedemo.IatMscActivity;import com.lvche.lvchedingdang.activity.api_calling.adapter.APIGridAdapter;import com.lvche.lvchedingdang.activity.common_nav.fragment.view.MyGridView;import com.lvche.lvchedingdang.activity.contact.ContactMainActivity;import com.lvche.lvchedingdang.activity.record_vedio.com.sli.record.videomanager.VideoManager;import com.lvche.lvchedingdang.activity.shake.ShakeActivity;import com.lvche.lvchedingdang.activity.signal.yi_biao_pan.TestSpeedActivity;import com.lvche.lvchedingdang.views.custom_toast.MyToast;import com.zxing.MipcaActivityCapture;import java.io.File;/** * 手机API调用 */public class APICallingActivity extends BaseActivity implements PhotoShop{    private MyGridView gridview;    private final static int SCANNIN_GREQUEST_CODE = 1;    /** 使用照相机拍照获取图片 */    protected static final int SELECT_PIC_BY_TACK_PHOTO = 1;    /** 使用相册中的图片 */    protected static final int SELECT_PIC_BY_PICK_PHOTO = 2;    private Uri photoUri;    private String  picPath;    private boolean isCutPic;    private String PHONE_NUM = "13800138000";    /** 地图定位 */    private static final int REQUEST_CODE_MAP = 4;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_api_calling);        initGridView();    }    //初始化 gridview    void initGridView() {        gridview = (MyGridView)findViewById(R.id.gridview);        gridview.setAdapter(new APIGridAdapter(this));        gridview.setOnItemClickListener(new AdapterView.OnItemClickListener() {            @Override            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {                Intent intent = new Intent();                switch ((int) id) {                    case 0:                        /**图片上传等处理**/                        selectPhoto();                        break;                    case 1:                        /** *扫描二维码  */                        intent.setClass(APICallingActivity.this, MipcaActivityCapture.class);                        intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);                        startActivityForResult(intent, SCANNIN_GREQUEST_CODE);                        break;                    case 2:                        //拨打电话                        if (PHONE_NUM != null) {                            Intent it = new Intent();                            it.setAction(Intent.ACTION_CALL);                            it.setData(Uri.parse("tel:" + PHONE_NUM.trim()));                            startActivity(it);                        }                        break;                    case 3:                        //LBS                        //MyToast.show(getApplicationContext(),"LBS功能正在完善中。。。",Toast.LENGTH_SHORT);                        startActivityForResult(new Intent(APICallingActivity.this, BaiduMapActivity.class), REQUEST_CODE_MAP);                        break;                    case 4:                        //摇一摇                        ///MyToast.show(getApplicationContext(),"摇一摇功能正在完善中。。。",Toast.LENGTH_SHORT);                        startActivity(new Intent(APICallingActivity.this, ShakeActivity.class));                        break;                    case 5:                        //网络状态监测                        startActivity(new Intent(APICallingActivity.this, TestSpeedActivity.class));                        //MyToast.show(getApplicationContext(),"网络状态监测功能正在完善中。。。",Toast.LENGTH_SHORT);                        break;                    case 6:                        //语音输入                        //MyToast.show(getApplicationContext(),"语音输入功能正在完善中。。。",Toast.LENGTH_SHORT);                        startActivity(new Intent(APICallingActivity.this, IatMscActivity.class));                        break;                    case 7:                        //视频录制                        //MyToast.show(getApplicationContext(),"视频录制功能正在完善中。。。",Toast.LENGTH_SHORT);                        startActivity(new Intent(APICallingActivity.this, VideoManager.class));                        break;                    case 8:                        //通讯录读取                        //MyToast.show(getApplicationContext(),"通讯录读取功能正在完善中。。。",Toast.LENGTH_SHORT);                        startActivity(new Intent(APICallingActivity.this, ContactMainActivity.class));                        break;                }            }        });    }    /*扫描器接收结果*/   /* @Override    protected void onActivityResult(int requestCode, int resultCode, Intent data) {        super.onActivityResult(requestCode, resultCode, data);        switch (requestCode) {            case SCANNIN_GREQUEST_CODE:                if(resultCode == RESULT_OK){                    Bundle bundle = data.getExtras();                    //显示扫描到的内容                    //mTextView.setText(bundle.getString("result"));                    //显示                    //mImageView.setImageBitmap((Bitmap) data.getParcelableExtra("bitmap"));                    Toast.makeText(APICallingActivity.this,"扫描 :" + bundle.getString("result"),Toast.LENGTH_LONG).show();                }                break;        }    }*/    /**上传时,选择获取图片的方式     * */    public void selectPhoto() {        // 弹出对话框选择        String datas[] = { "拍照获取照片", "从相册中选择照片" };        AlertDialog.Builder dataDialogBuidler = new AlertDialog.Builder(this).setTitle("选择图片").setItems(datas, new DialogInterface.OnClickListener() {            public void onClick(DialogInterface dialog, int item) {                if (item == 0) { // 拍照获取照片                    // 开启相机                    takePhoto();                }                else {                    // 开启图册                    pickPhoto();                }                dialog.dismiss();            }        });        dataDialogBuidler.setNegativeButton("取消", new DialogInterface.OnClickListener() {            public void onClick(DialogInterface dialog, int arg1) {                dialog.dismiss();            }        });        AlertDialog dialog = dataDialogBuidler.create();        dialog.setCancelable(true);        dialog.show();    }    /**     * 拍照获取图片     */    public void takePhoto() {        // 执行拍照前,应该先判断SD卡是否存在        String SDState = Environment.getExternalStorageState();        if (SDState.equals(Environment.MEDIA_MOUNTED)) {            Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);// "android.media.action.IMAGE_CAPTURE"            /***             * 需要说明一下,以下操作使用照相机拍照,拍照后的图片会存放在相册中的 这里使用的这种方式有一个好处就是获取的图片是拍照后的原图             * 如果不实用ContentValues存放照片路径的话,拍照后获取的图片为缩略图不清晰             */            ContentValues values = new ContentValues();            photoUri = this.getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);            intent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, photoUri);            startActivityForResult(intent, SELECT_PIC_BY_TACK_PHOTO);        } else {            MyToast.show(getApplicationContext(), "内存卡不存在", Toast.LENGTH_SHORT);        }    }    /***     * 从相册中取图片     */    public void pickPhoto() {        Intent intent = new Intent();        intent.setType("image/*");        intent.setAction(Intent.ACTION_GET_CONTENT);        startActivityForResult(intent, SELECT_PIC_BY_PICK_PHOTO);    }    protected void onActivityResult(int requestCode, int resultCode, Intent data) {        try{            if (isCutPic) {                /**切图**/                cropPhoto(requestCode, resultCode, data);            } else if (requestCode == REQUEST_CODE_MAP) {                // 地图定位                locationResult(data);            }            else {                /**处理接收图片结果*/                doPhoto(requestCode, data);            }        } catch(Exception e) { }        super.onActivityResult(requestCode, resultCode, data);    }    /**切图**/    private void cropPhoto(int requestCode, int resultCode, Intent data) {        isCutPic = false;        if (resultCode == Activity.RESULT_OK) {            //剪切上传            if (requestCode == 3) {                Bundle extras = data.getExtras();                if (extras != null) {                    Bitmap bitmap = extras.getParcelable("data");                    showImage(bitmap);                }                //doPhoto(requestCode, data);            } else {                try {                    if (requestCode == SELECT_PIC_BY_PICK_PHOTO) {                        /** 使用相册中的图片 */                        photoUri = data.getData();                        String photoAbsolutURI = Utils.getImageAbsolutePath(this, photoUri);                        Uri uri = Uri.fromFile(new File(photoAbsolutURI));                        startPhotoZoom(uri);                    } else {                        /** 使用相机中的图片 */                        String[] pojo = {MediaStore.Images.Media.DATA};                        Cursor cursor = managedQuery(photoUri, pojo, null, null, null);                        if (cursor != null) {                            int columnIndex = cursor.getColumnIndexOrThrow(pojo[0]);                            cursor.moveToFirst();                            picPath = cursor.getString(columnIndex);                            //cursor.close();                        }                        if (picPath != null                                && (picPath.toLowerCase().endsWith(".png") || picPath.toLowerCase().endsWith(".png")                                || picPath.toLowerCase().endsWith(".jpg") || picPath.toLowerCase().endsWith(".jpg"))) {                            startPhotoZoom(Uri.fromFile(new File(picPath)));                        }                    }                } catch (Exception e) {                    MyToast.show(getApplicationContext(), "温馨提示:拾取照片失败,请重新选择!", Toast.LENGTH_SHORT);                }            }        }    }    /**地图定位*/    private void locationResult(Intent data) {        //纬度        double latitude = data.getDoubleExtra("latitude", 0);        //经度        double longitude = data.getDoubleExtra("longitude", 0);        String locationAddress = data.getStringExtra("address");        if (locationAddress != null && !locationAddress.equals("")) {            //toggleMore(more);            //sendLocationMsg(latitude, longitude, "", locationAddress);            MyToast.show(getApplicationContext(), "您当前的位置 :" + locationAddress + " 经纬度: " + longitude + "," + latitude + "(" + ")", Toast.LENGTH_LONG);        } else {            String st = getResources().getString(R.string.unable_to_get_loaction);            MyToast.show(this, st, Toast.LENGTH_SHORT);        }    }    /**     * 裁剪图片方法实现     *     * @param uri     */    public void startPhotoZoom(Uri uri ) { /* * 至于下面这个Intent的ACTION是怎么知道的,大家可以看下自己路径下的如下网页 * yourself_sdk_path/docs/reference/android/content/Intent.html * 直接在里面Ctrl+F搜:CROP ,之前没仔细看过,其实安卓系统早已经有自带图片裁剪功能, 是直接调本地库的 */        Intent intent = new Intent("com.android.camera.action.CROP");        intent.setDataAndType(uri, "image/*");        // 下面这个crop=true是设置在开启的Intent中设置显示的VIEW可裁剪        intent.putExtra("crop", "true");        // aspectX aspectY 是宽高的比例        intent.putExtra("aspectX", 1);        intent.putExtra("aspectY", 1);        // outputX outputY 是裁剪图片宽高        intent.putExtra("outputX", 150);        intent.putExtra("outputY", 150);        intent.putExtra("return-data", true);        //dat=file:///storage/emulated/0/DCIM/Camera/IMG_20151115_185459.jpg typ=image/jpeg        this.startActivityForResult(intent, 3);    }    /**     * 选择图片后,获取图片的路径     *     * @param requestCode     * @param data     */    public void doPhoto(int requestCode, Intent data) {        try {            if (requestCode == SELECT_PIC_BY_PICK_PHOTO) {                if (data == null) {                    MyToast.show(getApplicationContext(), "选择图片文件出错",                            Toast.LENGTH_SHORT);                    return;                }                photoUri = data.getData();                if (photoUri == null) {                    MyToast.show(getApplicationContext(), "选择图片文件出错",                            Toast.LENGTH_SHORT);                    return;                }                else                {                    /**从相册取图片,有些手机有异常情况,请注意* */                    LogUtils.i("上传回调结果onActivityResult URI:",photoUri.toString() );                    //        Bitmap bitmap = BitmapFactory.decodeFile(photoUri.toString());                    try {                        // 读取uri所在的图片                        //  Bitmap bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), photoUri);                        String photoAbsolutURI = Utils.getImageAbsolutePath(this, photoUri);                        final BitmapFactory.Options options  = new BitmapFactory.Options();                        options.inJustDecodeBounds = true;                        BitmapFactory.decodeFile(photoAbsolutURI,options);                        options.inSampleSize = Utils.calculateInSampleSize(options, 480, 800);                        options.inJustDecodeBounds = false;                        Bitmap bitmap = BitmapFactory.decodeFile(photoAbsolutURI,options);                        showImage(bitmap);                        return;                    }catch (Exception e){                        LogUtils.e("[Android]", e.getMessage());                        LogUtils.e("[Android]", "目录为:" + photoUri);                        return;                    }                }            }/* 拍照获取图片  进行处理 * */            String[] pojo = {MediaStore.Images.Media.DATA};            Cursor cursor = managedQuery(photoUri, pojo, null, null, null);            if (cursor != null) {                int columnIndex = cursor.getColumnIndexOrThrow(pojo[0]);                cursor.moveToFirst();                picPath = cursor.getString(columnIndex);                //cursor.close();            }            if (picPath != null                    && (picPath.toLowerCase().endsWith(".png") || picPath.toLowerCase().endsWith(".png")                    || picPath.toLowerCase().endsWith(".jpg") || picPath.toLowerCase().endsWith(".jpg"))) {                try {                    // 读取uri所在的图片                    //  Bitmap bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), photoUri);                    String photoAbsolutURI = picPath;                    final BitmapFactory.Options options  = new BitmapFactory.Options();                    options.inJustDecodeBounds = true;                    BitmapFactory.decodeFile(photoAbsolutURI,options);                    options.inSampleSize = Utils.calculateInSampleSize(options, 480, 800);                    options.inJustDecodeBounds = false;                    Bitmap bitmap = BitmapFactory.decodeFile(photoAbsolutURI,options);                    showImage(bitmap);                }catch (Exception e){                    LogUtils.e("[Android]", e.getMessage());                    LogUtils.e("[Android]", "目录为:" + photoUri);                }            } else {                MyToast.show(getApplicationContext(), "选择图片文件不正确",                        Toast.LENGTH_SHORT);            }        } catch (Exception e) {            MyToast.show(getApplicationContext(), "温馨提示:拾取照片失败,请重新选择!",Toast.LENGTH_SHORT);        }    }    public void showImage(Bitmap bitmap) {        if (bitmap == null) {            MyToast.show(getApplicationContext(),"图片似乎不正确~!!",Toast.LENGTH_SHORT);            return;        }        LayoutInflater inflater=getLayoutInflater();        //将布局文件转换成相应的View对象        View layout=inflater.inflate(R.layout.toast_upload_img,(ViewGroup)findViewById(R.id.toast_layout_root));        //从layout中按照id查找imageView对象        ImageView imageView = (ImageView)layout.findViewById(R.id.upload_img);        //设置ImageView的图片        imageView.setImageBitmap(bitmap);        int scaleHeight = bitmap.getHeight() * 200 / bitmap.getWidth();        imageView.setLayoutParams(new LinearLayout.LayoutParams(200,scaleHeight));        //实例化一个Toast对象        Toast toast=new Toast(getApplicationContext());        toast.setDuration(Toast.LENGTH_LONG);        toast.setGravity(Gravity.CENTER_VERTICAL, 0, 0);        toast.setView(layout);        toast.show();    }    public void toGoBack(View view) {        this.finish();    }}


toast操作部分 :

 public void showImage(Bitmap bitmap) {        if (bitmap == null) {            MyToast.show(getApplicationContext(),"图片似乎不正确~!!",Toast.LENGTH_SHORT);            return;        }        LayoutInflater inflater=getLayoutInflater();        //将布局文件转换成相应的View对象        View layout=inflater.inflate(R.layout.toast_upload_img,(ViewGroup)findViewById(R.id.toast_layout_root));        //从layout中按照id查找imageView对象        ImageView imageView = (ImageView)layout.findViewById(R.id.upload_img);        //设置ImageView的图片        imageView.setImageBitmap(bitmap);        int scaleHeight = bitmap.getHeight() * 200 / bitmap.getWidth();        imageView.setLayoutParams(new LinearLayout.LayoutParams(200,scaleHeight));        //实例化一个Toast对象        Toast toast=new Toast(getApplicationContext());        toast.setDuration(Toast.LENGTH_LONG);        toast.setGravity(Gravity.CENTER_VERTICAL, 0, 0);        toast.setView(layout);        toast.show();    }

toast 自定义布局:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"              android:orientation="vertical"              android:layout_width="match_parent"              android:gravity="center"              android:id="@+id/toast_layout_root"              android:layout_height="match_parent">    <ImageView        android:id="@+id/upload_img"        android:background="@drawable/toast_custom_border"        android:layout_width="wrap_content"        android:scaleType="fitXY"        android:src="@drawable/icon_nav_icons"        android:layout_height="wrap_content"/></LinearLayout>

边框border drawable文件:

<?xml version="1.0" encoding="UTF-8"?><shape xmlns:android="http://schemas.android.com/apk/res/android" >    <solid android:color="#ffffff" />    <stroke        android:width="1dp"        android:color="#AAA5A5" />    <padding        android:bottom="1dp"        android:left="1dp"        android:right="1dp"        android:top="1dp" /></shape>


0 0