自定义控件(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

相关文章

Spring Security自定义身份认证的实现方法

《SpringSecurity自定义身份认证的实现方法》:本文主要介绍SpringSecurity自定义身份认证的实现方法,下面对SpringSecurity的这三种自定义身份认证进行详细讲解,... 目录1.内存身份认证(1)创建配置类(2)验证内存身份认证2.JDBC身份认证(1)数据准备 (2)配置依

Android使用ImageView.ScaleType实现图片的缩放与裁剪功能

《Android使用ImageView.ScaleType实现图片的缩放与裁剪功能》ImageView是最常用的控件之一,它用于展示各种类型的图片,为了能够根据需求调整图片的显示效果,Android提... 目录什么是 ImageView.ScaleType?FIT_XYFIT_STARTFIT_CENTE

关于MongoDB图片URL存储异常问题以及解决

《关于MongoDB图片URL存储异常问题以及解决》:本文主要介绍关于MongoDB图片URL存储异常问题以及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录MongoDB图片URL存储异常问题项目场景问题描述原因分析解决方案预防措施js总结MongoDB图

python实现svg图片转换为png和gif

《python实现svg图片转换为png和gif》这篇文章主要为大家详细介绍了python如何实现将svg图片格式转换为png和gif,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录python实现svg图片转换为png和gifpython实现图片格式之间的相互转换延展:基于Py

使用Python从PPT文档中提取图片和图片信息(如坐标、宽度和高度等)

《使用Python从PPT文档中提取图片和图片信息(如坐标、宽度和高度等)》PPT是一种高效的信息展示工具,广泛应用于教育、商务和设计等多个领域,PPT文档中常常包含丰富的图片内容,这些图片不仅提升了... 目录一、引言二、环境与工具三、python 提取PPT背景图片3.1 提取幻灯片背景图片3.2 提取

Python实现图片分割的多种方法总结

《Python实现图片分割的多种方法总结》图片分割是图像处理中的一个重要任务,它的目标是将图像划分为多个区域或者对象,本文为大家整理了一些常用的分割方法,大家可以根据需求自行选择... 目录1. 基于传统图像处理的分割方法(1) 使用固定阈值分割图片(2) 自适应阈值分割(3) 使用图像边缘检测分割(4)

C#实现将Excel表格转换为图片(JPG/ PNG)

《C#实现将Excel表格转换为图片(JPG/PNG)》Excel表格可能会因为不同设备或字体缺失等问题,导致格式错乱或数据显示异常,转换为图片后,能确保数据的排版等保持一致,下面我们看看如何使用C... 目录通过C# 转换Excel工作表到图片通过C# 转换指定单元格区域到图片知识扩展C# 将 Excel

Qt中QGroupBox控件的实现

《Qt中QGroupBox控件的实现》QGroupBox是Qt框架中一个非常有用的控件,它主要用于组织和管理一组相关的控件,本文主要介绍了Qt中QGroupBox控件的实现,具有一定的参考价值,感兴趣... 目录引言一、基本属性二、常用方法2.1 构造函数 2.2 设置标题2.3 设置复选框模式2.4 是否

Qt中QUndoView控件的具体使用

《Qt中QUndoView控件的具体使用》QUndoView是Qt框架中用于可视化显示QUndoStack内容的控件,本文主要介绍了Qt中QUndoView控件的具体使用,具有一定的参考价值,感兴趣的... 目录引言一、QUndoView 的用途二、工作原理三、 如何与 QUnDOStack 配合使用四、自

在Spring Boot中浅尝内存泄漏的实战记录

《在SpringBoot中浅尝内存泄漏的实战记录》本文给大家分享在SpringBoot中浅尝内存泄漏的实战记录,结合实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录使用静态集合持有对象引用,阻止GC回收关键点:可执行代码:验证:1,运行程序(启动时添加JVM参数限制堆大小):2,访问 htt