【问题标题】:Stroke circle imageview using canvas on android在android上使用画布描边圆imageview
【发布时间】:2015-04-13 20:51:05
【问题描述】:

我正在尝试在我的圆形图像周围使用笔划,但笔划不适合圆形,看起来圆形周围有一个正方形并且笔划超过了该限制,请参见下图。

public static Bitmap getCircleBitmap(Bitmap bitmap) {
       int size = Math.min(bitmap.getWidth(), bitmap.getHeight());

    Bitmap output = Bitmap.createBitmap(size,
            size, Bitmap.Config.ARGB_8888);
    Canvas canvas = new Canvas(output);

    BitmapShader shader;
    shader = new BitmapShader(bitmap, Shader.TileMode.CLAMP,
            Shader.TileMode.CLAMP);

    Paint paint = new Paint();
    Paint paintB = new Paint();
    paintB.setShader(shader);
    paintB.setStyle(Paint.Style.FILL);
    paint.setAntiAlias(true);
    paint.setColor(Color.YELLOW);
    paint.setStrokeWidth(15);
    paint.setStyle(Paint.Style.STROKE);


    RectF rect = new RectF(0, 0 ,size,size);
    int radius = size/2;
    canvas.drawRoundRect(rect, radius, radius, paint);
    canvas.drawRoundRect(rect, radius, radius, paintB);
    return output;
    }

xml:

  <com.click.CircledNetworkImageView
     android:id="@+id/profilePic"
     android:layout_width="@dimen/feed_item_profile_pic"
     android:layout_height="@dimen/feed_item_profile_pic"
     android:scaleType="centerCrop"
     android:layout_alignParentTop="false"
     android:layout_alignParentLeft="false"
     android:layout_alignParentBottom="false"
     android:layout_alignParentRight="false"
     android:layout_alignWithParentIfMissing="false"
     android:layout_alignParentEnd="false"
     android:layout_alignParentStart="false"
     android:layout_centerInParent="true">
 </com.click.CircledNetworkImageView>

【问题讨论】:

    标签: android canvas imageview android-canvas android-imageview


    【解决方案1】:

    我将BitmapShader 视为一种神奇的画笔,我画的所有东西都会刮掉画布以显示下面的位图。当我设想我对BitmapShader 犯的错误更少时。

    所以,通过查看您的代码,我猜您希望图像在圆角矩形内,在外面有一个白色的笔触。

    由于您将绘画样式设置为 STROKE,因此画笔正在抚摸形状,因此位图会显示在其抚摸的位置。

    您将需要调用canvas.drawRoundRect() 两次,使用相同的矩形/半径值,但使用两种不同的油漆。第一次绘制将设置位图着色器和填充样式。第二次绘制的颜色为白色,描边宽度为 15,样式为 STROKE。

    【讨论】:

    • 谢谢它成功了,但看起来有点奇怪,它不再是一个圆圈,它就像八角形
    • 这很奇怪,因为您设置了半径 = size/2,这应该是正确的。正如我所看到的,您有两个选择:使用 drawCircle() 而不是 drawRoundRect(),或者将笔画宽度设置为零(您应该得到一个细线白色笔画),看看您是否得到了您的圆圈,然后四处寻找笔画宽度和圆角半径之间的相互作用是。我猜您必须对角半径进行一些调整以补偿笔画宽度。
    • 我在问题中添加了一张图片,我试过 drawCircle() 但我仍然得到相同的结果
    • 宽度为 0 我得到了圆圈,我猜它周围有一些方形边距
    • 我做到了,是这样的:RectF rect = new RectF(30, 30 ,size - 30,size -30); float radius = size/2; canvas.drawRoundRect(rect, radius, radius , paint); canvas.drawRoundRect(rect, radius , radius, paintB);
    猜你喜欢
    • 2015-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-27
    • 1970-01-01
    • 2015-09-30
    • 1970-01-01
    相关资源
    最近更新 更多