`

圆形图片实现2种方式

阅读更多

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;
 }

}

0
3
分享到:
评论

相关推荐

    Android实现圆形图片的两种方式

    本文将详细介绍两种在Android中实现圆形图片的方法。 ### 第一种方式:自定义`CircleImageView` 在给定的代码中,开发者创建了一个名为`CircleImageView`的自定义视图,它继承自`ImageView`。这个自定义视图的主要...

    实现圆形图片展示

    本篇文章将深入探讨如何通过自定义View的方式来实现圆形图片展示。 首先,我们来理解为什么要自定义View。在Android系统中,ImageView是默认显示图片的组件,但它无法直接将图片裁剪为圆形。为了实现这一功能,我们...

    Android Picasso实现圆形图片和圆角图片

    本篇文章将深入探讨如何使用Picasso在Android应用中实现圆形图片和圆角图片。 首先,我们需要在项目中添加Picasso的依赖。如果你使用的是Gradle构建系统,可以在app模块的build.gradle文件中添加以下依赖: ```...

    截取圆形图片以及圆形控件

    4. CP方法:虽然具体实现未详述,但可能是另一种实现圆形图片的方式。 学习并掌握这些知识点,将有助于开发者在Android应用中实现美观且统一的圆形图片展示效果。通过实践和调试Demo,可以更深入地理解这些技术,并...

    android圆形图片裁剪demo以及实现

    本教程将详细介绍如何在Android中实现一个圆形图片裁剪的Demo。 首先,我们需要了解Android中的图片处理库,如 Glide 或 Picasso,它们可以方便地加载和处理图片。但这些库主要用于基本的图片展示,对于复杂的裁剪...

    android 两种圆形头像的实现方式 CircleImageView java

    2. **自定义View实现圆形图片** 如果你不想引入外部库,也可以通过自定义`ImageView`子类来实现圆形效果。创建一个新的Java类,继承自`ImageView`,并在`onDraw()`方法中重绘图像。以下是一个简单的示例: ```...

    Android 完美实现图片圆角和圆形

    9. **库的使用**: 为了简化开发,也可以使用一些开源库,如`com.makeramen:roundedimageview`,它提供了更简单的API来实现圆角和圆形图片。 总之,Android平台提供了多种方式来实现图片的圆角和圆形效果,开发者...

    andorid实现圆形图片和圆形边框Demo

    2. **绘制圆形图片**: - 在`RoundImageView`中,我们需要获取图片的宽度和高度,然后计算出图片的最小尺寸(即直径)。 - 使用`BitmapShader`类,我们可以设置图片的渲染模式,使其在被拉伸时保持不失真。我们...

    调用系统相机和本地相册实现圆形图片

    本教程将详细讲解如何调用系统相机和本地相册来获取图片,并实现圆形图片显示。 首先,我们需要在AndroidManifest.xml文件中添加必要的权限,以便能够访问相机和读取外部存储: ```xml ``` 接下来,我们需要...

    圆形图片Button VC++

    要实现“圆形图片Button”,我们需要对MFC(Microsoft Foundation Classes)或WinAPI有一定的了解。MFC是微软提供的一个C++库,用于简化Windows应用程序的开发,而WinAPI则提供了更底层的窗口和图形操作接口。开发者...

    android圆形图片控件

    总结来说,Android圆形图片控件是通过自定义View或使用第三方库实现的,CircleImageView是一个流行的选择,它提供了一种简单且高效的实现方式。理解其工作原理和使用方法,对于提高Android应用的界面设计和用户体验...

    Android裁剪图片为圆形图片Demo

    2. **绘制圆形图片**:Android的Canvas类允许我们在一个Bitmap上进行绘制。为了将矩形图片绘制为圆形,我们需要创建一个圆形的Path对象,然后调用Canvas的drawBitmap()方法,传入Bitmap和Path作为参数。具体步骤如下...

    圆形图片自定义控件

    通过这种方式,我们可以实现一个自定义的圆形图片视图,允许开发者自由定制边框颜色、宽度和填充色,从而增强应用的界面设计和交互体验。在实际项目中,还可以根据需求扩展此控件,比如添加动画效果或更多自定义选项...

    android圆形图片控件自定义

    要绘制圆形图片,我们通常会使用`BitmapShader`来改变位图的渲染方式,使其适应圆形的形状。 接下来,我们将创建一个新的自定义View类,继承自`ImageView`。在这个类中,我们将覆盖`onDraw()`方法,这是自定义视图...

    微信小程序之裁剪图片成圆形的实现代码

    5. 最后,调用canvas的toDataURL方法,将裁剪后的圆形图片转换为data URL,可以作为新的图片源显示或者保存。 其次,微信小程序中的movable-view组件是一个可移动的视图容器,用户可以通过触摸在页面中对其进行拖拽...

    android绘制圆形图片的两种方式示例

    android绘制圆形图片的两种方式 看下效果先 下面有完整的示例代码 使用BitmapShader(着色器) 我们在绘制view 的时候 就是小学上美术课 用水彩笔在本子上画画 使用着色器绘制圆形图片最简单的理解方式 就是把...

    Android-Android开发之制作圆形头像图片的功能实现。自定义View实现圆形头像效果。

    在Android应用开发中,制作圆形头像图片是一个常见的...通过上述步骤,我们可以成功实现一个圆形头像图片的功能,让应用的用户体验更加友好。在实际开发中,不断优化和扩展自定义View,可以让我们的应用更加丰富多彩。

    各种圆形ImageView的实现

    要创建一个圆形图片,我们可以使用`BitmapShader`配合`Matrix`来实现。首先,创建一个BitmapShader实例,然后设置其tileMode为`CLAMP`,以确保图像边缘平滑扩展。接着,创建一个缩放矩阵,使其宽高相等并等于Bitmap...

Global site tag (gtag.js) - Google Analytics