android图片切圆角控件,xamarin.Android ImageView 图片圆角(自定义属性、扩展控件)...

新增 /values/Attrs.xml 文件

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using Android.App;

using Android.Content;

using Android.Graphics;

using Android.OS;

using Android.Runtime;

using Android.Views;

using Android.Widget;

using Android.Util;

using Java.Util.Jar;

using Android.Graphics.Drawables;

using static Android.Graphics.PorterDuff;

using Android.Content.Res;

namespace Dorid.UI

{

///

/// 圆角

///

public class RoundImageView: ImageView

{

private int mBorderWidth = ;

private Bitmap mask;

private Paint paint;

private Color mBorderColor = Color.ParseColor("#FFFFFF");

private Context mContext;

public RoundImageView(Context context):base(context)

{

mContext = context;

}

public RoundImageView(Context context, IAttributeSet attrs) : base(context, attrs)

{

mContext = context;

GetAttributes(context, attrs);

}

public RoundImageView(Context context, IAttributeSet attrs, int defStyle) : base(context, attrs, defStyle)

{

mContext = context;

GetAttributes(context, attrs);

}

///

/// 获取自定义属性

///

///

///

private void GetAttributes(Context context, IAttributeSet attrs)

{

TypedArray t_attrs = context.ObtainStyledAttributes(attrs, Resource.Styleable.RoundImageView);

mBorderColor = t_attrs.GetColor(Resource.Styleable.RoundImageView_border_color, mBorderColor);

int defalut = (int)( * context.Resources.DisplayMetrics.Density + 0.5f);

mBorderWidth = t_attrs.GetDimensionPixelOffset(Resource.Styleable.RoundImageView_border_width, defalut);

t_attrs.Recycle();

}

protected override void OnDraw(Canvas canvas)

{

Drawable localDrawable = Drawable;

if (localDrawable == null)

return;

if (localDrawable is NinePatchDrawable)

return;

if (this.paint == null)

{

PorterDuff.Mode localMode = PorterDuff.Mode.DstIn;

Paint localPaint = new Paint();

localPaint.FilterBitmap = false;

localPaint.AntiAlias = true;

localPaint.SetXfermode(new PorterDuffXfermode(localMode));

this.paint = localPaint;

}

int width = Width;

int height = Height;

/** 保存layer */

int layer = canvas.SaveLayer(0.0F, 0.0F, width, height, null, SaveFlags.All);

/** 设置drawable的大小 */

localDrawable.SetBounds(, , width, height);

/** 将drawable绑定到bitmap(this.mask)上面(drawable只能通过bitmap显示出来) */

localDrawable.Draw(canvas);

if ((this.mask == null) || (this.mask.IsRecycled))

{

this.mask = CreateOvalBitmap(width, height);

}

/** 将bitmap画到canvas上面 */

canvas.DrawBitmap(this.mask, 0.0F, 0.0F, this.paint);

/** 将画布复制到layer上 */

canvas.RestoreToCount(layer);

DrawBorder(canvas, width, height);

}

private void DrawBorder(Canvas canvas, int width, int height)

{

if (mBorderWidth == )

return;

Paint mBorderPaint = new Paint();

mBorderPaint.SetStyle(Paint.Style.Stroke);

mBorderPaint.AntiAlias = true;

mBorderPaint.Color= mBorderColor;

mBorderPaint.StrokeWidth = mBorderWidth;

/**

* 坐标x:view宽度的一般 坐标y:view高度的一般 半径r:因为是view的宽度-border的一半

*/

canvas.DrawCircle(width >> , height >> , (width - mBorderWidth) >> , mBorderPaint);

canvas = null;

}

///

/// 获取一个bitmap,目的是用来承载drawable;

/// 将这个bitmap放在canvas上面承载,并在其上面画一个椭圆(其实也是一个圆,因为width=height)来固定显示区域

///

///

///

///

public Bitmap CreateOvalBitmap(int width, int height)

{

Bitmap.Config localConfig = Bitmap.Config.Argb8888;

Bitmap localBitmap = Bitmap.CreateBitmap(width, height, localConfig);

Canvas localCanvas = new Canvas(localBitmap);

Paint localPaint = new Paint();

int padding = mBorderWidth - ;

/**

* 设置椭圆的大小(因为椭圆的最外边会和border的最外边重合的,如果图片最外边的颜色很深,有看出有棱边的效果,所以为了让体验更加好,

* 让其缩进padding px)

*/

RectF localRectF = new RectF(padding, padding, width - padding, height - padding);

localCanvas.DrawOval(localRectF, localPaint);

return localBitmap;

}

}

}

axml 使用

android:orientation="vertical"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:minWidth="25px"

android:minHeight="25px"

android:background="@color/activity_bg_color">

android:src="@drawable/icon"

android:layout_height="40dp"

android:layout_alignParentRight="true"controls:border_width="3dp"

controls:border_color="#CCCCCC"

android:id="@+id/iv_userphoto_mycenter_myprofile"

android:layout_width="40dp"

android:layout_marginRight="20dp" />

Xamarin.Android ImageView 图片圆角显示

第一步:在 values 文件夹下新增 Attrs.xml 文件 <?xml version="1.0" encoding="utf-8" ?> & ...

&lbrack;置顶&rsqb;&NewLine; xamarin android自定义标题栏(自定义属性、回调事件)

自定义控件的基本要求 这篇文章就当是自定义控件入门,看了几篇android关于自定义控件的文章,了解了一下,android自定义控件主要有3种方式: 自绘控件:继承View类,所展示的内容在OnDra ...

Android CardView卡片布局 标签: 控件

CardView介绍 CardView是Android 5.0系统引入的控件,相当于FragmentLayout布局控件然后添加圆角及阴影的效果:CardView被包装为一种布局,并且经常在ListV ...

Android support library支持包常用控件介绍&lpar;二&rpar;

谷歌官方推出Material Design 设计理念已经有段时间了,为支持更方便的实现 Material Design设计效果,官方给出了Android support design library ...

&lbrack;APP&rsqb; Android 开发笔记 004-Android常用基本控件使用说明

TextView 文本框 EditText控件 Button 与 ImageButton ImageView RadioButton CheckBox复选框 TextView 文本框 ,用于显示文本的 ...

(转载)Android UI设计之AlertDialog弹窗控件

Android UI设计之AlertDialog弹窗控件 作者:qq_27630169 字体:[增加 减小] 类型:转载 时间:2016-08-18我要评论 这篇文章主要为大家详细介绍了Android ...

JavaFX的扩展控件库ControlsFX介绍

声明:   本博客文章原创类别的均为个人原创,版权所有.转载请注明出处: http://blog.csdn.net/ml3947,另外本人的个人博客:http://www.wjfxgame.com. ...

WPF自定义控件(三)の扩展控件

扩展控件,顾名思义就是对已有的控件进行扩展,一般继承于已有的原生控件,不排除继承于自定义的控件,不过这样做意义不大,因为既然都自定义了,为什么不一步到位呢,有些不同的需求也可以通过此来完成,不过类似于 ...

(转载) Android 带清除功能的输入框控件ClearEditText&comma;仿IOS的输入框

Android 带清除功能的输入框控件ClearEditText,仿IOS的输入框 标签: Android清除功能EditText仿IOS的输入框 2013-09-04 17:33 70865人阅读  ...

随机推荐

使用DDMS测试安卓手机APP的性能(android)

安装/配置: 通过另外一个工具也可以测试手机客户端APP的性能,这就是android开发包中的DDMS工具(Dalvik Debug Monitor Service),先来说一下android开发包的 ...

cocos2dx libiconv 转码

iconv下载(Android)已编译完的iconv包(用这个即可) ios自带libiconv,只需#include 即可  步骤 1.libiconv解压文件放置 直 ...

HDU-1598 find the most comfortable road

find the most comfortable road Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K ...

《Java程序员面试笔试宝典》之Java与C&sol;C&plus;&plus;有什么异同

Java与C++都是面向对象语言,都使用了面向对象思想(例如封装.继承.多态等),由于面向对象有许多非常好的特性(继承.组合等),使得二者都有很好的可重用性. 需要注意的是,二者并非完全一样,下面主要 ...

placeholder的美化

之前在介绍HTML5的placeholder属性时,曾实现了一些页面例子让大家参考,但这些例子里的背景文字都是灰色的,样式很单一,其实它们可以做的更好看.CSS3里提供了专门的规则属性来美化用plac ...

hdu&lowbar;4529&lowbar;郑厂长系列故事——N骑士问题&lpar;状压DP&rpar;

题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=4529 题意:中文,不解释 题解:状压DP,dp[i][j][k][s]表示第i行当前用了j个骑士,i- ...

nyoj 疯牛

疯牛 时间限制:1000 ms  |  内存限制:65535 KB 难度:4   描述 农夫 John 建造了一座很长的畜栏,它包括N (2 <= N <= 100,000)个隔间,这些小 ...

chrome调试vue&period;js的插件:vue&period;js devtools

1.什么是vue.js devtools? vue.js devtools是chrome的一款插件,用来调试vue的一款神器. 2.为什么下载vue.js devtools? 由于vue是数据驱动的, ...

JVM总括二-垃圾回收:GC Roots、回收算法、回收器

JVM总括二-垃圾回收:GC Roots.回收算法.回收器 目录:JVM总括:目录 一.判断对象是否存活 为了判断对象是否存活引入GC Roots,如果一个对象与GC Roots没有直接或间接的引用关 ...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值