写点什么

自定义 View:Bitmap 和 Drawable

用户头像
Changing Lin
关注
发布于: 刚刚
自定义 View:Bitmap和Drawable

1.知识点


  • Bitmap 和 Drawable 如何互转?

  • Bitmap:位图信息的存储,即一个矩形图像每个像素的颜⾊信息的存储器。

  • Drawable:一个可以调用 Canvas 来进⾏绘制的上层工具;内部存储的是绘制规则;在它的 draw() 方法被调用前,需要先调⽤setBounds() 来设置绘制边界;

  • 自定义 Drawable:

2.原理

  • 可以专注于绘制,与 View 无关

  • 可以存放 绘制代码,便于复用

3.代码

package com.besmart.components;
import android.content.Context;import android.graphics.Canvas;import android.graphics.drawable.Drawable;import android.util.AttributeSet;import android.view.View;
import androidx.annotation.Nullable;
public class DrawableView extends View {
Drawable drawable;
public DrawableView(Context context, @Nullable AttributeSet attrs) { super(context, attrs); }
{ drawable = new MeshDrawable(); }
@Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); drawable.setBounds(0, 0, (int) Util.dp2px(300), (int) Util.dp2px(300)); drawable.draw(canvas); }}
复制代码


package com.besmart.components;
import android.graphics.Canvas;import android.graphics.Color;import android.graphics.ColorFilter;import android.graphics.Paint;import android.graphics.PixelFormat;import android.graphics.Rect;import android.graphics.drawable.Drawable;
import androidx.annotation.NonNull;import androidx.annotation.Nullable;
public class MeshDrawable extends Drawable { private static final int INTERVAL = (int) Util.dp2px(80); Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); // 抗锯齿
{ paint.setColor(Color.RED); paint.setStrokeWidth(Util.dp2px(2)); }
@Override public void draw(@NonNull Canvas canvas) { Rect bound = getBounds(); for (int i = 0; i < bound.right; i+=INTERVAL) { for (int j = 0; j < bound.bottom; j+=INTERVAL) { canvas.drawLine(bound.left, j, bound.right, j, paint); canvas.drawLine(i, bound.top, i, bound.bottom, paint); } } }
@Override public void setAlpha(int alpha) { paint.setAlpha(alpha); }
@Override public int getAlpha() { return paint.getAlpha(); }
@Override public void setColorFilter(@Nullable ColorFilter colorFilter) { paint.setColorFilter(colorFilter); }
@Override public int getOpacity() { // 获取透明度,其实就是 画笔的透明度 return getAlpha() == 0? PixelFormat.TRANSPARENT: // 完全透明 getAlpha() == 0xff? PixelFormat.OPAQUE: // 不透明的 PixelFormat.TRANSLUCENT; // 半透明的 }}
复制代码


发布于: 刚刚阅读数: 2
用户头像

Changing Lin

关注

获得机遇的手段远超于固有常规之上~ 2020.04.29 加入

我能做的,就是调整好自己的精神状态,以最佳的面貌去面对那些未曾经历过得事情,对生活充满热情和希望。

评论

发布
暂无评论
自定义 View:Bitmap和Drawable