频道栏目
首页 > 资讯 > Android > 正文

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

16-07-11        来源:[db:作者]  
收藏   我要投稿

功能实现 :

 

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 自定义布局:

 

 




    


边框border drawable文件:

 

 




    

    

    



 

相关TAG标签
上一篇:Android中直播视频技术探究之---基础知识大纲介绍
下一篇:Android EventBus3.0使用及源码解析
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站