getDrawingCache always returns the same Bitmap

前端 未结 1 944
清酒与你
清酒与你 2021-01-12 06:39

I\'m currently working on a project which needs to display a dialog with a grayout (black/white) background. To achieve this I\'m taking a screenshot and of the whole app,

相关标签:
1条回答
  • 2021-01-12 07:11

    I think that's because your old Bitmap is still in your drawing cache. Because of this, you first need to delete it from the cache and then put the new Image in the cache. Take a look at this question, which seems to be on the same topic:

    Deletion of drawing cache

    EDIT: So, here is the code which is working for me. I use a Button to save the Bitmap and then set the Bitmap to an Image View:

    private View rootView;
    private ImageView bitmapView;
    private Button switchButton;
    public Bitmap capturedScreen;
    public boolean bitmapNeeded = false;
    
    ...
    
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        // do the other stuff
        rootView.setDrawingCacheEnabled(true); //enable Drawing cache on your view
        switchButton.setOnClickListener(this);
    }
    
    ...
    
    @Override
    public void onClick(View v) {
        if (v == switchButton) { //when the button is clicked
            captureScreen();
        }
    }
    
    public void captureScreen() {
        rootView.buildDrawingCache();       
        capturedScreen = Bitmap.createBitmap(rootView.getDrawingCache());
        imageView.setImageBitmap(capturedScreen);
        rootView.destroyDrawingCache();
    }
    
    .... 
    
    //In the onDraw method of your View:
    @Override
    protected void onDraw(Canvas canvas) {
        canvas.drawBitmap(capturedScreen, 0, 0, paint);
    }
    

    This is how it works: Everytime the user clicks the button, everything inside rootView is saved as a bitmap and then drawn to the imageView. You can of course call the captureScreen Method from anywhere in your code, if you need to to.

    I hope this example helps you.

    0 讨论(0)
提交回复
热议问题