自定义图片形状
来源:互联网 发布:中国人民大学数据库 编辑:程序博客网 时间:2024/05/02 04:26
自定义图片形状(通过ShapeDrawable):
import android.annotation.SuppressLint;import android.content.Context;import android.graphics.Bitmap;import android.graphics.BitmapShader;import android.graphics.Canvas;import android.graphics.Paint;import android.graphics.Path;import android.graphics.RectF;import android.graphics.Shader;import android.graphics.drawable.BitmapDrawable;import android.graphics.drawable.ShapeDrawable;import android.graphics.drawable.shapes.ArcShape;import android.graphics.drawable.shapes.OvalShape;import android.graphics.drawable.shapes.PathShape;import android.graphics.drawable.shapes.RectShape;import android.graphics.drawable.shapes.RoundRectShape;import android.util.AttributeSet;import android.view.View;public class ShapeView extends View{ private Paint paint; private BitmapShader bitmapShader; private Bitmap bitmap; private ShapeDrawable shapeDrawable; private int centerx,centery,radius; /** 默认类型为圆形*/ private int type=CIRCLE_BITMAP; private Path path; /** 外矩形 圆角半径 */ private float[] outerR; /** 内部矩形与外部矩形的距离 */ private RectF inset; /** 内矩形 圆角半径 */ private float[] innerRadii = {20, 20, 20, 20, 20, 20, 20, 20}; /** 圆形图片*/ public static final int CIRCLE_BITMAP=11; /** 矩形图片*/ public static final int RECT_BITMAP=12; /** 椭圆图片*/ public static final int OVAL_BITMAP=13; /** 圆角图片*/ public static final int ROUNDRECT_BITMAP=14; /** 弧形图片*/ public static final int ARC_BITMAP=15; /** path路径图片*/ public static final int PATH_BITMAP=16; public ShapeView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } public ShapeView(Context context, AttributeSet attrs) { super(context, attrs); } public ShapeView(Context context) { super(context); } /** * 设置图片类型 * @param type */ public void SetType(int type){ this.type=type; } @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { centerx=w/2; centery=h/2; radius=Math.min(centerx,centery); paint=new Paint(); bitmap=((BitmapDrawable)getResources().getDrawable(R.drawable.shape)).getBitmap(); // 构造渲染器BitmapShader bitmapShader=new android.graphics.BitmapShader(bitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP); } @SuppressLint("DrawAllocation") @Override protected void onDraw(Canvas canvas) { switch (type) { case CIRCLE_BITMAP:// paint.setShader(bitmapShader);// canvas.drawCircle(centerx,centery, radius, paint); shapeDrawable=new ShapeDrawable(new OvalShape());//添加椭圆模型 shapeDrawable.setBounds(0, 0, radius*2, radius*2);//设置显示区域 为圆形 break; case RECT_BITMAP: shapeDrawable=new ShapeDrawable(new RectShape());//添加矩形模型 shapeDrawable.setBounds(0, 0, radius*2, radius*2);//设置显示区域 为圆形 break; case OVAL_BITMAP: shapeDrawable=new ShapeDrawable(new OvalShape());//添加椭圆模型 shapeDrawable.setBounds(0, 0, centerx*2, centery*2);//设置显示区域 为矩形 break; case ROUNDRECT_BITMAP: //外矩形 左上、右上、右下、左下 圆角半径 outerR = new float[] { 50, 50, 50, 50, 50, 50, 50, 50}; //内矩形距外矩形,左上角x,y距离, 右下角x,y距离 , 内部矩形与外部矩形的距离 inset = new RectF(150,150, 200,200); shapeDrawable=new ShapeDrawable(new RoundRectShape(outerR,null, null));//添加圆角模型// shapeDrawable=new ShapeDrawable(new RoundRectShape(outerR,inset, innerRadii));//添加圆角模型 shapeDrawable.setBounds(0, 0, centerx*2, centery*2);//设置显示区域 为矩形 break; case ARC_BITMAP: shapeDrawable=new ShapeDrawable(new ArcShape(135, 270));//添加弧形模型 (135:开始角度,270:扫描角度) shapeDrawable.setBounds(0, 0, radius*2, radius*2);//设置显示区域 为圆形 break; case PATH_BITMAP: //绘制一个顶点为下列四个点的棱形 path = new Path(); path.moveTo(50, 0); path.lineTo(0, 50); path.lineTo(50, 100); path.lineTo(100, 50); shapeDrawable=new ShapeDrawable(new PathShape(path, 100, 200));//添加几何路径 // 100, 200 最终呈现出的坐标值(实际内部是缩放的canvas) shapeDrawable.setBounds(0, 0, radius*2, radius*2);//设置显示区域 为圆形 break; default: break; } //得到画笔并设置渲染器 shapeDrawable.getPaint().setShader(bitmapShader); //绘制shapeDrawable shapeDrawable.draw(canvas); }}
关于shape:
有位盆友写的挺详细,有兴趣的可以看看:http://blog.csdn.net/jjwwmlp456/article/details/46928859
0 0
- 自定义图片形状
- 自定义图片形状
- 图片按钮+自定义形状
- 安卓自定义按钮图片 和形状
- 自定义图片形状 圆形到多边形
- cocos2d-lua 图片裁剪自定义形状
- 自定义之一个图片根据另一个图片形状进行裁剪
- QT 自定义窗口形状的图片查看器
- Android shape属性详解(自定义图片和形状)
- 自定义光标形状
- 自定义形状窗体
- 自定义皮肤-----条形状
- 自定义形状界面MFC
- 自定义形状窗体
- unity3d 自定义鼠标形状
- C#自定义窗口形状
- CSS自定义鼠标形状
- 创建自定义鼠标形状
- 不要制造紧迫感,要培养目标感
- 背景建模--W4方法
- 算法导论第九章-中位数和顺序统计量-Cpp代码实现
- Install Fedora
- Linux之Ganglia源码安装
- 自定义图片形状
- Manacher模板 Poj3974
- Ganglia安装
- 深入理解C++中public、protected及private用法
- Android颜色分解与添加透明度
- 仿照映客的直播界面的刷礼物效果
- Jenkins + Github持续集成构建Docker容器
- 第十五周实践项目1-程序填空
- HDU5585 Numbers