PictureDrawable的简单使用

本篇是关于Drawable的第五篇博客了,PictureDrawable我感觉你如果不是做互联网开发或者对数据流量比较敏感的话,一般应该是用不到的(我是胡说的,反正我不做互联网开发,我自己如果不是因为写这篇博客,我也不会使用这个类的)。
废话不多说了,直接进入正题吧!
先看一下大概效果(其实哪有什么效果可言呀!)
这次是真没什么可说的了

主布局文件:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.picturedrawable.MainActivity">

    <ImageView
        android:id="@+id/iv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:minHeight="400dp"
        android:minWidth="400dp"/>

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/iv"
        android:layout_marginTop="20dp"
        android:onClick="setImageViewBg"
        android:text="@string/set_image" />
</RelativeLayout>

主 Java文件:

package com.example.picturedrawable;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Picture;
import android.graphics.drawable.PictureDrawable;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;

public class MainActivity extends AppCompatActivity {

    private ImageView iv;
    private PictureDrawable pictureDrawable;
    private int width;
    private int height;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        iv = (ImageView)findViewById(R.id.iv);
    }
    private void initPictureDrawable(){

        Picture picture = new Picture();
        width = iv.getMinimumWidth();
        height = iv.getMinimumHeight();
        Canvas c = picture.beginRecording(width,height);
        Paint p = new Paint();
        p.setColor(Color.GREEN);
        c.drawCircle(width/2,height/2,200,p);
        picture.endRecording();
        pictureDrawable = new PictureDrawable(picture);

    }

    @Override
    protected void onResume() {
        super.onResume();
        initPictureDrawable();
    }

    public void setImageViewBg(View view){
        Bitmap bitmap = Bitmap.createBitmap(width,height, Bitmap.Config.RGB_565);
        Canvas canvas = new Canvas(bitmap);
        canvas.drawBitmap(BitmapFactory.decodeResource(getResources(),R.drawable.first),0,0,null);
        pictureDrawable.setBounds(0,0,width,height);
        pictureDrawable.draw(canvas);//直接调用不会绘制任何东西到canvas上的,必须先设置好bounds
//        canvas.drawPicture(pictureDrawable.getPicture());
        iv.setImageBitmap(bitmap);
    }

}

代码一共就这么多,使用PictureDrawable的时候,其实更多的实在使用其中的Picture,它有几个重要的方法。比如 createFromStream、writeToStream、beginRecording和endRecording。Picture只是记录绘制步骤的信息,并没有像素数据,直接设置PictureDrawable为背景是不会显示的,需要调用draw方法。

绘制PictureDrawable其实就是在绘制里面的Picture,如果直接调用PictureDrawable.draw的话,也是无法绘制出图形的,因为没有指定绘制区域,需要先指定bounds。如果是调用 Canvas.drawPicture(PictureDrawable.getPicture())则不需要。这个看一下源码就清除了!

createFromStream、writeToStream分别是向流中读取、写入一个Picture,如果是远程传输的话,就不需要传大量的像素信息,只需要传绘制过程记录即可,可在另一端从新绘制,感觉应该会更节省流量吧!!(自己猜的)

这是我的公众号,如果可以的话,还请您关注一下,这将是对我最大的鼓励,谢谢!!
公众号

代码地址:
PictureDrawable的简单使用——一个小demo

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Android SVG (Scalable Vector Graphics) 是一种用于在 应用程序中显示可缩放矢量图形的格式。SVG 图像使用 XML 语法进行描述,可以无损地缩放和放大,而不会失去清晰度和质量。 Android 提供了一些方法来在应用程序中加载和显示 SVG 图像。最常用的方法是使用第三方库,例如 AndroidSVG、Svg-androidAndroidSVG Library。这些库提供了用于解析和渲染 SVG 图像的类和方法。 要在 Android 应用程序中使用 SVG 图像,首先需要将 SVG 文件保存在项目的资源文件夹中。然后,可以使用相应的库来加载和显示 SVG 图像。通常,需要将 SVG 图像转换为 Android 可以理解和显示的格式,例如 Bitmap 或 Drawable。 以下是一个简单的示例代码,演示如何使用 AndroidSVG 库加载和显示 SVG 图像: ```java import com.caverock.androidsvg.SVG; import com.caverock.androidsvg.SVGParseException; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Picture; import android.graphics.drawable.PictureDrawable; import android.widget.ImageView; public void loadSvgImage(Context context, ImageView imageView, int svgResId) { try { SVG svg = SVG.getFromResource(context, svgResId); Picture picture = svg.renderToPicture(); PictureDrawable drawable = new PictureDrawable(picture); imageView.setImageDrawable(drawable); } catch (SVGParseException e) { e.printStackTrace(); } } ``` 在上面的示例中,`loadSvgImage` 方法接收一个上下文对象、一个 ImageView 和一个指向 SVG 文件的资源 ID。它使用 AndroidSVG 库从资源中加载 SVG 图像,并将其渲染为 PictureDrawable,然后将其设置为 ImageView 的图像。 这只是一个基本示例,你可以根据自己的需求进行更多的定制和扩展。希望这能帮助你开始在 Android 应用程序中使用 SVG 图像!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值