Android中圆形的imageView
2015-07-16 16:49
501 查看
原创:http://blog.csdn.net/jjding1986/article/details/8141465
[java]
view plaincopy
![](https://code.csdn.net/assets/CODE_ico.png)
![](https://code.csdn.net/assets/ico_fork.svg)
package com.example.testsam;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.PorterDuff.Mode;
import android.graphics.PorterDuffXfermode;
import android.graphics.Rect;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.widget.ImageView;
/**
* 圆形的Imageview
* @since 2012-11-02
*
* @author bingyang.djj
*
*/
public class CircleImageView extends ImageView {
private Paint paint = new Paint();
public CircleImageView(Context context) {
super(context);
}
public CircleImageView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public CircleImageView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
protected void onDraw(Canvas canvas) {
Drawable drawable = getDrawable();
if (null != drawable) {
Bitmap bitmap = ((BitmapDrawable) drawable).getBitmap();
Bitmap b = toRoundCorner(bitmap, 14);
final Rect rect = new Rect(0, 0, b.getWidth(), b.getHeight());
paint.reset();
canvas.drawBitmap(b, rect, rect, paint);
} else {
super.onDraw(canvas);
}
}
private Bitmap toRoundCorner(Bitmap bitmap, int pixels) {
Bitmap output = Bitmap.createBitmap(bitmap.getWidth(),
bitmap.getHeight(), Config.ARGB_8888);
Canvas canvas = new Canvas(output);
final int color = 0xff424242;
final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());
paint.setAntiAlias(true);
canvas.drawARGB(0, 0, 0, 0);
paint.setColor(color);
int x = bitmap.getWidth();
canvas.drawCircle(x / 2, x / 2, x / 2, paint);
paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
canvas.drawBitmap(bitmap, rect, rect, paint);
return output;
}
}
[java]
view plaincopy
![](https://code.csdn.net/assets/CODE_ico.png)
package com.example.testsam;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.PorterDuff.Mode;
import android.graphics.PorterDuffXfermode;
import android.graphics.Rect;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.widget.ImageView;
/**
* 圆形的Imageview
* @since 2012-11-02
*
* @author bingyang.djj
*
*/
public class CircleImageView extends ImageView {
private Paint paint = new Paint();
public CircleImageView(Context context) {
super(context);
}
public CircleImageView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public CircleImageView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
protected void onDraw(Canvas canvas) {
Drawable drawable = getDrawable();
if (null != drawable) {
Bitmap bitmap = ((BitmapDrawable) drawable).getBitmap();
Bitmap b = toRoundCorner(bitmap, 14);
final Rect rect = new Rect(0, 0, b.getWidth(), b.getHeight());
paint.reset();
canvas.drawBitmap(b, rect, rect, paint);
} else {
super.onDraw(canvas);
}
}
private Bitmap toRoundCorner(Bitmap bitmap, int pixels) {
Bitmap output = Bitmap.createBitmap(bitmap.getWidth(),
bitmap.getHeight(), Config.ARGB_8888);
Canvas canvas = new Canvas(output);
final int color = 0xff424242;
final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());
paint.setAntiAlias(true);
canvas.drawARGB(0, 0, 0, 0);
paint.setColor(color);
int x = bitmap.getWidth();
canvas.drawCircle(x / 2, x / 2, x / 2, paint);
paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
canvas.drawBitmap(bitmap, rect, rect, paint);
return output;
}
}
相关文章推荐
- View控件中android:drawablePadding不起作用的原因探究
- Android 屏幕适配方案
- Android自定义View——自定义搜索框(SearchView)
- 关于 android 基础知识的总结 之 定时器
- Android中截取照片
- 【Android测试】【第三节】ADB——源码浅谈
- android dp与px之间转换以及px与sp之间的转换
- android 设备在设置节能模式的情况下 调用 Toast 会 唤醒屏幕 突然变亮
- Android Fragment 你应该知道的一切
- Android下如何把屏幕录制演示生成gif动态图
- Android之Service与Activity通信机制
- Android地图 获取经纬度计算距离介绍
- Android 特别大的Activity和Fragment的生命周期图
- Android使用TextView,设置onClick属性无效解决办法
- Android反编译工具使用
- html5模拟Android下拉刷新
- Android---利用Google的云消息
- Android-studio第一次开始跳过SDK下载
- Android触控基础:MotionEvent
- Android通过反射打造可以存储任何对象的万能SharedPreferences