Android Shape 形状

Shape继承体系:

Shape (android.graphics.drawable.shapes)

----PathShape (android.graphics.drawable.shapes)

----RectShape (android.graphics.drawable.shapes)

--------ArcShape (android.graphics.drawable.shapes)

--------OvalShape (android.graphics.drawable.shapes)

--------RoundRectShape (android.graphics.drawable.shapes)

RectShape

RectShape rectShape = new RectShape();
ShapeDrawable drawable = new ShapeDrawable(rectShape);
drawable.getPaint().setColor(Color.RED);
drawable.getPaint().setStyle(Paint.Style.FILL); //填充
view.setBackgroundDrawable(drawable);

 矩形

RoundRectShape

float[] outerRadii = {20, 20, 40, 40, 60, 60, 80, 80};//外矩形 左上、右上、右下、左下 圆角半径
//float[] outerRadii = {20, 20, 20, 20, 20, 20, 20, 20};//外矩形 左上、右上、右下、左下 圆角半径
RectF inset = new RectF(100, 100, 200, 200);//内矩形距外矩形,左上角x,y距离, 右下角x,y距离
float[] innerRadii = {20, 20, 20, 20, 20, 20, 20, 20};//内矩形 圆角半径
//RoundRectShape roundRectShape = new RoundRectShape(outerRadii, inset, innerRadii);
RoundRectShape roundRectShape = new RoundRectShape(outerRadii, null, innerRadii); //无内矩形

ShapeDrawable drawable = new ShapeDrawable(roundRectShape);
drawable.getPaint().setColor(Color.MAGENTA);
drawable.getPaint().setAntiAlias(true);
drawable.getPaint().setStyle(Paint.Style.STROKE);//描边
view.setBackground(drawable);

 无内矩形的圆角矩形  带内矩形的圆角矩形

OvalShape

OvalShape ovalShape = new OvalShape();
ShapeDrawable drawable = new ShapeDrawable(ovalShape);
drawable.getPaint().setColor(Color.RED);
drawable.getPaint().setStyle(Paint.Style.FILL_AND_STROKE);
view.setBackgroundDrawable(drawable);

 椭圆。 当View的宽高相等时,就绘出了圆

ArcShape

ArcShape arcShape = new ArcShape(45, 270); //顺时针  开始角度45, 扫描的角度270   扇形
ShapeDrawable drawable = new ShapeDrawable(arcShape);
drawable.getPaint().setColor(Color.RED);
drawable.getPaint().setStyle(Paint.Style.FILL);

// Bitmap bitmap =  ((BitmapDrawable)getResources().getDrawable(R.drawable.aa)).getBitmap();
// BitmapShader bitmapShader = new BitmapShader(bitmap, Shader.TileMode.MIRROR, Shader
//                .TileMode.REPEAT);
// Matrix matrix = new Matrix();
// matrix.preScale(600.00f / bitmap.getWidth(), 600.00f / bitmap.getHeight());//view:w=600,h=600
// bitmapShader.setLocalMatrix(matrix);
// drawable.getPaint().setShader(bitmapShader);

view.setBackgroundDrawable(drawable);

 扇形图

 结合BitmapShader

PathShape

Path path = new Path();
path.moveTo(50, 0);
path.lineTo(0, 50);
path.lineTo(50, 100);
path.lineTo(100, 50);
path.lineTo(50, 0);
PathShape pathShape = new PathShape(path, 200, 100);
ShapeDrawable drawable = new ShapeDrawable(pathShape);
drawable.getPaint().setColor(Color.RED);
drawable.getPaint().setStyle(Paint.Style.FILL);
imageView.setBackgroundDrawable(drawable);

以Path路径对象,来设定图形。

PathShape的构造函数:PathShape(path, stdWidth, stdHeight);

stdWidth:标准宽度

stdHeight:标准高度

在构造PathShape对象时,设置了宽高的标准。内部函数

protected void onResize(float width, float height) {
    mScaleX = width / mStdWidth;
    mScaleY = height / mStdHeight;
}

public void draw(Canvas canvas, Paint paint) {
    canvas.save();
    canvas.scale(mScaleX, mScaleY);
    canvas.drawPath(mPath, paint);
    canvas.restore();
}

Shape基类中有函数 resize(),其中调用了onResize();ShapeDrawable中会调用resize()。

有了设定的标准宽高,再算出实际宽高与标准宽高的比率,最后在绘制时,画布canvas缩放。

造成的效果: path中的(x,y)坐标值 乘以 比率值,即是 最终呈现出的坐标值(实际内部是缩放的canvas)

比如,这里view的 w=400, h=400

如果标准宽高都等于400,那么canvas最终不缩放,即1:1。

PathShape pathShape = new PathShape(path, 400, 400);

  stdx=400, stdy=400

PathShape pathShape = new PathShape(path, 100, 100);

 stdx=100, stdy=100

PathShape pathShape = new PathShape(path, 200, 100);

 stdx=200, stdy=100

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-11-14 01:10:56

Android Shape 形状的相关文章

Android实例-手机安全卫士(二十)-使用shape形状,自定义组件边框、形状等

一.目标. 1.实现文本组件的点击事件. 2.实现组件(TextView等)以形状(圆角矩形.椭圆.圆环等)显示,也可为其增加自定义边框.渐变等属性.并可以与样式组合,可实现默认.按下等过程显示不同的形状. 默认:  按下: 二.代码实现. 1.TextView对象带有点击事件,需对clickable属性设为true,并取名点击事件名称,即onclick属性值为resetWizard. 2.在手机防盗界面实现点击事件处理,(即重新进入”设置向导“界面) 点击事件处理代码; //重新进入防盗设置向

Android shape自定义形状,设置渐变色

  <?xml version="1.0" encoding="utf-8"?> <!-- android:shape=["rectangle" | "oval" | "line" | "ring"] shape的形状,默认为矩形,可以设置为矩形(rectangle).椭圆形(oval).线性形状(line).环形(ring) 下面的属性只有在android:shape

Android按钮shape形状资源代码实现

1.项目Src下创建drawable 看文档Develop/API Guides/App Resources/Drawable/Shape Drawable 单词:corners : 角  ;  gradient :梯度: solid:固定的: stroke: 边框--可以做下划线 Rectangle : 矩形:dash :破折号 gap:间隙: 2.拷贝实例代码,文件命名(gradient_box.xml,下面是模版) <?xml version="1.0" encoding=

android shape的使用(转)

在Android程序开发中,我们经常会去用到Shape这个东西去定义各种各样的形状. shape用于设定形状,可以在selector,layout等里面使用,有6个子标签,各属性如下: <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape=&quo

Android shape的xml文件

Android shape的xml文件可以写不同形状.背景.边框.圆角等等效果,可以代替不少. 9图片的使用,缩小资源文件的大小.下面看一下shape可以包含的内容有哪些. 1 <?xml version="1.0" encoding="utf-8"?> 2 <shape 3 xmlns:android="http://schemas.android.com/apk/res/android" 4 android:shape=[&

android shape.xml 属性详解

转载源:http://blog.csdn.net/harvic880925/article/details/41850723 一.简单使用 刚开始,就先不讲一堆标签的意义及用法,先简单看看shape标签怎么用. 1.新建shape文件 首先在res/drawable文件夹下,新建一个文件,命名为:shape_radius.xml 内容是这样的:(先不需要理解,先看shape怎么用) [html] view plaincopy <?xml version="1.0" encodin

Android shape 属性介绍

前言 欢迎大家我分享和推荐好用的代码段~~ 声明          欢迎转载,但请保留文章原始出处: CSDN:http://www.csdn.net 雨季o莫忧离:http://blog.csdn.net/luckkof 正文 <?xml version="1.0" encoding="utf-8"?> <!-- shape drawable xml文件中定义的一个几何图形,定义在res/drawable/目录下,文件名filename称为访问的

android shape(如自定义Button)

Shape 前言:有时候会去自己去画一些Button的样式来展现在UI当中,其中主要用到的就是Shape 先来看一段代码: 1 <?xml version="1.0" encoding="utf-8"?> 2 <shape xmlns:android="http://schemas.android.com/apk/res/android" 3 android:shape="rectangle" > 4

android shape详解

shape--> shape属性: rectangle: 矩形,默认的形状,可以画出直角矩形.圆角矩形.弧形等 solid: 设置形状填充的颜色,只有android:color一个属性 android:color 填充的颜色 padding: 设置内容与形状边界的内间距,可分别设置左右上下的距离 一:  rectangle: solid: 设置形状填充的颜色,只有android:color一个属性 android:color 填充的颜色 padding: 设置内容与形状边界的内间距,可分别设置左