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

[java] view plain copy print ?
  1. RectShaperectShape=newRectShape();
  2. ShapeDrawabledrawable=newShapeDrawable(rectShape);
  3. drawable.getPaint().setColor(Color.RED);
  4. drawable.getPaint().setStyle(Paint.Style.FILL);//填充
  5. view.setBackgroundDrawable(drawable);

矩形


RoundRectShape

[java] view plain copy print ?
  1. float[]outerRadii={20,20,40,40,60,60,80,80};//外矩形左上、右上、右下、左下圆角半径
  2. //float[]outerRadii={20,20,20,20,20,20,20,20};//外矩形左上、右上、右下、左下圆角半径
  3. RectFinset=newRectF(100,100,200,200);//内矩形距外矩形,左上角x,y距离,右下角x,y距离
  4. float[]innerRadii={20,20,20,20,20,20,20,20};//内矩形圆角半径
  5. //RoundRectShaperoundRectShape=newRoundRectShape(outerRadii,inset,innerRadii);
  6. RoundRectShaperoundRectShape=newRoundRectShape(outerRadii,null,innerRadii);//无内矩形
  7. ShapeDrawabledrawable=newShapeDrawable(roundRectShape);
  8. drawable.getPaint().setColor(Color.MAGENTA);
  9. drawable.getPaint().setAntiAlias(true);
  10. drawable.getPaint().setStyle(Paint.Style.STROKE);//描边
  11. view.setBackground(drawable);

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


OvalShape

[java] view plain copy print ?
  1. OvalShapeovalShape=newOvalShape();
  2. ShapeDrawabledrawable=newShapeDrawable(ovalShape);
  3. drawable.getPaint().setColor(Color.RED);
  4. drawable.getPaint().setStyle(Paint.Style.FILL_AND_STROKE);
  5. view.setBackgroundDrawable(drawable);

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


ArcShape

[java] view plain copy print ?
  1. ArcShapearcShape=newArcShape(45,270);//顺时针开始角度45,扫描的角度270扇形
  2. ShapeDrawabledrawable=newShapeDrawable(arcShape);
  3. drawable.getPaint().setColor(Color.RED);
  4. drawable.getPaint().setStyle(Paint.Style.FILL);
  5. //Bitmapbitmap=((BitmapDrawable)getResources().getDrawable(R.drawable.aa)).getBitmap();
  6. //BitmapShaderbitmapShader=newBitmapShader(bitmap,Shader.TileMode.MIRROR,Shader
  7. //.TileMode.REPEAT);
  8. //Matrixmatrix=newMatrix();
  9. //matrix.preScale(600.00f/bitmap.getWidth(),600.00f/bitmap.getHeight());//view:w=600,h=600
  10. //bitmapShader.setLocalMatrix(matrix);
  11. //drawable.getPaint().setShader(bitmapShader);
  12. view.setBackgroundDrawable(drawable);

扇形图

结合BitmapShader


PathShape

[java] view plain copy print ?
  1. Pathpath=newPath();
  2. path.moveTo(50,0);
  3. path.lineTo(0,50);
  4. path.lineTo(50,100);
  5. path.lineTo(100,50);
  6. path.lineTo(50,0);
  7. PathShapepathShape=newPathShape(path,200,100);
  8. ShapeDrawabledrawable=newShapeDrawable(pathShape);
  9. drawable.getPaint().setColor(Color.RED);
  10. drawable.getPaint().setStyle(Paint.Style.FILL);
  11. imageView.setBackgroundDrawable(drawable);

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

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

stdWidth:标准宽度

stdHeight:标准高度

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

[java] view plain copy print ?
  1. protectedvoidonResize(floatwidth,floatheight){
  2. mScaleX=width/mStdWidth;
  3. mScaleY=height/mStdHeight;
  4. }
  5. publicvoiddraw(Canvascanvas,Paintpaint){
  6. canvas.save();
  7. canvas.scale(mScaleX,mScaleY);
  8. canvas.drawPath(mPath,paint);
  9. canvas.restore();
  10. }
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


更多相关文章

  1. 图片下载工具类,可更新UI
  2. 仿抖音视频详情页的红心点赞动效
  3. Webview中所调网页的缩放
  4. WebView的使用(基本篇)
  5. 使用Vitamio打造自己的Android万能播放器(2)—— 手势控制亮度、音
  6. Android(安卓)图片缩放 BitmapFactory详解
  7. android中自定义WebView显示网页或本地html文件
  8. android手写签名遇见bitmap黑屏和本地html插入签名图片
  9. Android(安卓)GestureDetector ScaleGestureDetector

随机推荐

  1. Android 调试机制
  2. java Android SDK安装与环境变量配置以及
  3. Android JNI使用笔记
  4. Android(安卓)ListView 获取网络上的数据
  5. Android手机app启动的时候第一个Activity
  6. Android应用开发基础之数据存储和界面展
  7. mac os 下搭建android eclipse 开发环境
  8. ContentProvider介绍---电话本
  9. android实现页面黑白色
  10. 一个Android项目代码该怎么看