android 画图.docx
- 文档编号:8836954
- 上传时间:2023-05-15
- 格式:DOCX
- 页数:42
- 大小:61.43KB
android 画图.docx
《android 画图.docx》由会员分享,可在线阅读,更多相关《android 画图.docx(42页珍藏版)》请在冰点文库上搜索。
android画图
android画图—-ShapeDrawable和shader
此条目发表在Android开发文档分类目录,贴了Android,android画图,bitmap,Drawable,Shader,shape标签。
将固定链接加入收藏夹。
Androidandroid画图bitmapDrawableShadershape
在这个例程中主要讲述了ShapeDrawable,以及各种Gradient
首先初始化了mDrawables=newShapeDrawable[7];默认的是矩形,
当然还有其他形状:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
mDrawables[0]=newShapeDrawable(newRectShape());
mDrawables[1]=newShapeDrawable(newOvalShape());
mDrawables[4]=newShapeDrawable(newRoundRectShape(outerR,inset,
innerR));
mDrawables[5]=newShapeDrawable(newPathShape(path,100,100));
float[]outerR=newfloat[]{12,12,12,12,0,0,0,0};
RectFinset=newRectF(20,20,20,20);
float[]innerR=newfloat[]{12,12,0,0,12,12,0,0};
Pathpath=newPath();
path.moveTo(50,0);
path.lineTo(0,50);
path.lineTo(50,100);
path.lineTo(100,50);
path.close();
实例化ShapeDrawable后就可以对他们进行设置:
设置渐变
1
mDrawables[0].getPaint().setShader(makeTiling());
设置颜色
1
mDrawables[1].getPaint().setColor(0xFF00FF00);
设置影响影响呢有很多可以设置单个也可以用组合
1
2
3
4
PathEffectpe=newDiscretePathEffect(10,2);
PathEffectpe2=newCornerPathEffect(8);
mDrawables[3].getPaint().setPathEffect(
newSumPathEffect(pe2,pe));
其中渐变又包括:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
privatestaticShadermakeSweep(){
returnnewSweepGradient(150,25,newint[]{0xFFFF0000,0xFF00FF00,0xFF0000FF,0xFFFF0000},null);
//returnnewSweepGradient(150,25,newint[]{0xFFFF0000,0xFF00FF00,0xFF0000FF},newfloat[]{0.9f,0.1f,0.9f});
}
privatestaticShadermakeLinear(){
returnnewLinearGradient(0,0,50,50,
newint[]{0xFFFF0000,0xFF00FF00,0xFF0000FF},
null,Shader.TileMode.REPEAT);
}
privateShadermakeTiling(){
int[]pixels=newint[]{0xFFFF0000,0xFF00FF00,0xFF0000FF,0};
Bitmapbm=Bitmap.createBitmap(pixels,2,2,Bitmap.Config.ARGB_8888);
//Bitmapbm=Bitmap.createBitmap(mBitmap,60,45,Bitmap.Config.ARGB_8888);
returnnewBitmapShader(bm,Shader.TileMode.REPEAT,
Shader.TileMode.REPEAT);
}
最后在这个实例中可以自定义一个ShapeDrawable
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
privatestaticclassMyShapeDrawableextendsShapeDrawable{
privatePaintmStrokePaint=newPaint(Paint.LINEAR_TEXT_FLAG);
publicMyShapeDrawable(Shapes){
super(s);
mStrokePaint.setStyle(Paint.Style.STROKE);
mStrokePaint.setColor(Color.GREEN);
}
publicPaintgetStrokePaint(){
returnmStrokePaint;
}
@OverrideprotectedvoidonDraw(Shapes,Canvasc,Paintp){
//第一个调用父类的p,第二个调用自己刚才设置的p,如果你不想使用默认的父类,默认的颜色为黑了
s.draw(c,p);
s.draw(c,mStrokePaint);
}
mDrawables[6]=newMyShapeDrawable(newArcShape(45,360));
MyShapeDrawablemsd=(MyShapeDrawable)mDrawables[6];
msd.getStrokePaint().setStrokeWidth
(1);
}
原文作者:
wang_peng1
原文链接:
http:
//wang-
android画图----ShapeDrawable和shader
博客分类:
∙android
Android360CC++C#
在这个例程中主要讲述了ShapeDrawable,以及各种Gradient
首先初始化了mDrawables=newShapeDrawable[7];默认的是矩形,
当然还有其他形状:
mDrawables[0]=newShapeDrawable(newRectShape());
mDrawables[1]=newShapeDrawable(newOvalShape());
mDrawables[4]=newShapeDrawable(newRoundRectShape(outerR,inset,
innerR));
mDrawables[5]=newShapeDrawable(newPathShape(path,100,100));
float[]outerR=newfloat[]{12,12,12,12,0,0,0,0};
RectF inset=newRectF(20,20,20,20);
float[]innerR=newfloat[]{12,12,0,0,12,12,0,0};
Pathpath=newPath();
path.moveTo(50,0);
path.lineTo(0,50);
path.lineTo(50,100);
path.lineTo(100,50);
path.close();
实例化ShapeDrawable后就可以对他们进行设置:
设置渐变
mDrawables[0].getPaint().setShader(makeTiling());
设置颜色
mDrawables[1].getPaint().setColor(0xFF00FF00);
设置影响影响呢有很多可以设置单个也可以用组合
PathEffectpe=newDiscretePathEffect(10,2);
PathEffectpe2=newCornerPathEffect(8);
mDrawables[3].getPaint().setPathEffect(
newSumPathEffect(pe2,pe));
其中渐变又包括:
privatestaticShadermakeSweep(){
returnnewSweepGradient(150,25,newint[]{0xFFFF0000,0xFF00FF00,0xFF0000FF,0xFFFF0000},null);
//returnnewSweepGradient(150,25,newint[]{0xFFFF0000,0xFF00FF00,0xFF0000FF},newfloat[]{0.9f,0.1f,0.9f});
}
privatestaticShadermakeLinear(){
returnnewLinearGradient(0,0,50,50,
newint[]{0xFFFF0000,0xFF00FF00,0xFF0000FF},
null,Shader.TileMode.REPEAT);
}
private ShadermakeTiling(){
int[]pixels=newint[]{0xFFFF0000,0xFF00FF00,0xFF0000FF,0};
Bitmapbm=Bitmap.createBitmap(pixels,2,2, Bitmap.Config.ARGB_8888);
//Bitmapbm=Bitmap.createBitmap(mBitmap,60,45, Bitmap.Config.ARGB_8888);
returnnewBitmapShader(bm,Shader.TileMode.REPEAT,
Shader.TileMode.REPEAT);
}
最后在这个实例中可以自定义一个ShapeDrawable
privatestaticclassMyShapeDrawableextendsShapeDrawable{
privatePaintmStrokePaint=newPaint(Paint.LINEAR_TEXT_FLAG);
publicMyShapeDrawable(Shapes){
super(s);
mStrokePaint.setStyle(Paint.Style.STROKE);
mStrokePaint.setColor(Color.GREEN);
}
publicPaintgetStrokePaint(){
returnmStrokePaint;
}
@OverrideprotectedvoidonDraw(Shapes,Canvasc,Paintp){
//第一个调用父类的p,第二个调用自己刚才设置的p,如果你不想使用默认的父类,默认的颜色为黑了
s.draw(c,p);
s.draw(c,mStrokePaint);
}
mDrawables[6]=newMyShapeDrawable(newArcShape(45,360));
MyShapeDrawablemsd=(MyShapeDrawable)mDrawables[6];
msd.getStrokePaint().setStrokeWidth
(1);
}
android画图–切割区域
此条目发表在Android开发文档分类目录,贴了Android,android画图,draw,region标签。
将固定链接加入收藏夹。
Androidandroid画图drawregion
android切割画布的历程不算很难,可是理解起来也比较麻烦,这里写一下我的理解但是不一定正确:
canvas.clipRect(30,30,70,70,Region.Op.XOR);最后一个参数有多个选择分别是:
//DIFFERENCE是第一次不同于第二次的部分显示出来
//REPLACE是显示第二次的
//REVERSE_DIFFERENCE是第二次不同于第一次的部分显示
//INTERSECT交集显示
//UNION全部显示
//XOR补集就是全集的减去交集生育部分显示
首先还是继承一个view,在构造函数里面初始化一个画笔笔宽为6文本大小16文本对齐方式居右。
1
2
3
4
5
6
7
mPaint=newPaint();
mPaint.setAntiAlias(true);
mPaint.setStrokeWidth(6);
mPaint.setTextSize(16);
mPaint.setTextAlign(Paint.Align.RIGHT);
mPath=newPath();
而在接口onDraw中画了好几个图,每个图都进行了裁剪
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
@OverrideprotectedvoidonDraw(Canvascanvas){
canvas.drawColor(Color.GRAY);
//用来在一个独有的栈中保存数据
canvas.save();
canvas.translate(10,10);
drawScene(canvas);
//用来清空栈中所有的数据
canvas.restore();
canvas.save();
canvas.translate(160,10);
canvas.clipRect(10,10,90,90);
canvas.clipRect(30,30,70,70,Region.Op.XOR);
drawScene(canvas);
canvas.restore();
canvas.save();
canvas.translate(10,160);
mPath.reset();
canvas.clipPath(mPath);//makestheclipempty
mPath.addCircle(50,50,50,Path.Direction.CCW);
canvas.clipPath(mPath,Region.Op.REPLACE);
drawScene(canvas);
canvas.restore();
canvas.save();
canvas.translate(160,160);
canvas.clipRect(0,0,60,60);
canvas.clipRect(40,40,100,100,Region.Op.UNION);
drawScene(canvas);
canvas.restore();
canvas.save();
canvas.translate(10,310);
canvas.clipRect(0,0,60,60);
canvas.clipRect(40,40,100,100,Region.Op.XOR);
drawScene(canvas);
canvas.restore();
canvas.save();
canvas.translate(160,310);
canvas.clipRect(0,0,60,60);
canvas.clipRect(40,40,100,100,Region.Op.REVERSE_DIFFERENCE);
drawScene(canvas);
canvas.restore();
}
//建立了一个方法,用于显示所画出的效果
privatevoiddrawScene(Canvascanvas){
canvas.clipRect(0,0,100,100);
canvas.drawColor(Color.WHITE);
mPaint.setColor(Color.RED);
canvas.drawLine(0,0,100,100,mPaint);
mPaint.setColor(Color.GREEN);
canvas.drawCircle(30,70,30,mPaint);
mPaint.setColor(Color.BLUE);
canvas.drawText("Clipping",100,30,mPaint);
}
android画图—–shape的使用
此条目发表在Android开发文档分类目录,贴了Android,android画图,draw,shape标签。
将固定链接加入收藏夹。
Androidandroid画图drawshape
在GradientDrawable1试图中终于把shape学会了,以前总是似懂非懂,现在终于把里面的东西搞清楚了,同时也挺佩服谷歌的用心,故意设置一些陷阱吧,不认真对待还真以为没有啥效果呢。
setContentView(R.layout.shape_drawable_1)
shape_drawable_1代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
android=" android: layout_width="fill_parent" android: layout_height="wrap_content"> android: orientation="vertical" android: layout_width="fill_parent" android: layout_height="wrap_content"> android: layout_width="fill_parent" android: layout_height="50dip" android: src="@drawable/shape_1"/> android: layout_width="fill_parent" android: layout_height="50dip" android: src="@drawable/line"/> android: layout_width="fill_parent" android: layout_height="50dip" a
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- android 画图