应该说这是canvas绘图最基本的应用了,当时看到网上实现带边框的Imgeview大多是通过设置XML来设置ImageView的Padding实现边框效果,老实说边框的效果会受到很大的限制,分享下我的一个小例子吧,代码很短,100行不到,实现原理,首先在ImageView里面绘制背景图片![](https://img-blog.csdn.net/20130506202548928)
然后在绘制主图片
![](https://img-blog.csdn.net/20130506202653870)
package com.example.borderimageviewdemo;
import java.text.AttributedCharacterIterator.Attribute;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.PorterDuff.Mode;
import android.graphics.PorterDuffXfermode;
import android.graphics.Rect;
import android.graphics.RectF;
import android.graphics.Xfermode;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.widget.ImageView;
public class BorderImageView extends ImageView{
private Rect m_outRect;
private Rect m_innerRect;
// private RectF m_outRectF;
private Drawable m_outDrawable;
private Drawable m_innerDrawable;
// private PorterDuffXfermode m_XferMode;
// private Paint mPaint;
public BorderImageView(Context context) {
super(context);
// TODO Auto-generated constructor stubneex
// m_XferMode = new Por/erDuffXfermode(Mode.SRC_IN);)
}
public BorderImageView(Context context,AttributeSet attribute)
{
super(context, attribute);
m_outRect = new Rect(0,0,getWidth(),getHeight());
m_innerRect = new Rect(10,10,getWidth()-10,getHeight()-10);
}
public void onDraw(Canvas canvas)
{
// m_outRectF = new RectF(0,0,getWidth(),getHeight());;
// mPaint = new Paint();
// mPaint.setXfermode(m_XferMode);
DrawBorder(canvas);
// canvas.saveLayer(m_outRectF, mPaint,Canvas.ALL_SAVE_FLAG);
// canvas.restore();
DrawInner(canvas);
}
public void DrawBorder(Canvas canvas)
{
if(m_outDrawable == null)
return;
m_outDrawable.setBounds(m_outRect);
m_outDrawable.draw(canvas);
}
private void DrawInner(Canvas canvas)
{
if(m_innerDrawable ==null)
return;
m_innerDrawable.setBounds(m_innerRect);
m_innerDrawable.draw(canvas);
}
public void SetBorderImageById(int resId)
{
m_outDrawable= getResources().getDrawable(resId);
}
public void SetImageDrawable(int d)
{
m_innerDrawable = getResources().getDrawable(d);
}
}
要实现背景图片有边框的效果只需要设置背景图片绘制的Rect大于主图片绘制Rect即可,我这里设置的是背景图片边距大于主图片5个px,自定义ImageVIEW控件的代码如下,工程的DEMO稍后上传。0分下载,自己跑一跑,看看效果吧