Android saves the view to a local album after generating pictures


public class RecommendCodeActivity extends BaseActivity {
    private ImageView ivCode;
    String codeUrl = "";
    private int codeId = 0;
    private TextView tvId, tvSave;
    private LinearLayout llMain;
    private 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
    protected void initViews(Bundle savedInstanceState) {
        tvSave.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                tvSave.setClickable (false);

// Apply storage permission for related permissions

                {the try
                    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) {
                        // apply a (Or more) permissions, and provide access codes (user-defined) for callback return
                        ActivityCompat.requestPermissions (RecommendCodeActivity.this, new String [] {Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);
                    } else {
                        mLDialog.setDialogText ("Saving picture ...");
                        mLDialog.show ();
                        saveMyBitmap ("AuthCode", createViewBitmap (llMain));
                    }
                } catch (Exception e) {
                    e.printStackTrace ();
                }
            }
        }) ;
    }

// Callback for permission application
    @Override
    public void onRequestPermissionsResult (int requestCode,
                                           String permissions [], int [] grantResults) {
        switch (requestCode) {
            case 1: {
                // If request is cancelled, the result arrays are empty.
                if (grantResults.length > 0
                        && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    mLDialog.setDialogText("正在保存图片...");
                    mLDialog.show();
                    try {
                        saveMyBitmap("AuthCode", createViewBitmap(llMain));
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                } else {
                    tvSave.setClickable(true);
                    Toast.makeText (RecommendCodeActivity.this, "Please enable read and write permissions first", Toast.LENGTH_SHORT) .show ();
                }
                return;
            }
        }
    }

// Use IO stream to save the bitmap object to the local specified folder
    public void saveMyBitmap ( final String bitName, final Bitmap bitmap) {
        new Thread (new Runnable () {
            @Override
            public void run () {
                String filePath = Environment.getExternalStorageDirectory (). getPath ();
                File file = new File (filePath + "/ DCIM / Camera / "+ bitName +" .png ");
                try {
                    file.createNewFile ();


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


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


    Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            String picFile = (String) msg.obj;
            String[] split = picFile.split("/");
            String fileName = split[split.length - 1];
            try {
                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);
        }
    };


// Put the view to be saved as a picture to generate a bitmap object

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

    @Override
    protected void initData(Bundle savedInstanceState) {


    }

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

}
29 original articles published · Liked 40 · Visits 30,000+

Guess you like

Origin blog.csdn.net/xiyunmengyuan/article/details/80435681