Android中绘制常见的几何图形的代码清单(精)
android 绘制图形(线段,圆,矩形等)
android 绘制图形(线段,圆,矩形等)1. 创建一个你自己的MyView 让他继承 View类实现onDraw 方法 这是主要的。
Java代码1.packagecom.wljie;2.3.importandroid.content.Context;4.5.importandroid.graphics.Canvas;6.7.importandroid.graphics.Color;8.9.importandroid.graphics.Paint;10.11.importandroid.view.View;12.13.publicclassMyViewextendsView{14.15.publicMyView(Contextcontext){16.17.super(context);18.19.//TODOAuto-generatedconstructorstub20.21.}22.23.@Override24.25.protectedvoidonDraw(Canvascanvas){26.27.super.onDraw(canvas);28.29.canvas.drawColor(Color.WHITE);30.31.Paintpaint=newPaint();//实例化paint类32.33.paint.setAntiAlias(true);//设置去锯齿34.35.paint.setColor(Color.RED);//设置paint的颜色是红色的36.37.paint.setStyle(Paint.Style.STROKE);//设置为空心的38.39.canvas.drawLine(0,0,100,100,paint);//划一条线段40.41.canvas.drawCircle(200,200,50,paint);//划一个空心圆42.43.}44.45.}2. 在activity 实例华这个类Java代码1.packagecom.wljie;2.3.importandroid.app.Activity;4.5.importandroid.graphics.Paint;6.7.importandroid.os.Bundle;8.9.importandroid.widget.Button;10.11.importandroid.widget.LinearLayout;12.13.publicclassMainextendsActivity{14.15./**Calledwhentheactivityisfirstcreated.*/16.17.18.@Override19.20.publicvoidonCreate(BundlesavedInstanceState){21.22.super.onCreate(savedInstanceState);23.24.//setContentView(yout.main);25.26.MyViewmyView=newMyView(this);27.28.setContentView(myView);29.30.}31.32.}图形的绘制在Android 中象图标的制作如:并行图,直方图用的比较多。
Android开发之Path类使用详解,自绘各种各样的图形!
Android开发之Path类使⽤详解,⾃绘各种各样的图形!玩过⾃定义View的⼩伙伴都知道,在View的绘制过程中,有⼀个类叫做Path,Path可以帮助我们实现很多⾃定义形状的View,特别是配合xfermode属性来使⽤的时候。
OK,那我们今天就来看看Path中那⼏个常⽤的API。
1.moveTomoveTo表⽰将绘制点移动到某⼀个坐标处,该⽅法并不会进⾏绘制,主要是⽤来移动画笔。
默认情况下起始坐标位于(0,0)点,我们可以⼿动调整默认位置。
2.lineTolineTo表⽰绘制⼀条直线,参数表⽰⽬标坐标如下:@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);Path path = new Path();path.lineTo(getResources().getDimensionPixelSize(R.dimen.dot1x),getResources().getDimensionPixelSize(R.dimen.dot1x));canvas.drawPath(path, paint);}显⽰效果如下:默认情况下,起始点为(0,0)点,如果我⽤moveTo将起始点坐标移⾄(0,150),代码如下:@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);Path path = new Path();path.moveTo(0,getResources().getDimensionPixelSize(R.dimen.dot1x));path.lineTo(getResources().getDimensionPixelSize(R.dimen.dot1x),getResources().getDimensionPixelSize(R.dimen.dot1x));canvas.drawPath(path, paint);}3.quadToquadTo可以⽤来绘制⼀个带控制点的曲线,说⽩了,其实就是贝塞尔曲线。
常见绘图类型_Android开发案例教程与项目实战(在线实验+在线自测)_[共4页]
Android开发案例教程与项目实战(在线实验+在线自测)250 drawRect():矩形。
drawRoundRect():圆角矩形。
drawArc():圆弧,三点钟方向为0°。
drawCircle():圆形。
通过Path这个类,可以画出三角形、梯形等多边形。
Path类可以预先在View上将N个点连成一条“路径”,然后调用Canvas的drawPath(path,paint)即可沿着路径绘制图形。
常用方法如下。
moveTo():设置地点。
lineTo():连接2点。
close():连接起点和终点。
9.1.2 常见绘图类型常见的绘制几何图形主要有点、直线、矩形、多边形、弧形、圆、文字、位图等。
在Andriod中可以通过Canvas提供的各种方法进行绘制上面的集合图形。
下面分别列出绘制不同类型的几何图形的方法。
1.点的方法drawPoint(float x,float y,Paint paint)方法用于在指定点绘制一个点drawPoints(float [] pts,int offset,int count,Paint paint)方法用于从pts中的第offest个位置起选取count个元素作为多个点的坐标,因此count为偶数,当count为基数时,将忽略最后一个元素。
drawPoints(float [] pts,Paint paint)方法是drawPoints()的重载方法,所有坐标都将参与绘制过程。
2.直线的方法drawLine(float startx,float starty,loatstopx,float stopy,Paint paint)方法用于在点(startx,starty)和点(stopx,stopy)之间绘制一条直线。
drawLines(float [] pts,int offset,int count,Paint paint)方法定义类似于drawPoints()方法。
Android 真正的3D图形(三)
Android 真正的3D图形(三)Cube下面来定义一个正方体(Cube),为简单起见,这个四面体只可以设置宽度,高度,和深度,没有和Plane一样提供Segments支持。
Java代码:1.Java代码1.publicclassCubeextendsMesh{2.publicCube(floatwidth,floatheight,floatdepth){3.width/=2;4.height/=2;5.depth/=2;6.7.floatvertices[]={-width,-height,-depth,//08.width,-height,-depth,//19.width,height,-depth,//210.-width,height,-depth,//311.-width,-height,depth,//412.width,-height,depth,//513.width,height,depth,//614.-width,height,depth,//715.};16.17.shortindices[]={0,4,5,18.0,5,1,19.1,5,6,20.1,6,2,21.2,6,7,22.2,7,3,23.3,7,4,24.3,4,0,25.4,7,6,26.4,6,5,27.3,0,1,28.3,1,2,};29.30.setIndices(indices);31.setVertices(vertices);32.}33.}GroupGroup可以用来管理多个空间几何形体,如果把Mesh比作Android的View ,Group可以看作Android的ViewGroup,Android的View的设计也是采用的“Composite Pattern”。
Group的主要功能是把针对Group的操作(如draw)分发到Group中的每个成员对应的操作(如draw)。
Group定义如下:java代码:Java代码1.publicclassGroupextendsMesh{2.privateVectorchildren=newVector();3.4.@Override5.publicvoiddraw(GL10gl){6.intsize=children.size();7.for(inti=0;i<size;i++)8.children.get(i).draw(gl);9.}10.11./**12.*@paramlocation13.*@paramobject14.*@seejava.util.Vector#add(int,ng.Object)15.*/16.publicvoidadd(intlocation,Meshobject){17.children.add(location,object);18.}19.20./**21.*@paramobject22.*@return23.*@seejava.util.Vector#add(ng.Object)24.*/25.publicbooleanadd(Meshobject){26.returnchildren.add(object);27.}28.29./**30.*31.*@seejava.util.Vector#clear()32.*/33.publicvoidclear(){34.children.clear();35.}36.37./**38.*@paramlocation39.*@return40.*@seejava.util.Vector#get(int)41.*/42.publicMeshget(intlocation){43.returnchildren.get(location);44.}45.46./**47.*@paramlocation48.*@return49.*@seejava.util.Vector#remove(int)50.*/51.publicMeshremove(intlocation){52.returnchildren.remove(location);53.}54.55./**56.*@paramobject57.*@return58.*@seejava.util.Vector#remove(ng.Object)59.*/60.publicbooleanremove(Objectobject){61.returnchildren.remove(object);62.}63.64./**65.*@return66.*@seejava.util.Vector#size()67.*/68.publicintsize(){69.returnchildren.size();70.}71.72.}。
Android中绘制常见的几何图形任务要求(精)
1 / 1
Android 中绘制常见的几何图形任务要求 Android 中绘制常见的几何图形任务要求
范美英
(北京信息职业技术学院)
摘 要:在Android 中可以自定义视图。
本文简要介绍了绘制常见的几何图形(如三角形、圆和矩形)教学案例的任务要求。
关键词: Android ;自定义视图;几何图形
完成如图所示的应用程序,要求:
① 在Android 中使用canvas 的drawXXX 方法绘制常见的几何图形,并将这些图形依次竖直方向排列在界面中。
② 三个几何图形分别定义在三个不同的视图类中,类名分别是Triangle 、Rectangle 和Circle 。
绘制几何图形的运行效果示意图
参考文献(资源)
[1]范美英.Android 移动应用开发案例教程[M].北京:机械工业出版社,2015.。
Android利用canvas画各种图形(点、直线、弧、圆、椭圆、文字、矩形、多边形、曲线、圆角矩形)
Android利用canvas画各种图形(点、直线、弧、圆、椭圆、文字、矩形、多边形、曲线、圆角矩形)标签:图形androidpathfloatclass2012-01-20 20:02 151861人阅读评论(64) 收藏举报分类:android(12)版权声明:本文为博主原创文章,未经博主允许不得转载。
目录(?)[+] 1、首先说一下canvas类:Class OverviewThe Canvas class holds the "draw" calls. To draw something, you need 4 basic components: A Bitmap to hold the pixels, a Canvas to host the draw calls (writing into the bitmap), a drawing primitive (e.g. Rect, Path, text, Bitmap), and a paint (to describe the colors and styles for the drawing).这个类相当于一个画布,你可以在里面画很多东西;我们可以把这个Canvas理解成系统提供给我们的一块内存区域(但实际上它只是一套画图的API,真正的内存是下面的Bitmap),而且它还提供了一整套对这个内存区域进行操作的方法,所有的这些操作都是画图API。
也就是说在这种方式下我们已经能一笔一划或者使用Graphic来画我们所需要的东西了,要画什么要显示什么都由我们自己控制。
这种方式根据环境还分为两种:一种就是使用普通View的canvas画图,还有一种就是使用专门的SurfaceView的canvas来画图。
两种的主要是区别就是可以在SurfaceView中定义一个专门的线程来完成画图工作,应用程序不需要等待View的刷图,提高性能。
Andriod 绘制图形 、Canvas、Paint、Color、Typeface、Path、RectF、Point、绘制几何图形
Andriod绘制图形android.graphics包是核心渲染包,它提供了一些初级图形工具,诸如画布、颜色过滤器、画笔等,可以让你直接在屏幕上进行图像处理。
这个包中提供了很多类,下面我们就看一下这个包中主要的几个类。
一、Canvas类android.graphics.CanvasCanvas类好比手机中的画纸,我们可以在Canvas上画图形或者图像。
一般我们用android来绘画的时候,需要四个组成部分:1、位图:包含像素2、Canvas画板:包含绘画内容,写入位图3、初始图形:如Rect、Bitmap、text等4、Paint:用来描述上面初始图形的颜色和类型等Canvas类提供了三个构造方法:Public Canvas();构造一个默认无参的Canvas对象Public Canvas(Bitmap bitmap);根据一个Bitmap构造一个Canvas对象Public Canvas(GL gl);根据一个GL来构造一个对象下面我们来了解一下Canvas类提供的方法:在Canvas类提供的方法中比较多经常用的是以draw开头的方法,draw开头的方法很容易理解就是向画板中画图形,比如可以向Canvas中画位图,给图形填充颜色等。
比如方法:drawArc(RectF oval, float startAngle, float sweepAngle, boolean useCenter, Paint paint)画弧形drawCircle(float cx, float cy, float radius, Paint paint)画圆形Canvas类提供的方法比较多,在此我们不一一赘述,在后面的内容中,我将给大家举几个实际的应用程序例子来演示Canvas类的使用方法。
二、Paint类android.graphics.PaintPaint类包含有用来画几何图形、文本、位图的类型和颜色等信息,如果把Canvas类看作是画板,那我们可以把Paint类看做是画笔,可以根据需要画出不同颜色和样式的图形、文本等内容。
Android开发实现各种图形绘制功能示例
Android开发实现各种图形绘制功能⽰例本⽂实例讲述了Android开发实现各种图形绘制功能。
分享给⼤家供⼤家参考,具体如下:这⾥结合本⼈的开发事例,简单介绍⼀下如何在Android平台下实现各种图形的绘制。
⾸先⾃定义⼀个View类,这个view类⾥⾯需要⼀个Paint对象来控制图形的属性,需要⼀个Path对象来记录图形绘制的路径,需要⼀个Canvas类来执⾏绘图操作,还需要⼀个Bitmap类来盛放绘画的结果。
Paint mPaint = new Paint();mPaint.setAntiAlias(true);mPaint.setColor(0xFFFF0000);mPaint.setStyle(Paint.Style.STROKE);mPaint.setStrokeWidth(12);以上代码初始化了Paint对象,设置了画笔的颜⾊、类型和粗细。
BitmapmForeBitmap = Bitmap.createBitmap(mWidth, mHeight, Bitmap.Config.ARGB_8888);CanvasmCanvas = new Canvas(mForeBitmap);PathmPath = new Path();以上代码创建了⼀个Bitmap对象,并将他作为参数传给了Canvas对象,同时初始化Path对象。
想让View响应⽤户的触摸事件,需要实现View类的onTouchEvent函数,代码如下:@Overridepublic boolean onTouchEvent(MotionEvent event) {float x = event.getX();float y = event.getY();switch (event.getAction()) {case MotionEvent.ACTION_DOWN:touch_start(x, y);invalidate();break;case MotionEvent.ACTION_MOVE:touch_move(x, y);invalidate();break;case MotionEvent.ACTION_UP:touch_up();invalidate();break;}return true;}其中touch_start,touch_move和touch_up函数分别处理按下,移动和抬起事件,函数的实现将在后⾯介绍,invalidate函数会调⽤onDraw函数保证绘图效果实时显⽰出来。
android画虚线、实线,画圆角矩形,一半圆角
android 画虚线、实线,画圆角矩形,一半圆角建立dotted_line_gray.xml文件放在drawable文件夹下面。
android:shape="line" 可以修改你想要的形状<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="/apk/res/android"android:shape="line"><!-- 显示一条虚线,破折线的宽度为dashWith,破折线之间的空隙的宽度为dashGap,当dashGap=0dp时,为实线 --><stroke android:width="1dp" android:color="#D5D5D5"android:dashWidth="2dp" android:dashGap="3dp" /><!-- 虚线的高度--><size android:height="2dp" /></shape>然后在布局的xml里面:作为ImageView或者Linearlayout等作为背景源就可以了。
<LinearLayoutandroid:id="@+id/activity_line"android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_marginLeft="5dip"android:layout_marginRight="5dip"android:background="@drawable/dotted_line_gray" />---------2、画圆角矩形建立rect_gray.xml文件放在drawable文件夹下面。
Android简单实现画图功能
Android简单实现画图功能如何在图⽚上画画呢?这⾥写了⼀个demo,供⼤家参考⼀、先看⼀眼⼯程结构⼯程结构:⼆、⾃定义view这个⾃定义view实现了保留轨迹的功能,代码如下package picturegame.view;import android.content.Context;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.Paint.Style;import android.util.AttributeSet;import android.view.MotionEvent;import android.view.View;import com.winton.picturegame.R;public class GameView extends View{private Paint paint = null; //private Bitmap originalBitmap = null;//原始图private Bitmap new1Bitmap = null;private Bitmap new2Bitmap = null;private float clickX =0;private float clickY=0;private float startX=0;private float startY=0;private boolean isMove = true;private boolean isClear = false;private int color =Color.RED;//默认画笔颜⾊为红⾊private float strokeWidth =2.0f;//默认画笔粗度public GameView(Context context) {this(context,null);// TODO Auto-generated constructor stub}public GameView(Context context,AttributeSet atts) {this(context,atts,0);// TODO Auto-generated constructor stub}public GameView(Context context,AttributeSet atts,int defStyle) {super(context,atts,defStyle);// TODO Auto-generated constructor stuboriginalBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.default_pic).copy(Bitmap.Config.ARGB_8888, true);//加载⼀张背景 new1Bitmap=originalBitmap.createBitmap(originalBitmap);}//清除函数public void clear(){isClear =true;new2Bitmap=originalBitmap.createBitmap(originalBitmap);invalidate();//重载}public void setStrokeWidth(float width){this.strokeWidth=width;initPaint();}@Overrideprotected void onDraw(Canvas canvas) {// TODO Auto-generated method stubsuper.onDraw(canvas);canvas.drawBitmap(writer(new1Bitmap),0,0, null);}@Overridepublic boolean onTouchEvent(MotionEvent event) {// TODO Auto-generated method stubclickX =event.getX();clickY=event.getY();if(event.getAction()==MotionEvent.ACTION_DOWN){isMove =false;invalidate();return true;}else if(event.getAction()==MotionEvent.ACTION_MOVE){ isMove =true;invalidate();return true;}return super.onTouchEvent(event);}/*** @Title: writer* @Description: TODO(⽣成bitmap)* @param @param pic* @param @return 设定⽂件* @return Bitmap 返回类型* @throws*/public Bitmap writer(Bitmap pic){initPaint();Canvas canvas =null;if(isClear){canvas=new Canvas(new2Bitmap);}else{canvas=new Canvas(pic);}if(isMove){canvas.drawLine(startX, startY, clickX, clickY, paint);//划线 }startX = clickX;startY =clickY;if(isClear){return new2Bitmap;}return pic;}private void initPaint(){paint = new Paint();//新建画笔paint.setStyle(Style.STROKE);//设置为画线paint.setAntiAlias(true);//可以让线条圆滑⼀些paint.setColor(color);//设置画笔颜⾊paint.setStrokeWidth(strokeWidth);//设置画笔线条的粗细}/*** @Title: setColor* @Description: TODO(设置线条颜⾊的对外接⼝)* @param @param color 设定⽂件* @return void 返回类型* @throws*/public void setColor(int color){this.color=color;initPaint();}}三、主页⾯布局⽂件主页⾯布局⽂件<LinearLayout xmlns:android="/apk/res/android" android:layout_width="fill_parent"android:layout_height="fill_parent"android:gravity="center_horizontal"android:orientation="vertical" ><LinearLayoutandroid:layout_width="match_parent"android:layout_height="50dp"android:orientation="horizontal"><LinearLayoutandroid:layout_width="0dp"android:layout_height="match_parent"android:layout_weight="1"android:gravity="center"><TextViewandroid:id="@+id/tv_30"android:layout_width="30dp"android:layout_height="30dp"android:background="@drawable/bg_notifaction"/></LinearLayout><LinearLayoutandroid:layout_width="0dp"android:layout_height="match_parent"android:layout_weight="1"android:gravity="center"><TextViewandroid:id="@+id/tv_25"android:layout_width="25dp"android:layout_height="25dp"android:background="@drawable/bg_notifaction"/></LinearLayout><LinearLayoutandroid:layout_width="0dp"android:layout_height="match_parent"android:layout_weight="1"android:gravity="center"><TextViewandroid:id="@+id/tv_20"android:layout_width="20dp"android:layout_height="20dp"android:background="@drawable/bg_notifaction"/></LinearLayout><LinearLayoutandroid:layout_width="0dp"android:layout_height="match_parent"android:layout_weight="1"android:gravity="center"><TextViewandroid:id="@+id/tv_15"android:layout_width="15dp"android:layout_height="15dp"android:background="@drawable/bg_notifaction" /></LinearLayout><LinearLayoutandroid:layout_width="0dp"android:layout_height="match_parent"android:layout_weight="1"android:gravity="center"><TextViewandroid:id="@+id/tv_10"android:layout_width="10dp"android:layout_height="10dp"android:background="@drawable/bg_notifaction" /></LinearLayout><LinearLayoutandroid:layout_width="0dp"android:layout_height="match_parent"android:layout_weight="1"android:gravity="center"><TextViewandroid:id="@+id/tv_5"android:layout_width="5dp"android:layout_height="5dp"android:background="@drawable/bg_notifaction" /></LinearLayout><LinearLayoutandroid:layout_width="0dp"android:layout_height="match_parent"android:layout_weight="1"android:gravity="center"><TextViewandroid:id="@+id/tv_2"android:layout_width="2dp"android:layout_height="2dp"android:background="@drawable/bg_notifaction" /></LinearLayout></LinearLayout><picturegame.view.GameViewandroid:layout_width="match_parent"android:layout_height="300dp"android:id="@+id/gameview"/><Buttonandroid:layout_width="200dp"android:layout_height="80dp"android:text="clear"android:textColor="@color/black"android:id="@+id/btn_clear"/></LinearLayout>四、主Activity代码package com.winton.picturegame;import picturegame.view.GameView;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.TextView;import com.winton.basemodule.BaseActivity;public class MainActivity extends BaseActivity implements OnClickListener { private GameView gameview = null;private Button clear = null;private TextView tv30,tv25,tv20,tv15,tv10,tv5,tv2;@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);}@Overridepublic void initView() {// TODO Auto-generated method stubsetContentView(yout.activity_main);gameview=(GameView)findViewById(R.id.gameview);clear =(Button)findViewById(R.id.btn_clear);tv30=(TextView)findViewById(_30);tv25=(TextView)findViewById(_25);tv20=(TextView)findViewById(_20);tv15=(TextView)findViewById(_15);tv10=(TextView)findViewById(_10);tv5=(TextView)findViewById(_5);tv2=(TextView)findViewById(_2);}@Overridepublic void initListener() {// TODO Auto-generated method stubclear.setOnClickListener(this);tv30.setOnClickListener(this);tv25.setOnClickListener(this);tv20.setOnClickListener(this);tv15.setOnClickListener(this);tv10.setOnClickListener(this);tv5.setOnClickListener(this);tv2.setOnClickListener(this);}@Overridepublic void initData() {// TODO Auto-generated method stub}@Overridepublic void onClick(View v) {// TODO Auto-generated method stubif(v==clear){gameview.clear();return;}if(v==tv30){gameview.setStrokeWidth(30f);return;}if(v==tv25){gameview.setStrokeWidth(25f);return;}if(v==tv20){gameview.setStrokeWidth(20f);return;}if(v==tv15){gameview.setStrokeWidth(15f);return;}if(v==tv10){gameview.setStrokeWidth(10f);return;}if(v==tv5){gameview.setStrokeWidth(5f);return;}if(v==tv2){gameview.setStrokeWidth(2f);return;}}}五、效果运⾏效果图如下六、疑问当线条变粗时,线条会出现如上图中不连续的问题。
android图形编写
android图形编写android中的图形图像-访问图片drawable一、如何获取res 中的资源数据包package:android.content.res主要类:Resources其主要接口按照功能,划分为以下三部分:getXXXX()例如:int getColor(int id)Drawable getDrawable(int id)String getString(int id) 直接获取res中存放的资源InputStream openRawResource(int id) 获取资源的数据流,读取资源数据void parseBundleExtras(XmlResourceParser parser, Bundle outBundle) 从XML文件中获取数据Resource为每种资源提供了相应的接口来获取这种资源,除了可以直接获取资源外,还额外提供了以数据流的方式获取资源,这在以后的应用程序开发中会经常使用,那么如何获取Resources了,如下:Resources r = this.getContext().getResources();二、如何获取资源中的画图对象数据包package:android.graphics.drawable主要类:DrawableDrawable是个virtual class,具体如何画图,需要具体分析Drawable的子类,例如:BitmapDrawable其主要接口如下:BitmapDrawable()BitmapDrawable(Bitmap bitmap)BitmapDrawable(String filepath)BitmapDrawable(InputStream is)void draw(Canvas canvas)final Bitmap getBitmap()final Paint getPaint()Drawable是个抽象类,在BitmapDrawable中我们就看到位图的具体操作,在仔细看下BitmapDrawable的构造函数,我们就会发现与Resource中的openRawResource()接口是相对应的,就可以通过以下方法来获取位图:Resources r = this.getContext().getResources(); Inputstream is =r.openRawResource(R.drawable.my_background_image);BitmapDrawable bmpDraw = new BitmapDrawable(is); Bitmap bmp = bmpDraw.getBitmap();Paint数据包package:android.graphicsAndroid SDK中的简介:The Paint class holds the style and color information about how to draw geometries, text and bitmaps. 主要就是定义:画刷的样式,画笔的大小/颜色等。
Android编程绘图操作之弧形绘制方法示例
Android编程绘图操作之弧形绘制⽅法⽰例本⽂实例讲述了Android编程绘图操作之弧形绘制⽅法。
分享给⼤家供⼤家参考,具体如下:/*** 绘制弧形图案* @description:* @author ldm* @date 2016-4-25 下午4:37:01*/public class ArcsActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(new SampleView(this));}/*** ⾃定义绘制图案的View** @description:* @author ldm* @date 2016-4-25 下午4:19:40*/private static class SampleView extends View {// 画圆形图案的画笔数组private Paint[] mPaints;// 画矩形的画笔private Paint mFramePaint;// 是否以矩形中⼼画图private boolean[] mUseCenters;// 矩形框数组private RectF[] mOvals;// 上⾯较⼤的矩形框private RectF mBigOval;// 画圆弧起点private float mStart;// 画圆弧⾓度private float mSweep;// 画⼤图形对应⾓标indexprivate int mBigIndex;// ⾓度变化增量private static final float ANGLE_STEP = 3;// 初始⾓度private static final float START_ANGLE = 15;public SampleView(Context context) {super(context);mPaints = new Paint[4];mUseCenters = new boolean[4];mOvals = new RectF[4];mPaints[0] = new Paint();mPaints[0].setAntiAlias(true);// 设置抗紧钜齿mPaints[0].setStyle(Paint.Style.FILL);// 设置画笔填充风格mPaints[0].setColor(0x88FF0000);// 设置颜⾊mUseCenters[0] = false;mPaints[1] = new Paint(mPaints[0]);mPaints[1].setColor(0x8800FF00);mUseCenters[1] = true;mPaints[2] = new Paint(mPaints[0]);mPaints[2].setStyle(Paint.Style.STROKE);// 设置画笔空⼼风格mPaints[2].setStrokeWidth(4);// 设置画笔宽度mPaints[2].setColor(0x880000FF);// 设置颜⾊mUseCenters[2] = false;mPaints[3] = new Paint(mPaints[2]);mPaints[3].setColor(0x88888888);mUseCenters[3] = true;mBigOval = new RectF(40, 10, 280, 250);// 初始化较⼤的矩形mOvals[0] = new RectF(10, 270, 70, 330);// 初始化4个较⼩矩形mOvals[1] = new RectF(90, 270, 150, 330);mOvals[2] = new RectF(170, 270, 230, 330);mOvals[3] = new RectF(250, 270, 310, 330);mFramePaint = new Paint();mFramePaint.setAntiAlias(true);mFramePaint.setStyle(Paint.Style.STROKE);mFramePaint.setStrokeWidth(0);}@Overrideprotected void onDraw(Canvas canvas) {canvas.drawColor(Color.WHITE);// 画⼤矩形canvas.drawRect(mBigOval, mFramePaint);// 在⼤矩形分别画4个圆弧图形canvas.drawArc(mBigOval, mStart, mSweep, mUseCenters[mBigIndex],mPaints[mBigIndex]);for (int i = 0; i < 4; i++) {canvas.drawRect(mOvals[i], mFramePaint);// 画四个⼩矩形canvas.drawArc(mOvals[i], mStart, mSweep, mUseCenters[i],// 在四个⼩矩形中分别画圆弧mPaints[i]);}mSweep += ANGLE_STEP;// 弧度改变if (mSweep > 360) {// 弧度控制mSweep -= 360;mStart += START_ANGLE;if (mStart >= 360) {mStart -= 360;}mBigIndex = (mBigIndex + 1) % mOvals.length;}invalidate();}}}静态效果如图:更多关于Android相关内容感兴趣的读者可查看本站专题:《》、《》、《》、《》、《》、《》及《》希望本⽂所述对⼤家Android程序设计有所帮助。
Android绘图机制(二)——自定义View绘制形, 圆形, 三角形, 扇形, 椭圆, 曲线,文字和图片的坐标讲解
Android绘图机制(二)——自定义View 绘制形, 圆形, 三角形, 扇形, 椭圆, 曲线,文字和图片的坐标讲解我们要想画好一些炫酷的View,首先我们得知道怎么去画一些基础的图案,比如矩形,圆形,三角形,多边形等….新建一个项目然后我们创建一个listview,每个图案一个Activity,这样看起来是不是很顺眼<ListViewandroid:id="@+id/listview"android:layout_width="wrap_content"android:layout_height="wrap_content" />编写ListViewprivate ListView listview;//item上的数据源private String[] name = {"矩形", "圆形", "三角形", "扇形", "椭圆", "曲线","文字和图片"};//listview的adapterprivate ArrayAdapter<String>adapter;private void initView() {//实例化listviewlistview = (ListView) findViewById(R.id.listview);//实例化数据源adapter = new ArrayAdapter<String>(this, yout.simple_list_item_1, name);//listview设置adapterlistview.setAdapter(adapter);//listview设置点击事件listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> parent, View view, int position, long id) {//判断点击了第几个if (id == 0) {//矩形startActivity(new Intent(MainActivity.this, RectActivity.class));} else if (id == 1) {//圆形startActivity(new Intent(MainActivity.this, CircleActivity.class));} else if (id == 2) {//三角形startActivity(new Intent(MainActivity.this, TrigonActivity.class));} else if (id == 3) {//扇形startActivity(new Intent(MainActivity.this, SectorActivity.class));} else if (id == 4) {//椭圆startActivity(new Intent(MainActivity.this, OvalActivity.class));} else if (id == 5) {//曲线startActivity(new Intent(MainActivity.this, PathActivity.class));}else if (id == 6) {//曲线startActivity(new Intent(MainActivity.this, TvIvActivity.class));}}});}效果是这样的后续可以添加1.矩形——RectActivity好的,上面写ListView的代码是不是很简单?拿我们新建一个RectActivity去画点了,首先我们要新建一个RectView继承Viewpackage com.lgl.view.view;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.util.AttributeSet;import android.view.View;/*** 矩形* Created by LGL on 2016/1/7.*/public class RectView extends View {//无参public RectView(Context context) {super(context);}//有参public RectView(Context context, AttributeSet attrs) { super(context, attrs);}@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);// 创建画笔Paint p = new Paint();//设置实心p.setStyle(Paint.Style.FILL);// 设置红色p.setColor(Color.BLACK);// 设置画笔的锯齿效果p.setAntiAlias(true);//绘制canvas.drawRect(50, 100, 300, 300, p);}}截图1.圆形——CircleActivity我们还是新建一个CircleActivity去画点了,首先我们要新建一个CircleView继承View package com.lgl.view.view;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.util.AttributeSet;import android.view.View;import android.view.WindowManager;/*** 圆* Created by LGL on 2016/1/7.*/public class CircleView extends View {int width;int height;//无参public CircleView(Context context) {super(context);init();}//有参public CircleView(Context context, AttributeSet attrs) {super(context, attrs);init();}private void init() {//获取屏幕的宽高//Android绘图机制(一)——自定义View的基础属性和方法里面有讲WindowManager wm = (WindowManager) getContext().getSystemService(Context.WINDOW_SERVICE);width = wm.getDefaultDisplay().getWidth();height = wm.getDefaultDisplay().getHeight();}@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);Paint p = new Paint();p.setColor(Color.BLACK);// 设置画笔的锯齿效果p.setAntiAlias(true);canvas.drawCircle(width / 2, height / 2, width / 2, p);}}截图3.三角形——TrigonActivity我们还是新建一个TrigonActivity去画点了,首先我们要新建一个trigonView继承View package com.lgl.view.view;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.Path;import android.util.AttributeSet;import android.view.View;/*** 三角形* Created by LGL on 2016/1/7.*/public class TrigonView extends View {//无参public TrigonView(Context context) {super(context);}//有参public TrigonView(Context context, AttributeSet attrs) { super(context, attrs);}@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);Paint p = new Paint();p.setColor(Color.BLACK);//实例化路径Path path = new Path();path.moveTo(80, 200);// 此点为多边形的起点path.lineTo(120, 250);path.lineTo(80, 250);path.close(); // 使这些点构成封闭的多边形canvas.drawPath(path, p);}}4.扇形——SectorActivitypackage com.lgl.view.view;import android.content.Context; import android.graphics.Canvas; import android.graphics.Color;import android.graphics.Paint;import android.graphics.RectF;import android.util.AttributeSet;import android.view.View;/*** 扇形* Created by LGL on 2016/1/8.*/public class SectorView extends View {public SectorView(Context context) {super(text);}public SectorView(Context context, AttributeSet attrs) { super(context, attrs);}@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);// 创建画笔Paint p = new Paint();p.setColor(Color.BLACK);RectF rectF = new RectF(60, 100, 200, 240);canvas.drawArc(rectF, 200, 130, true, p);}}5.椭圆——OvalActivitypackage com.lgl.view.view;import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.RectF; import android.util.AttributeSet; import android.view.View;/*** 椭圆* Created by LGL on 2016/1/8.*/public class OvalView extends View {public OvalView(Context context) {super(context);}public OvalView(Context context, AttributeSet attrs) { super(context, attrs);}@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);// 创建画笔Paint p = new Paint();p.setColor(Color.BLACK);RectF rectF = new RectF(60, 100, 200, 240);rectF.set(210,100,250,130);canvas.drawOval(rectF, p);}}椭圆的思路和扇形是一样的,这里就不演示了截图6.曲线——PathActivitypackage com.lgl.view.view;import android.content.Context;import android.graphics.Canvas; import android.graphics.Color;import android.graphics.Paint;import android.graphics.Path;import android.util.AttributeSet; import android.view.View;/*** Created by LGL on 2016/1/8.*/public class PathView extends View {public PathView(Context context) {super(context);}public PathView(Context context, AttributeSet attrs) {super(context, attrs);}@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);// 创建画笔Paint p = new Paint();p.setColor(Color.BLACK);p.reset();//设置空心p.setStyle(Paint.Style.STROKE);Path path = new Path();path.moveTo(100, 320);//设置Path的起点path.quadTo(150, 310, 170, 400); //设置路径点和终点canvas.drawPath(path, p);}}截图7.文字和图片——TvIvActivitypackage com.lgl.view.view;import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Color;import android.graphics.Paint;import android.util.AttributeSet; import android.view.View;import com.lgl.view.R;/*** Created by LGL on 2016/1/8.*/public class TvIvView extends View {public TvIvView(Context context) {super(context);}public TvIvView(Context context, AttributeSet attrs) {super(context, attrs);}@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);Paint p = new Paint();p.setColor(Color.RED);//文本canvas.drawText("自定义文本", 250, 330, p);Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher);//图片canvas.drawBitmap(bitmap, 250, 360, p);}}文字和图片感觉不用多说,图片加载需要一个bitmap,而加载bitmap又需要一个工厂类,就是这样大致的坐标思维截图相信看到这里,一些基础的图案都是可以绘制了。
Android开发实现的几何图形工具类GeometryUtil完整实例
Android开发实现的⼏何图形⼯具类GeometryUtil完整实例本⽂实例讲述了Android开发实现的⼏何图形⼯具类GeometryUtil。
分享给⼤家供⼤家参考,具体如下:package com.android.imooc.goo;import android.graphics.PointF;/*** ⼏何图形⼯具*/public class GeometryUtil {/*** As meaning of method name. 获得两点之间的距离** @param p0* @param p1* @return*/public static float getDistanceBetween2Points(PointF p0, PointF p1) {float distance = (float) Math.sqrt(Math.pow(p0.y - p1.y, 2) + Math.pow(p0.x - p1.x, 2));return distance;}/*** Get middle point between p1 and p2. 获得两点连线的中点** @param p1* @param p2* @return*/public static PointF getMiddlePoint(PointF p1, PointF p2) {return new PointF((p1.x + p2.x) / 2.0f, (p1.y + p2.y) / 2.0f);}/*** Get point between p1 and p2 by percent. 根据百分⽐获取两点之间的某个点坐标** @param p1* @param p2* @param percent* @return*/public static PointF getPointByPercent(PointF p1, PointF p2, float percent) {return new PointF(evaluateValue(percent, p1.x, p2.x), evaluateValue(percent, p1.y, p2.y));}/*** 根据分度值,计算从start到end中,fraction位置的值。
Android开发使用Drawable绘制圆角与圆形图案功能示例
Android开发使⽤Drawable绘制圆⾓与圆形图案功能⽰例本⽂实例讲述了Android开发使⽤Drawable绘制圆⾓与圆形图案功能。
分享给⼤家供⼤家参考,具体如下:1. 创建类RoundCircleDrawable继承Drawable/*** 圆⾓矩形* @Project App_View* @Package com.android.view.drawable* @author chenlin* @version 1.0* @Date 2016年4⽉21⽇* @Note TODO*/public class RoundCircleDrawable extends Drawable{private Paint mPaint;//画笔private int mWidth;//图⽚宽与长度的最⼩值private int mRadius;//半径private int mRound;//圆⾓private RectF mRectF;//矩形private Bitmap mBitmap;//图⽚private Type mType = Type.TYPE_ROUND;//默认是矩形//设置类型enum Type{TYPE_ROUND, TYPE_CICLE;}public RoundCircleDrawable(Bitmap bitmap){this.mBitmap = bitmap;//初始化画笔mPaint = new Paint();mPaint.setAntiAlias(true);BitmapShader shader = new BitmapShader(mBitmap, TileMode.CLAMP, TileMode.CLAMP);mPaint.setShader(shader);mWidth = Math.min(mBitmap.getWidth(), mBitmap.getHeight());mRadius = mWidth / 2;}/*** 向外提供设置图⽚类型的⽅法* @param type*/public void setType(Type type){this.mType = type;}/*** 暴露给外⾯设置圆⾓的⼤⼩** @param round*/public void setRound(int round) {this.mRound = round;}@Overridepublic void setBounds(int left, int top, int right, int bottom) {super.setBounds(left, top, right, bottom);mRectF = new RectF(left, top, right, bottom);}@Overridepublic void draw(Canvas canvas) {if (mType == Type.TYPE_ROUND) {canvas.drawRoundRect(mRectF, mRound, mRound, mPaint);}else {canvas.drawCircle(mWidth / 2, mWidth / 2, mRadius, mPaint);}}@Overridepublic int getIntrinsicWidth() {if (mType == Type.TYPE_CICLE) {return mWidth;}else {return mBitmap.getWidth();}}@Overridepublic int getIntrinsicHeight() {if (mType == Type.TYPE_CICLE) {return mWidth;}else {return mBitmap.getHeight();}}@Overridepublic void setAlpha(int alpha) {mPaint.setAlpha(alpha);}@Overridepublic void setColorFilter(ColorFilter cf) {mPaint.setColorFilter(cf);}@Overridepublic int getOpacity() {return PixelFormat.TRANSLUCENT;}}2. 实现⽅法public class RoundActivity extends Activity {private ImageView mImageView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.activity_round_drawable);mImageView = (ImageView) findViewById(R.id.iv_round);Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.aa);//RoundImageDrawable drawable = new RoundImageDrawable(bitmap);//drawable.setRound(30);RoundCircleDrawable drawable = new RoundCircleDrawable(bitmap);drawable.setRound(50);mImageView.setImageDrawable(drawable);}}更多关于Android相关内容感兴趣的读者可查看本站专题:《》、《》、《》、《》、《》、《》及《》希望本⽂所述对⼤家Android程序设计有所帮助。
Android实现圆形图片或者圆角图片
Android实现圆形图⽚或者圆⾓图⽚Android圆形图⽚或者圆⾓图⽚的快速实现,具体内容如下话不多说直接上codexml⽂件布局<LinearLayoutandroid:id="@+id/ll_headpict"android:layout_width="match_parent"android:layout_height="97dp"android:layout_margin="13dp"android:background="@drawable/shape_white_radius10_solid"android:gravity="center_vertical"android:orientation="horizontal"android:paddingLeft="25dp"><TextViewandroid:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:text="头像"android:textColor="@color/color4A4A4A"android:textSize="14sp"android:textStyle="bold" /><ImageViewandroid:id="@+id/iv_headpict"android:layout_width="60dp"android:layout_height="60dp"android:layout_marginRight="37dp"android:scaleType="fitXY"android:src="@mipmap/ic_headview_demo" /></LinearLayout>初始化控件之后⽤⼯具类加载//第⼀个参数上下⽂,第⼆个控件名称,第三个图⽚url地址,第四个参数圆⾓⼤⼩ViewUtils.loadImageRadius(this, mIvpict, stringUrl, 15);//头像ViewUtils.java⼯具类/*** Created by wjw on 2016/11/28* 倒圆⾓⼯具类*/public class ViewUtils {/*** 图⽚加载* @param context* @param iv* @param url*/public static void loadImage(Context context, ImageView iv, String url) {if(null ==context || null==iv){return;}if(Utils.isTxtEmpty(url)){try {Glide.with(context).load(R.mipmap.placeholder_icon) .dontAnimate().diskCacheStrategy(DiskCacheStrategy.ALL).into(iv);}catch (Exception e){}}else {try {Glide.with(context).load(url) .dontAnimate().diskCacheStrategy(DiskCacheStrategy.ALL).placeholder(R.mipmap.placeholder_icon).into(iv); } catch (Exception e) {}}}public static void loadImage(Context context, ImageView iv, int id) {if(null ==context || null==iv){return;}try {Glide.with(context).load(id) .dontAnimate().diskCacheStrategy(DiskCacheStrategy.ALL).placeholder(R.mipmap.placeholder_icon).into(iv); }catch (Exception e){}}/*** 本地图⽚* @param context* @param iv* @param id* @param radius*/public static void loadImage(Context context, ImageView iv, int id,int radius) {if(null ==context || null==iv){return;}try {Glide.with(context).load(id) .dontAnimate().diskCacheStrategy(DiskCacheStrategy.ALL).transform(new GlideRoundTransform(context, radius)).into(iv);}catch (Exception e){}}public static void setImageResource(ImageView iv, int id) {if(null!=iv){iv.setImageResource(id);}}/*** 加载⽹络图⽚(带圆⾓)* @param context* @param iv* @param url* @param radius*/public static void loadImageRadius(Context context, ImageView iv, String url, int radius) {if(null ==context || null==iv){return;}if(Utils.isTxtEmpty(url)){try {Glide.with(context).load(R.mipmap.placeholder_icon) .dontAnimate().diskCacheStrategy(DiskCacheStrategy.ALL).transform(new GlideRoundTransform(context, radius)).into(iv);}catch (Exception e){}}else{try {Glide.with(context).load(url) .dontAnimate().diskCacheStrategy(DiskCacheStrategy.ALL).transform(new GlideRoundTransform(context, radius)).placeholder(R.mipmap.placeholder_icon).into(iv);}catch (Exception e){}}}/*** 加载⽹络图⽚(圆形)* @param context* @param iv* @param url*/public static void loadImageCircle(Context context, ImageView iv, String url) {if(null ==context || null==iv){return;}if (Utils.isTxtEmpty(url)) {try {Glide.with(context).load(R.mipmap.placeholder_icon) .dontAnimate().diskCacheStrategy(DiskCacheStrategy.ALL).transform(new GlideCircleTransform(context)).into(iv);}catch (Exception e){}} else {try {Glide.with(context).load(url) .dontAnimate().diskCacheStrategy(DiskCacheStrategy.ALL).transform(new GlideCircleTransform(context)). placeholder(R.mipmap.placeholder_icon).into(iv);}catch (Exception e){}}}}效果如图圆⾓图⽚以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Android中绘制常见的几何图形的代码清单范美英(北京信息职业技术学院)摘要:Android中可以自定义视图,只需要将视图类继承自View,并重写其onDraw方法即可。
本文详细罗列了Android应用界面中绘制常见的几何图形的代码清单。
关键词: Android;自定义视图;几何图形1 src/MainActivity.java类的代码package com.zyk.geographicviews;import android.app.Activity;import android.os.Bundle;public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.activity_main);}}2 src/Circle.java类的代码package com.zyk.geographicviews;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.Paint.Style;import android.util.AttributeSet;import android.util.Log;import android.view.MotionEvent;import android.view.View;import android.widget.Toast;public class Circle extends View {public Circle(Context context, AttributeSet attrs) {super(context, attrs);}@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);//圆//w是屏幕宽度,h是屏幕高度float w=canvas.getWidth();float h=canvas.getHeight()-15;Paint p=new Paint();p.setColor(Color.BLUE);p.setStyle(Style.FILL);canvas.drawCircle( w / 2, h / 2 + 2, h / 2, p);}}3 src/Rectangle.java类的代码package com.zyk.geographicviews;import java.util.jar.Attributes;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.Path;import android.graphics.Paint.Style;import android.util.AttributeSet;import android.util.Log;import android.view.MotionEvent;import android.view.View;import android.widget.Toast;public class Rectangle extends View {public Rectangle(Context context, AttributeSet attrs){ super(context, attrs);}public Rectangle(Context context) {super(context);}@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);//w是屏幕宽度,h是屏幕高度float w=canvas.getWidth();float h=canvas.getHeight()-15;Log.i("Fancy", "矩形:w="+w+"h="+h);//矩形Paint p=new Paint();p.setColor(Color.BLUE);p.setStyle(Style.FILL);canvas.drawRect( w / 2 - w / 6, 0 , w / 2 + w / 6, h , p);}}4 src/Triangle.java类的代码package com.zyk.geographicviews;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.Paint.Style;import android.graphics.Path;import android.util.AttributeSet;import android.util.Log;import android.view.MotionEvent;import android.view.View;import android.widget.Toast;public class Triangle extends View {public Triangle(Context context) {super(context);}public Triangle(Context context, AttributeSet attrs){super(context, attrs);}@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);//w是屏幕宽度,h是屏幕高度float w=canvas.getWidth();float h=canvas.getHeight()-15;//三角形Paint p=new Paint();p.setColor(Color.BLUE);p.setStyle(Style.FILL);Path path=new Path();path.moveTo(w/2, 5);path.lineTo(w/2+w/6, h);path.lineTo(w/2-w/6, h);path.close();canvas.drawPath(path, p);}}5 res/layout/activity_main.xml的代码清单<LinearLayout xmlns:android="/apk/res/android"android:layout_width="fill_parent"android:layout_height="fill_parent"android:orientation="vertical" ><com.zyk.geographicviews.Triangleandroid:id="@+id/triangle1"android:layout_width="match_parent"android:layout_height="0dp"android:layout_weight="1" /><com.zyk.geographicviews.Rectangleandroid:id="@+id/rectangle1"android:layout_width="match_parent"android:layout_height="0dp"android:layout_weight="1" /><com.zyk.geographicviews.Circleandroid:id="@+id/circle1"android:layout_width="match_parent"android:layout_height="0dp"android:layout_weight="1" /></LinearLayout>参考文献(资源)[1]范美英.Android移动应用开发案例教程[M].北京:机械工业出版社,2015.。