Androidは画像を生成した後、ビューをローカルアルバムに保存します


パブリッククラスRecommendCodeActivityはBaseActivityを拡張します{
    private ImageView ivCode;
    文字列codeUrl = "";
    private int codeId = 0;
    プライベートTextView tvId、tvSave;
    プライベートLinearLayout llMain;
    プライベートTextView mTvRight;


    @Override
    protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_recommend_code);
        mLDialog.show();
        findViews();
        initData(savedInstanceState);
        sendRecommendCode();
        initViews(savedInstanceState);
    }


    @Override
    protected void findViews(){
        ivCode = findViewById(R.id.iv_code);
        tvId = findViewById(R.id.tv_id);
        llMain = findViewById(R.id.ll_main);
        tvSave = findViewById(R.id.tv_save);
    }

    @Overrideは
    ボイドinitViews(バンドルsavedInstanceState){保護
        tvSave.setOnClickListener(新しいView.OnClickListener(){
            @Override
            {公共ボイドのonClick(ビュービュー)

                tvSave.setClickable(false);

//関連する権限にストレージ権限を適用します

                {試みは、
                    IF(ActivityCompat.checkSelfPermission(RecommendCodeActivity.this、Manifest.permission.READ_EXTERNAL_STORAGE)
                            != PackageManager.PERMISSION_GRANTED
                            || ActivityCompat.checkSelfPermission(RecommendCodeActivity.this、Manifest.permission.WRITE_EXTERNAL_STORAGE)
                            != PackageManager.PERMISSION_GRANTED){
                        //が適用されます(またはそれ以上の)権限、およびコールバックにアクセスコード(ユーザー定義)を提供する
                        ActivityCompat.requestPermissions(RecommendCodeActivity.this、new String [] {Manifest.permission.READ_EXTERNAL_STORAGE、Manifest.permission.WRITE_EXTERNAL_STORAGE}、1);
                    }その他{
                        mLDialog.setDialogText( "画像を保存しています...");
                        mLDialog.show();
                        saveMyBitmap( "AuthCode"、createViewBitmap(llMain));
                    }
                } catch(Exception e){
                    e.printStackTrace();
                }
            }
        }) ;
    }

//許可アプリケーションのコールバック
    @Override
    public void onRequestPermissionsResult(int requestCode、
                                           String permissions []、int [] grantResults){
        switch(requestCode){
            case 1:{
                //リクエストがキャンセルされた場合、結果の配列は空です。
                if(grantResults.length> 0
                        && grantResults [0] == PackageManager.PERMISSION_GRANTED){
                    mLDialog.setDialogText( "正在保存图片...");
                    mLDialog.show();
                    {
                        saveMyBitmap( "AuthCode"、createViewBitmap(llMain));を試してください
                    } catch(例外e){
                        e.printStackTrace();
                    }
                } else {
                    tvSave.setClickable(true);
                    Toast.makeText(RecommendCodeActivity.this、 "先に読み取りと書き込みのアクセス許可を有効にしてください"、Toast.LENGTH_SHORT).show();
                }
                return;
            }
        }
    }

// IOストリームを使用して、ビットマップオブジェクトを指定したローカルフォルダーに保存します
    public void saveMyBitmap(文字列bitName決勝、決勝ビットマップビットマップ){
        新しい新しいThread(Runnableを新新(){
            @Override
            ます。public void RUN(){
                文字列filePathに= Environment.getExternalStorageDirectory()ある、getPath();.
                ファイルファイル=新しい新しいファイル(filePathに+「/ DCIM / Camera / "+ bitName +" .png ");
                試します{
                    file.createNewFile();


                    FileOutputStream fOut = null;
                    fOut = new FileOutputStream(file);
                    bitmap.compress(Bitmap.CompressFormat.PNG、100、fOut);


                    メッセージmsg = Message.obtain();
                    msg.obj = file.getPath();
                    handler.sendMessage(msg);
                    //Toast.makeText(PayCodeActivity.this、 "保存成功"、Toast.LENGTH_LONG).show();
                    fOut.flush();
                    fOut.close();
                } catch(IOException e){
                    e.printStackTrace();
                }
            }
        })。start();
    }


    ハンドラハンドラ=新しいハンドラ(){
        @Override
        公共ボイドのhandleMessage(メッセージmsg){
            super.handleMessage(MSG)。
            文字列picFile =(文字列)msg.obj;
            String [] split = picFile.split( "/");
            String fileName = split [split.length-1];
            {
                MediaStore.Images.Media.insertImage(getApplicationContext().
                        getContentResolver()、picFile、fileName、null);を試してください
            } catch(FileNotFoundException e){
                e.printStackTrace();
            }
            //最終通知通知図更新
            sendBroadcast(new Intent(
                    Intent.ACTION_MEDIA_SCANNER_SCAN_FILE、Uri.parse( "file://"
                    + picFile)));
            Toast.makeText(RecommendCodeActivity.this、 "图片保存图库成功"、Toast.LENGTH_LONG).show();
            if(mLDialog!= null && mLDialog.isShowing()){
                mLDialog.dismiss();
            }
            tvSave.setClickable(true);
        }
    };


//ビューを画像として保存して、ビットマップオブジェクトを生成します

    public Bitmap createViewBitmap(View v){
        Bitmap bitmap = Bitmap.createBitmap(v.getWidth()、v.getHeight()、
                Bitmap.Config.ARGB_8888);
        Canvas canvas = new Canvas(bitmap);
        v.draw(canvas);
        ビットマップを返す;
    }

    @Override
    protected void initData(Bundle savedInstanceState){


    }

    @Override
    protected String initTitleCenterString(){
        return "推論码";
    }

}
29件の元の記事が公開されました 高く評価しました 40 訪問30,000+

おすすめ

転載: blog.csdn.net/xiyunmengyuan/article/details/80435681