自定义控件(26)---图片伸缩、圆角切割、内存位图

2024-08-31 23:18

本文主要是介绍自定义控件(26)---图片伸缩、圆角切割、内存位图,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

效果图如下:::

需要的素材

可以了解:如何图片伸缩,以及图片的圆角切割(内存生成位图)

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context="com.example.customeprogressbar.MainActivity" ><com.example.customeprogressbar.CustomProgressBarandroid:id="@+id/progress"android:layout_width="180dip"android:layout_height="10dip"android:layout_centerInParent="true"android:background="@drawable/pro_line" /></RelativeLayout>

CustomProgressBar

package com.example.customeprogressbar;import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.PorterDuff;
import android.graphics.PorterDuffXfermode;
import android.graphics.Rect;
import android.graphics.RectF;
import android.util.AttributeSet;
import android.view.View;public class CustomProgressBar extends View {int width;int height;Bitmap sourBg;Bitmap barBg;/*** 构造方法*/public CustomProgressBar(Context ctx) {super(ctx);}public CustomProgressBar(Context context, AttributeSet attrs,int defStyleAttr) {super(context, attrs, defStyleAttr);}public CustomProgressBar(Context context, AttributeSet attrs) {super(context, attrs);}/*** * android:layout_width="180dip" android:layout_height="10dip"*/@Overrideprotected void onSizeChanged(int w, int h, int oldw, int oldh) {this.width = getWidth();this.height = getHeight();// 获取进度条矩形图片this.sourBg = BitmapFactory.decodeResource(getResources(),R.drawable.pro_state);// 裁剪跟背景图同样大小的矩形图片(非圆角)this.sourBg = conBitmapSize(this.sourBg, this.width, this.height);// 裁剪圆角图片this.barBg = toRoundCorner(this.sourBg, dip2px(getContext(), 4.33f));// 4.33f表示进度条的圆角大小super.onSizeChanged(w, h, oldw, oldh);}protected void onDraw(Canvas canvas) {if (this.barBg != null) {canvas.drawBitmap(this.barBg, 0.0F, 0.0F, null);}super.onDraw(canvas);}/*** 通过缩放比例那个背景图片,然后生成跟底部图片大小一样的(除去圆角) Bitmap.createBitmap* * @param bitmap*            进度的背景图片* @param width*            控件宽* @param height*            控件高*/private Bitmap conBitmapSize(Bitmap bitmap, int width, int height) {Matrix matrix = new Matrix();// 缩放比例matrix.setScale(1.0F * width / bitmap.getWidth(), 1.0F * height/ bitmap.getHeight());bitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(),bitmap.getHeight(), matrix, false);return bitmap;}/**切割圆角:::::* 创建一个以位图为底的画布 在canvas初始化的时候就传入了一个空的bitmap* 最后canvas中绘画的内容都被绘制到了bitmap中,从而得到了我们需要的bitmap*/private Bitmap toRoundCorner(Bitmap bitmap, int pixels) {// 生成一个位图图像Bitmap output = Bitmap.createBitmap(bitmap.getWidth(),bitmap.getHeight(), Bitmap.Config.ARGB_8888);Canvas canvas = new Canvas(output);Paint paint = new Paint();paint.setAntiAlias(true);Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());RectF rectF = new RectF(rect);float roundPx = pixels;/*** rect:RectF对象。* * rx:x方向上的圆角半径。* * ry:y方向上的圆角半径。* * paint:绘制时所使用的画笔。*/canvas.drawRoundRect(rectF, roundPx, roundPx, paint);paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));canvas.drawBitmap(bitmap, rect, rect, paint);
//		canvas.drawBitmap(bitmap, src, dst, paint)return output;}public static int dip2px(Context context, float dpValue) {final float scale = context.getResources().getDisplayMetrics().density;return (int) (dpValue * scale + 0.5f);}
}


这篇关于自定义控件(26)---图片伸缩、圆角切割、内存位图的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1125273

相关文章

NameNode内存生产配置

Hadoop2.x 系列,配置 NameNode 内存 NameNode 内存默认 2000m ,如果服务器内存 4G , NameNode 内存可以配置 3g 。在 hadoop-env.sh 文件中配置如下。 HADOOP_NAMENODE_OPTS=-Xmx3072m Hadoop3.x 系列,配置 Nam

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

使用opencv优化图片(画面变清晰)

文章目录 需求影响照片清晰度的因素 实现降噪测试代码 锐化空间锐化Unsharp Masking频率域锐化对比测试 对比度增强常用算法对比测试 需求 对图像进行优化,使其看起来更清晰,同时保持尺寸不变,通常涉及到图像处理技术如锐化、降噪、对比度增强等 影响照片清晰度的因素 影响照片清晰度的因素有很多,主要可以从以下几个方面来分析 1. 拍摄设备 相机传感器:相机传

自定义类型:结构体(续)

目录 一. 结构体的内存对齐 1.1 为什么存在内存对齐? 1.2 修改默认对齐数 二. 结构体传参 三. 结构体实现位段 一. 结构体的内存对齐 在前面的文章里我们已经讲过一部分的内存对齐的知识,并举出了两个例子,我们再举出两个例子继续说明: struct S3{double a;int b;char c;};int mian(){printf("%zd\n",s

Spring 源码解读:自定义实现Bean定义的注册与解析

引言 在Spring框架中,Bean的注册与解析是整个依赖注入流程的核心步骤。通过Bean定义,Spring容器知道如何创建、配置和管理每个Bean实例。本篇文章将通过实现一个简化版的Bean定义注册与解析机制,帮助你理解Spring框架背后的设计逻辑。我们还将对比Spring中的BeanDefinition和BeanDefinitionRegistry,以全面掌握Bean注册和解析的核心原理。

Android 10.0 mtk平板camera2横屏预览旋转90度横屏拍照图片旋转90度功能实现

1.前言 在10.0的系统rom定制化开发中,在进行一些平板等默认横屏的设备开发的过程中,需要在进入camera2的 时候,默认预览图像也是需要横屏显示的,在上一篇已经实现了横屏预览功能,然后发现横屏预览后,拍照保存的图片 依然是竖屏的,所以说同样需要将图片也保存为横屏图标了,所以就需要看下mtk的camera2的相关横屏保存图片功能, 如何实现实现横屏保存图片功能 如图所示: 2.mtk

Spring MVC 图片上传

引入需要的包 <dependency><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId><version>1.1</version></dependency><dependency><groupId>commons-io</groupId><artifactId>commons-

Prompt - 将图片的表格转换成Markdown

Prompt - 将图片的表格转换成Markdown 0. 引言1. 提示词2. 原始版本 0. 引言 最近尝试将图片中的表格转换成Markdown格式,需要不断条件和优化提示词。记录一下调整好的提示词,以后在继续优化迭代。 1. 提示词 英文版本: You are an AI assistant tasked with extracting the content of

Oracle type (自定义类型的使用)

oracle - type   type定义: oracle中自定义数据类型 oracle中有基本的数据类型,如number,varchar2,date,numeric,float....但有时候我们需要特殊的格式, 如将name定义为(firstname,lastname)的形式,我们想把这个作为一个表的一列看待,这时候就要我们自己定义一个数据类型 格式 :create or repla

JVM内存调优原则及几种JVM内存调优方法

JVM内存调优原则及几种JVM内存调优方法 1、堆大小设置。 2、回收器选择。   1、在对JVM内存调优的时候不能只看操作系统级别Java进程所占用的内存,这个数值不能准确的反应堆内存的真实占用情况,因为GC过后这个值是不会变化的,因此内存调优的时候要更多地使用JDK提供的内存查看工具,比如JConsole和Java VisualVM。   2、对JVM内存的系统级的调优主要的目的是减少