画圆遇到的问题:图片单位不一样,导致图片只能显示出圆的一部分;看代码:

public class MyCircleIamge extends ImageView {

    private  Context context;
private Paint paint;
private Canvas mcan;
private Bitmap mbit; public MyCircleIamge(Context context) {
super(context,null);
} public MyCircleIamge(Context context, AttributeSet attrs) {
super(context, attrs); this.context = context;
paint = new Paint();
paint.setStyle(Paint.Style.FILL);
paint.setAntiAlias(true);
paint.setDither(true);
paint.setColor(Color.RED); }
@Override
protected void onDraw(Canvas canvas) {
// super.onDraw(canvas);
Drawable drawable = getDrawable();
if (null != drawable){
Bitmap bitmap = ((BitmapDrawable) drawable).getBitmap();
int cy = bitmap.getHeight()/2;
int cx = bitmap.getWidth()/2;
int radius = (cx>cy?cy:cx); mbit = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Bitmap.Config.ARGB_8888);
mcan = new Canvas(mbit); mcan.drawCircle(cx,cy,radius,paint);
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); Rect src1 = new Rect(0,0,bitmap.getWidth(),bitmap.getHeight());
mcan.drawBitmap(bitmap,src1,src1,paint);
paint.reset(); Rect src = new Rect(0,0,mbit.getWidth(),mbit.getHeight());
Rect dst = new Rect(0,0,getWidth(),getHeight());
canvas.drawBitmap(mbit,src,dst,paint); }else {
super.onDraw(canvas);
}
}

这样一运行的结果:

现在改动代码:

看效果:

xml布局:

刚开始的时,我总想不通,后来才发现原来画布的大小是不一样的:bitmap.getWidth() = 1125(px)
而getWidth()=300dp=469(px)相差是很大的,新建的画布的大小一定得和原来的bitmap的大小是一样的。图片的大小和控件的大小不一样的(控件的宽大小为:469px,图片的宽大小为:1125px),我们应该以图片的大小为准。
后面同样如此,如果你画的图片和我一样的话:请检查一下这几个地方:

//px转换成dp
public static int px2dp(Context context,float pxValue){
final float scale = context.getResources().getDisplayMetrics().densityDpi;
return (int)((pxValue*160)/scale+0.5f);
}
												

android自定义圆形图片和遇到的问题的更多相关文章

  1. Android 自定义圆形图片 CircleImageView

    1.效果预览 1.1.布局中写自定义圆形图片的路径即可 1.2.然后看一看图片效果 1.3.原图是这样的 @mipmap/ic_launcher 2.使用过程 2.1.CircleImageView源 ...

  2. Android自定义圆形图片工具类(CTRL+C加CTRL+V直接使用)

    先贴一下工具类的代码!可直接复制粘贴 public class RoundImageView extends ImageView { private Paint mPaint; //画笔 privat ...

  3. 带你体验Android自定义圆形刻度罗盘 仪表盘 实现指针动态改变

    带你体验Android自定义圆形刻度罗盘 仪表盘 实现指针动态改变 转 https://blog.csdn.net/qq_30993595/article/details/78915115   近期有 ...

  4. Android实现圆形图片

     情景再现: 写Android程序也有一段时间了,今天突然被问怎么实现一个圆形图片,很多app图像是圆形的.但是用户上传的图像可不是圆的,所以问题就来了,需要我们代码实现圆形图片.但是大脑飞转想到第三 ...

  5. Android 绘制圆形图片

    经常在项目中,会遇到使用圆形头像. 然而图片往往不是圆形的,我们须要对图片进行处理.以达到圆形图片的效果.这里.我总结了一下经常使用的android圆形图片的绘制的方法. 主要有以下几种方式:1.画布 ...

  6. android绘制圆形图片的两种方式

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

  7. 自定义圆形图片控件CircleImageView的实现

    package com.loaderman.circleimageviewdemo; import android.content.Context; import android.content.re ...

  8. Android程序设计-圆形图片的实现

    在android中,google只提供了对图形的圆形操作,而没有实现对图片的圆形操作,所以我们无法实现上述操作,在此我们将使用框架进行设计(下述框架为as编写): https://github.com ...

  9. android 自定义圆形进度条

    一.通过动画实现 定义res/anim/loading.xml如下: [html]  view plain copy print ?   <?xml version="1.0" ...

随机推荐

  1. Struts 2之动态方法调用,不会的赶紧来

    学习Struts2框架以来为了减少Action 的数量,我们可以使用动态方法进行处理. 动态方法调用(Dynamic Method Invocation,DMI)是指表单元素的Action并不是直接等 ...

  2. SVN提交碰到的问题奇怪的问题

    svn提交遇到恶心的问题,可能是因为上次cleanup中断后,进入死循环了. 错误如下: 解决方法:清空svn的队列 1.下载sqlite3.exe 2.找到你项目的.svn文件,查看是否存在wc.d ...

  3. /proc/uptime详解

    From:http://smilejay.com/2012/05/proc_uptime/ 在Linux中,我们常常会使用到uptime命令去看看系统的运行时间,它与一个文件有关,就是/proc/up ...

  4. TextView 跑马灯

    首先,写一个类,让其继承自TextView: 重写focus方法,让TextView始终是focus. public class MarqueeText extends TextView { publ ...

  5. Python条件语句

    1.简介 多个条件判断,用elif语句. 如果判断需要多个条件需同时判断时,可以使用 or (或),表示两个条件有一个成立时判断条件成功: 使用 and (与)时,表示只有两个条件同时成立的情况下,判 ...

  6. webpack 代码拆分,按需加载

    转自:https://segmentfault.com/a/1190000007649417?utm_source=weekly&utm_medium=email&utm_campai ...

  7. ATMEL处理器自带USB CDC的Win7驱动问题

    [背景] 很久以前使用ATMEL的处理器开发了一款设备,通过处理器本身的功能,借助USB在PC端虚拟一个串口出来,实现和上位机软件的通信,和基本的参数设置和数据读取功能. 这个功能就是ATMEL官网上 ...

  8. [原创]cocos2d-x研习录-第二阶 基本框架

    了解完Cocos2D-x的基本概念和概念类之后,是不是有一种蠢蠢欲动的冲动,想要探究Cocos2D-x是如何完成这一切的.接着我将通过对Cocos2D-x自代的HelloCpp项目进行分析,初步了解C ...

  9. (转)CVPR 2016 Visual Tracking Paper Review

    CVPR 2016 Visual Tracking Paper Review  本文摘自:http://blog.csdn.net/ben_ben_niao/article/details/52072 ...

  10. IEnumerable 和 IQueryable 区别

    IQueryable继承自IEnumerable,所以对于数据遍历来说,它们没有区别. 但是IQueryable的优势是它有表达式树,所有对于IQueryable的过滤,排序等操作,都会先缓存到表达式 ...