美文网首页
Android 中View类DrawingCache的使用

Android 中View类DrawingCache的使用

作者: 初心一点 | 来源:发表于2019-03-09 00:10 被阅读0次

    View组件显示的内容可以通过cache机制保存为bitmap

    Java代码:

            final ImageView img1 = findViewById(R.id.img1);
            final TextView txt1 = findViewById(R.id.txt1);
            txt1.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    // 若想更新cache,必须要调用destroyDrawingCache方法把旧的cache销毁,才能建立新的
                    txt1.destroyDrawingCache();
                    // 要获取cache首先要通过setDrawingCacheEnable方法开启cache
                    txt1.setDrawingCacheEnabled(true);
                    // 调用getDrawingCache方法就可以获得view的cache图片
                    Bitmap bp = txt1.getDrawingCache();
                    // 复制bp
                    Bitmap cache = Bitmap.createBitmap(bp);
                    // 当调用setDrawingCacheEnabled方法设置为false,系统也会自动把原来的cache销毁
                    txt1.setDrawingCacheEnabled(false);
                    img1.setImageBitmap(cache);
                }
            });
    

    XML代码:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
    
        <TextView
            android:id="@+id/txt1"
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:background="@android:color/holo_red_dark"
            android:text="你好好吧"
            android:textStyle="bold" />
    
        <ImageView
            android:id="@+id/img1"
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:layout_margin="10dp" />
    
    </LinearLayout>
    

    通过以上代码,可以将TextView显示内容以及背景生成位图展示在ImageView中

    另外:
    ViewGroup在绘制子view时
    也提供了两个方法

    //  ViewGroup里所有的子view开启cache
    setChildrenDrawingCacheEnabled(boolean enabled) 
    
    // 使在绘制子view时,若该子view开启了cache,则使用它的cache进行绘制,从而节省绘制时间
    // (如何验证?)
    setChildrenDrawnWithCacheEnabled(boolean enabled) 
    

    获取cache通常会占用一定的内存,所以通常不需要的时候有必要对其进行清理,通过destroyDrawingCache或setDrawingCacheEnabled(false)实现

    相关文章

      网友评论

          本文标题:Android 中View类DrawingCache的使用

          本文链接:https://www.haomeiwen.com/subject/ykejpqtx.html