package com.example.testandroid;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.graphics.BitmapFactory;
import android.graphics.BitmapShader;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.PorterDuff.Mode;
import android.graphics.PorterDuffXfermode;
import android.graphics.Rect;
import android.graphics.RectF;
import android.graphics.Shader;
import android.graphics.Shader.TileMode;
import android.util.AttributeSet;
import android.view.View;
public class MyProgress extends View
{
private float scale;
private float dx;
private float dy;
private int mBorderWidth;
public MyProgress(Context context, AttributeSet attrs)
{
super(context, attrs);
}
@Override
protected void onDraw(Canvas canvas)
{
super.onDraw(canvas);
Bitmap bitmap = BitmapFactory.decodeResource(getResources(),
R.drawable.hello);
//圆形图片实现方式001
bitmap = getRoundedCornerBitmap(bitmap, 1);
Rect rect2 = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());
Rect rect3 = new Rect(200, 200, 400, 400);
Paint paint4 = new Paint();
paint4.setAntiAlias(true);
canvas.drawBitmap(bitmap, rect2, rect3, paint4);
//圆形图片实现方式002
//中点cx,cy,半径radius
canvas.drawCircle(500, 300, 200, getPaint(bitmap));
}
private Paint getPaint(Bitmap bitmap)
{
int outWidth = 200;
int outHeight = 200;
int width = bitmap.getWidth();
int height = bitmap.getHeight();
Paint paint = new Paint();
paint.setAntiAlias(true);
Shader shader = new BitmapShader(bitmap, TileMode.CLAMP, TileMode.CLAMP);
Matrix localM = new Matrix();
if (width * outHeight > outWidth * height)
{
scale = outHeight / (float) height;
dx = (outWidth - width * scale) * 0.5f;
} else
{
scale = outWidth / (float) width;
dy = (outHeight - height * scale) * 0.5f;
}
//localM.setScale(scale, scale);
//localM.postTranslate((int) (dx + 0.5f) + mBorderWidth,
// (int) (dy + 0.5f) + mBorderWidth);
System.out.println("缩放比例:"+scale);
shader.setLocalMatrix(localM);
paint.setShader(shader);
return paint;
}
/**
* 将图片截取为圆角图片
*
* @param bitmap
* 原图片
* @param ratio
* 截取比例,如果是8,则圆角半径是宽高的1/8,如果是2,则是圆形图片
* @return 圆角矩形图片
*/
public static Bitmap getRoundedCornerBitmap(Bitmap bitmap, float ratio)
{
int width = bitmap.getWidth();
int height = bitmap.getHeight();
Bitmap output = Bitmap.createBitmap(width,
height, Config.ARGB_8888);
Canvas canvas = new Canvas(output);
final Paint paint = new Paint();
final Rect rect = new Rect(0, 0, width, height);
final RectF rectF = new RectF(rect);
paint.setAntiAlias(true);
canvas.drawARGB(0, 0, 0, 0);
// 不能少.........
canvas.drawRoundRect(rectF, width / ratio,
height / ratio, paint);
// 圆形,少了就不是圆形.............
// 圆形,少了就不是圆形.............
paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
canvas.drawBitmap(bitmap, rect, rect, paint);
return output;
}
}
相关推荐
本文将详细介绍两种在Android中实现圆形图片的方法。 ### 第一种方式:自定义`CircleImageView` 在给定的代码中,开发者创建了一个名为`CircleImageView`的自定义视图,它继承自`ImageView`。这个自定义视图的主要...
本篇文章将深入探讨如何通过自定义View的方式来实现圆形图片展示。 首先,我们来理解为什么要自定义View。在Android系统中,ImageView是默认显示图片的组件,但它无法直接将图片裁剪为圆形。为了实现这一功能,我们...
本篇文章将深入探讨如何使用Picasso在Android应用中实现圆形图片和圆角图片。 首先,我们需要在项目中添加Picasso的依赖。如果你使用的是Gradle构建系统,可以在app模块的build.gradle文件中添加以下依赖: ```...
4. CP方法:虽然具体实现未详述,但可能是另一种实现圆形图片的方式。 学习并掌握这些知识点,将有助于开发者在Android应用中实现美观且统一的圆形图片展示效果。通过实践和调试Demo,可以更深入地理解这些技术,并...
本教程将详细介绍如何在Android中实现一个圆形图片裁剪的Demo。 首先,我们需要了解Android中的图片处理库,如 Glide 或 Picasso,它们可以方便地加载和处理图片。但这些库主要用于基本的图片展示,对于复杂的裁剪...
2. **自定义View实现圆形图片** 如果你不想引入外部库,也可以通过自定义`ImageView`子类来实现圆形效果。创建一个新的Java类,继承自`ImageView`,并在`onDraw()`方法中重绘图像。以下是一个简单的示例: ```...
9. **库的使用**: 为了简化开发,也可以使用一些开源库,如`com.makeramen:roundedimageview`,它提供了更简单的API来实现圆角和圆形图片。 总之,Android平台提供了多种方式来实现图片的圆角和圆形效果,开发者...
2. **绘制圆形图片**: - 在`RoundImageView`中,我们需要获取图片的宽度和高度,然后计算出图片的最小尺寸(即直径)。 - 使用`BitmapShader`类,我们可以设置图片的渲染模式,使其在被拉伸时保持不失真。我们...
本教程将详细讲解如何调用系统相机和本地相册来获取图片,并实现圆形图片显示。 首先,我们需要在AndroidManifest.xml文件中添加必要的权限,以便能够访问相机和读取外部存储: ```xml ``` 接下来,我们需要...
要实现“圆形图片Button”,我们需要对MFC(Microsoft Foundation Classes)或WinAPI有一定的了解。MFC是微软提供的一个C++库,用于简化Windows应用程序的开发,而WinAPI则提供了更底层的窗口和图形操作接口。开发者...
总结来说,Android圆形图片控件是通过自定义View或使用第三方库实现的,CircleImageView是一个流行的选择,它提供了一种简单且高效的实现方式。理解其工作原理和使用方法,对于提高Android应用的界面设计和用户体验...
2. **绘制圆形图片**:Android的Canvas类允许我们在一个Bitmap上进行绘制。为了将矩形图片绘制为圆形,我们需要创建一个圆形的Path对象,然后调用Canvas的drawBitmap()方法,传入Bitmap和Path作为参数。具体步骤如下...
通过这种方式,我们可以实现一个自定义的圆形图片视图,允许开发者自由定制边框颜色、宽度和填充色,从而增强应用的界面设计和交互体验。在实际项目中,还可以根据需求扩展此控件,比如添加动画效果或更多自定义选项...
要绘制圆形图片,我们通常会使用`BitmapShader`来改变位图的渲染方式,使其适应圆形的形状。 接下来,我们将创建一个新的自定义View类,继承自`ImageView`。在这个类中,我们将覆盖`onDraw()`方法,这是自定义视图...
5. 最后,调用canvas的toDataURL方法,将裁剪后的圆形图片转换为data URL,可以作为新的图片源显示或者保存。 其次,微信小程序中的movable-view组件是一个可移动的视图容器,用户可以通过触摸在页面中对其进行拖拽...
android绘制圆形图片的两种方式 看下效果先 下面有完整的示例代码 使用BitmapShader(着色器) 我们在绘制view 的时候 就是小学上美术课 用水彩笔在本子上画画 使用着色器绘制圆形图片最简单的理解方式 就是把...
在Android应用开发中,制作圆形头像图片是一个常见的...通过上述步骤,我们可以成功实现一个圆形头像图片的功能,让应用的用户体验更加友好。在实际开发中,不断优化和扩展自定义View,可以让我们的应用更加丰富多彩。
要创建一个圆形图片,我们可以使用`BitmapShader`配合`Matrix`来实现。首先,创建一个BitmapShader实例,然后设置其tileMode为`CLAMP`,以确保图像边缘平滑扩展。接着,创建一个缩放矩阵,使其宽高相等并等于Bitmap...