Android drawing cache

前端 未结 2 890
后悔当初
后悔当初 2020-12-10 03:53

Please explain how does the drawing cache work in Android. I\'m implementing a custom View subclass. I want my drawing to be cached by the system. In the View constructor, I

2条回答
  •  一个人的身影
    2020-12-10 04:06

    Hopefully this explains it.

    public class YourCustomView extends View {
    
        private String mSomeProperty;
    
        public YourCustomView(Context context) {
            super(context);
        }
    
        public YourCustomView(Context context, AttributeSet attrs) {
            super(context, attrs);
        }
    
        public YourCustomView(Context context, AttributeSet attrs, int defStyle) {
            super(context, attrs, defStyle);
        }
    
        public void setSomeProperty(String value) {
            mSomeProperty = value;
            setDrawingCacheEnabled(false); // clear the cache here
            invalidate();
        }
    
        @Override
        protected void onDraw(Canvas canvas) {
            super.onDraw(canvas);
    
            // specific draw logic here
    
            setDrawingCacheEnabled(true); // cache
        }
    
        @Override
        protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
            ...
        }
    
    }
    

    Example code explained.

    1. In the setSomeProperty() method call setDrawingCacheEnabled(false) to clear the cache and force a redraw by calling invalidate().
    2. Call setDrawingCacheEnabled(true) in the onDraw method after drawing to the canvas.
    3. Optionally place a log statement in the onDraw method to confirm it is only called once each time you call the setSomeProperty() method. Be sure to remove the log call once confirmed as this will become a performance issue.

提交回复
热议问题