- 浏览: 426940 次
- 性别:
- 来自: 深圳/湛江
文章分类
最新评论
-
wangyudong:
很多API doc生成工具生成doc需要重度依赖代码里加注解的 ...
[ios]利用xcode自动生成项目文档 -
tiger1819:
有源码么,想学习
[android]仿360状态,类流量监控桌面浮动显示 -
119568242:
借我一双翅膀 写道大哥,求指教啊?
IOS 开发,调用打电话,发短信,打开网址 -
借我一双翅膀:
大哥,求指教啊
IOS 开发,调用打电话,发短信,打开网址 -
li247276297:
楼主 是不是要加个权限?
[android]仿360状态,类流量监控桌面浮动显示
转自:http://byandby.iteye.com/blog/826418
以前的文章里边画一般都是一些矩形,今天就看看怎么在android手机屏幕上绘制一些几何图形,如三角形、多边形、椭圆、圆形、正方形 等等。并且设置 空心、实心。下面我们先来看看
在android中可以绘制出那些几何图形
方法 说明
drawRect 绘制矩形
drawCircle 绘制圆形
drawOval 绘制椭圆
drawPath 绘制任意多边形
drawLine 绘制直线
drawPoin 绘制点
我们先看看运行效果---------------------。。。。。
下面我们看例子吧
布局文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello"
android:textColor="#00FF00"
/>
<xiaohang.zhimeng.GameView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
</LinearLayout>
红色的部分 是我们自己实现的 GameView此类继承了View 我们把它作为布局文件的一部分加载了进来。
下边是代码
Activity01 比较简单 但是为了保持完整我还是贴上来吧。
GameView
在android中还可以通过ShapDrawable来绘制图像,ShapDrawable可以设置画笔的形状。通过 getPaint 方法可以得到Paint对象,可以像前面一样设置这个画笔的颜色、尺寸等属性。然而,在ShapDrawable中提供了 setBounds 方法来设置图形显示的区域,最后通过ShapeDrawable 和 Draw方法将图形显示到屏幕上。 请见下边的代码
GameView2
大家感兴趣可以 下载源码 运行看看
在android中可以绘制出那些几何图形
方法 说明
drawRect 绘制矩形
drawCircle 绘制圆形
drawOval 绘制椭圆
drawPath 绘制任意多边形
drawLine 绘制直线
drawPoin 绘制点
我们先看看运行效果---------------------。。。。。
下面我们看例子吧
布局文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello"
android:textColor="#00FF00"
/>
<xiaohang.zhimeng.GameView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
</LinearLayout>
红色的部分 是我们自己实现的 GameView此类继承了View 我们把它作为布局文件的一部分加载了进来。
下边是代码
Activity01 比较简单 但是为了保持完整我还是贴上来吧。
- package xiaohang.zhimeng;
- import android.app.Activity;
- import android.os.Bundle;
- public class Activity01 extends Activity {
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- }
- }
GameView
- package xiaohang.zhimeng;
- import android.content.Context;
- import android.graphics.Canvas;
- import android.graphics.Color;
- import android.graphics.Paint;
- import android.graphics.Path;
- import android.graphics.Rect;
- import android.graphics.RectF;
- import android.util.AttributeSet;
- import android.view.View;
- public class GameView extends View implements Runnable {
- // 声明Paint对象
- private Paint mPaint = null;
- private GameView2 mGameView2 = null;
- public GameView(Context context, AttributeSet attr){
- super(context,attr);
- System.out.println(1);
- // 构建画笔对象
- mPaint = new Paint();
- mGameView2 = new GameView2(context);
- // 开启线程
- new Thread(this).start();
- }
- @Override
- protected void onDraw(Canvas canvas) {
- super.onDraw(canvas);
- // 设置画布为黑色背景
- canvas.drawColor(Color.BLACK);
- // 取消锯齿
- mPaint.setAntiAlias(true);
- // 设置画笔风格为空心
- mPaint.setStyle(Paint.Style.STROKE);
- {
- // 定义矩形对象
- Rect rect1 = new Rect();
- // 设置矩形大小
- rect1.left = 5;
- rect1.top = 5;
- rect1.bottom = 25;
- rect1.right = 45;
- mPaint.setColor(Color.BLUE);
- // 绘制矩形
- canvas.drawRect(rect1, mPaint);
- mPaint.setColor(Color.RED);
- // 绘制矩形
- canvas.drawRect(50, 5, 90, 25, mPaint);
- mPaint.setColor(Color.YELLOW);
- // 绘制圆形
- // 40 70 分别是圆心的X 和 Y坐标 30为半径 mPaint为画笔对象
- canvas.drawCircle(40, 70, 30, mPaint);
- // 定义椭圆
- RectF rectf1 = new RectF();
- rectf1.left = 80;
- rectf1.top = 30;
- rectf1.right = 120;
- rectf1.bottom = 70;
- mPaint.setColor(Color.LTGRAY);
- // 绘制椭圆
- canvas.drawOval(rectf1, mPaint);
- // 绘制多边形
- Path path1 = new Path();
- /**
- * 这个多变形我也没试验它到底是怎么画 应该就是从起点 找点 一个点 一个点的连线
- */
- path1.moveTo(150 + 5, 80 - 50); // 此点为多边形的起点
- path1.lineTo(150 + 45, 80 - 50);
- path1.lineTo(150 + 30, 120 - 50);
- path1.lineTo(150 + 20, 120 - 50);
- // 使这些点构成封闭的多边形
- path1.close();
- mPaint.setColor(Color.GRAY);
- // 绘制这个多边形
- canvas.drawPath(path1, mPaint);
- mPaint.setColor(Color.RED);
- // 设置画笔空心边框的宽度
- mPaint.setStrokeWidth(3);
- // 绘制直线
- // 这个绘制直线的方法 前2个参数是前点坐标 后 2个参数是 终点坐标我们可看出两个点的Y坐标都一样的
- canvas.drawLine(5, 110, 315, 110, mPaint);
- }
- // 绘制实心几何体
- // 将画笔设置为实心
- mPaint.setStyle(Paint.Style.FILL);
- {
- // 定义矩形
- Rect rect1 = new Rect();
- rect1.left = 5;
- rect1.top = 130 + 5;
- rect1.bottom = 130 + 25;
- rect1.right = 45;
- mPaint.setColor(Color.BLUE);
- // 绘制矩形
- canvas.drawRect(rect1, mPaint);
- mPaint.setColor(Color.RED);
- // 绘制矩形
- canvas.drawRect(50, 130 + 5, 90, 130 + 25, mPaint);
- mPaint.setColor(Color.YELLOW);
- // 绘制圆形 这里参数就不说明了 上边已经说了
- canvas.drawCircle(40, 130 + 70, 30, mPaint);
- // 定义椭圆对象
- RectF rectf1 = new RectF();
- // 设置椭圆大小
- rectf1.left = 80;
- rectf1.top = 130+30;
- rectf1.right = 120;
- rectf1.bottom = 130 + 70;
- mPaint.setColor(Color.LTGRAY);
- // 绘制椭圆
- canvas.drawOval(rectf1, mPaint);
- // 绘制多边形
- Path path1 = new Path();
- // 设置多边形的点
- path1.moveTo(150+5, 130+80-50);
- path1.lineTo(150+45, 130+80-50);
- path1.lineTo(150+30, 130+120-50);
- path1.lineTo(150+20, 130+120-50);
- // 使这些点构成封闭的多边形
- path1.close();
- mPaint.setColor(Color.GRAY);
- // 绘制这个多边形
- canvas.drawPath(path1, mPaint);
- mPaint.setColor(Color.RED);
- mPaint.setStrokeWidth(3);
- // 绘制直线
- canvas.drawLine(5, 130 + 110, 315, 130 + 110, mPaint);
- }
- // 通过ShapDrawable来绘制几何图形
- mGameView2.DrawShape(canvas);
- }
- @Override
- public void run() {
- while (!Thread.currentThread().isInterrupted()) {
- try {
- Thread.sleep(100);
- } catch (InterruptedException e) {
- Thread.currentThread().interrupt();
- }
- // 使用postInvalidate可以直接在线程中更新界面
- postInvalidate();
- }
- }
- }
在android中还可以通过ShapDrawable来绘制图像,ShapDrawable可以设置画笔的形状。通过 getPaint 方法可以得到Paint对象,可以像前面一样设置这个画笔的颜色、尺寸等属性。然而,在ShapDrawable中提供了 setBounds 方法来设置图形显示的区域,最后通过ShapeDrawable 和 Draw方法将图形显示到屏幕上。 请见下边的代码
GameView2
- package xiaohang.zhimeng;
- import android.content.Context;
- import android.graphics.Canvas;
- import android.graphics.Color;
- import android.graphics.LinearGradient;
- import android.graphics.Paint;
- import android.graphics.Path;
- import android.graphics.Rect;
- import android.graphics.Shader;
- import android.graphics.drawable.ShapeDrawable;
- import android.graphics.drawable.shapes.OvalShape;
- import android.graphics.drawable.shapes.PathShape;
- import android.graphics.drawable.shapes.RectShape;
- import android.view.View;
- public class GameView2 extends View {
- // 声明ShapDrawable对象
- ShapeDrawable mShapeDrawable = null;
- public GameView2(Context context) {
- super(context);
- }
- public void DrawShape(Canvas canvas) {
- // 实例化ShapeDrawable对象并说明是绘制一个矩形
- mShapeDrawable = new ShapeDrawable(new RectShape());
- // 得到画笔paint对象并设置其颜色
- mShapeDrawable.getPaint().setColor(Color.RED);
- Rect bounds = new Rect(5, 250, 55, 280);
- // 设置图像显示的区域
- mShapeDrawable.setBounds(bounds);
- // 绘制图像
- mShapeDrawable.draw(canvas);
- /* =============================== */
- /* 实例化ShapeDrawable对象并说明是绘制一个椭圆 */
- mShapeDrawable = new ShapeDrawable(new OvalShape());
- // 得到画笔paint对象并设置其颜色
- mShapeDrawable.getPaint().setColor(Color.GREEN);
- // 设置图像显示的区域
- mShapeDrawable.setBounds(70, 250, 150, 280);
- // 绘制图像
- mShapeDrawable.draw(canvas);
- Path path1 = new Path();
- // 设置多边形
- path1.moveTo(150 + 5, 80 + 80 - 50);
- path1.lineTo(150 + 45, 80 + 80 - 50);
- path1.lineTo(150 + 30, 80 + 120 - 50);
- path1.lineTo(150 + 20, 80 + 120 - 50);
- // 使这些点封闭成多边形
- path1.close();
- // PathShape后面两个参数分别是高度和宽度
- mShapeDrawable = new ShapeDrawable(new PathShape(path1, 150, 150));
- // 得到画笔paint对象并设置其颜色
- mShapeDrawable.getPaint().setColor(Color.BLUE);
- // 设置图像显示的区域
- mShapeDrawable.setBounds(100, 170, 200, 280);
- // 绘制图像
- mShapeDrawable.draw(canvas);
- //绘制正方形
- mShapeDrawable = new ShapeDrawable(new RectShape());
- //得到画笔并设置颜色
- Paint xh_Paint = mShapeDrawable.getPaint();
- /*设置渐变色 这个正方形的颜色是改变的*/
- Shader mShader=new LinearGradient(0,0,100,100,
- new int[]{Color.RED,Color.GREEN,Color.BLUE,Color.YELLOW,Color.LTGRAY},
- null,Shader.TileMode.REPEAT);
- xh_Paint.setShader(mShader);
- mShapeDrawable.setBounds(250, 250, 280, 280);
- mShapeDrawable.draw(canvas);
- }
- }
大家感兴趣可以 下载源码 运行看看
- Xh_05_05_Test.rar (45.7 KB)
- 下载次数: 99
发表评论
-
[android]使用 Matrix 的随触摸旋转的ImageView
2013-02-22 01:58 7923使用 Matrix 的随触摸旋转的ImageView 突 ... -
[android]动态改变按钮背景状态 StateListDrawable
2012-10-29 10:52 1472动态改变按钮背景状态 很少用到 上次和六哥聊到。 ... -
[android]ViewPage上无法通过onKeyDown()获得按钮事件
2012-08-20 04:53 1365系统无法监听到遥控器在VewPage上的按钮事件,如需 ... -
[android]待解决 lisTview 的onItemSelected 监听事件焦点的问题。
2012-08-18 21:18 2176今天遇到个问题 到目前为止 一直不理解为什么 大概描述下布局 ... -
[android]layout_weight 在layout_width 为fill_parent 与wrap_content 时的不同含义
2012-08-12 12:52 1270转自:http://hi.baidu.com/l ... -
[android]仿制新浪微博消息页面 图标切换动画
2012-08-10 17:33 4031研究了下以前不怎么用到的动画效果的实现 顺便做了一个新浪微 ... -
[android]仿制新浪微博消息页面 图标切换动画
2012-08-10 17:33 3研究了下以前不怎么用到的动画效果的实现 顺便做了一个新浪微 ... -
[android]仿制新浪微博消息页面 图标切换动画
2012-08-10 17:33 0研究了下以前不怎么用到的动画效果的实现 顺便做了一个新浪微 ... -
[android]Activity切换动画
2012-08-10 12:23 1478今天准备比赛的时候 遇到了这个问题。 查了些资料 ... -
android中ADT版本问题:无故报 java.lang.NoClassDefFoundError
2012-07-31 22:08 1792今天修改一个老项目的时候,发现在所有配置正确的情况下,代目无任 ... -
[android]仿360状态,类流量监控桌面浮动显示
2012-05-27 22:03 6031前两天看到部分音频播放器可以实现在桌面上显示歌词,360那个浮 ... -
[转]android开发问题记录 "founderapp"
2012-02-08 10:48 1071这段时间,由于某种原因,一直在做android手机开发, ... -
关于weight
2012-02-05 21:20 843layout_weight=1后,除了其它的控件之外剩 ... -
判断SD卡是否存在
2012-02-02 17:54 873android.os.Environment.getEx ... -
[转]Android文件管理器介绍
2012-02-02 16:50 3081转自:http://www.linuxidc.com/L ... -
[转]Android文件管理器介绍
2012-02-02 16:49 5转自:http://www.linuxidc.com/L ... -
Android菜鸟日记32-游戏中的碰撞
2012-01-11 23:09 1754Android菜鸟日记 32-游戏中的碰撞 一、 ... -
Android菜鸟日记31-selector 中使用 shape
2012-01-11 23:05 1613Android菜鸟日记 31- ... -
Android菜鸟日记30-View与SurfaceView
2012-01-11 22:45 949Android菜鸟日记 30 View与Surfa ... -
[转]Android开发者指南-Manifest.xml-activity[原创译文]
2012-01-10 17:55 943<activity android:allowTa ...
相关推荐
在Android开发中,几何图形的绘制是创建用户界面和实现...总之,Android几何图形的绘制是一个涵盖广泛的主题,涉及到许多不同的API和技巧。熟练掌握这些技能,能让你在创建美观且交互丰富的应用程序时更加得心应手。
在Android平台上,2D图形绘制是一项基础且重要的技术,它允许开发者创建丰富的用户界面和动态效果。本主题将深入探讨Android 2D图形绘制的核心概念、API和实践技巧。 首先,Android提供了两种主要的方式来实现2D...
本主题聚焦于“Android自定义View之几何图形绘制”,特别是如何利用Android的Canvas API来构建维度图表,如模仿京东白条个人信用评分的维普图。下面将详细介绍这个过程中的关键知识点。 首先,理解Android的View类...
博客《android Graphics(一):概述及基本几何图形绘制》对应源码,博客地址:http://blog.csdn.net/harvic880925/article/details/38875149
程序员需要实现`onDrawFrame()`方法,这里进行所有的图形绘制逻辑。对于每个几何形状,都会有一个对应的绘制调用,比如`glDrawArrays()`或`glDrawElements()`,它们告诉OpenGL如何从缓冲区中提取数据并绘制到屏幕上...
本篇文章将详细讲解如何在Android中自定义View来绘制几何图形,以矩形为例,结合提供的`MyCanvas`示例进行解析。 首先,要创建一个自定义View,我们需要继承`View`或`ViewGroup`类。在这个例子中,我们将从`View`类...
博客《android Graphics(一):基本图形绘制---几何形状、路径及文本》对应源码,博客地址:http://blog.csdn.net/harvic880925/article/details/38875149
在安卓平台上,开发人员可以利用Android SDK中的Canvas类来实现绘制几何图形的功能。这个过程涉及到图形学的基本概念,以及Android视图系统的工作原理。Canvas是Android中用于在Bitmap上进行绘图的核心对象,它可以...
本文将深入探讨如何在Android中利用Canvas对象进行几何图形的绘制。 首先,Android中的自定义视图通常继承自`View`或`ViewGroup`类。在这个例子中,我们创建三个不同的视图类,分别为`Triangle`、`Rectangle`和`...
在Android开发中,自定义视图(View)是创建复杂用户界面的一种常见方式,它可以让我们在屏幕上绘制任意的几何图形。本实例展示了如何在Android应用中实现这一功能,通过继承`View`类并重写`onDraw()`方法来实现...
本篇文章将详细介绍如何在Android应用中绘制常见的几何图形,如圆形和矩形。 1. **自定义视图基础** 自定义视图首先需要创建一个新的类,继承自`View`。例如,创建一个名为`Circle`的类,用于绘制圆形。在`Circle`...
总结,Android的`Path`类为开发者提供了强大的矢量图形绘制能力。通过理解和熟练运用`Path`的各个方法,可以创建出各种复杂的图形和动画效果。在实际项目中,结合自定义视图,如`PathView`,可以进一步提升用户体验...
2. **重写`onDraw()`**: 这是自定义视图的核心,使用`Canvas`对象的`drawXXX()`方法绘制几何图形。例如,对于矩形,我们可以调用`canvas.drawRect()`,对于圆使用`canvas.drawCircle()`,而三角形则可能需要通过`...
Android提供了多种方式来实现图形绘制,包括使用Canvas、Bitmap、Path、Paint等类。让我们深入探讨这些关键概念。 首先,Canvas是Android绘制的核心类,它是绘制2D图形的画布。你可以将它想象为一张白纸,而Paint则...
在Android平台上,图形绘制是构建用户界面和实现视觉效果的关键技术。这个主题涵盖了各种基本图形元素的创建,包括圆形、正方形、长方形、椭圆、三角形和梯形,以及它们的空心与实心形态。让我们深入探讨一下Android...
在Android开发中,实现各种图形绘制是一项常见的任务,这通常涉及到自定义View的使用。本文主要探讨了如何在Android平台上通过自定义View类来绘制不同类型的图形,包括Bezier曲线、直线、椭圆和矩形。 首先,为了...
总的来说,绘制和优化圆点在Android OpenGL ES中涉及到几何、着色器编程和性能优化等多个方面。理解这些概念和技术对于开发高质量的图形应用至关重要。在实际项目中,开发者需要根据设备性能和应用需求来选择最适合...
OpenGL ES 是一种在嵌入式设备上广泛使用的图形库,特别是在Android系统中,它用于创建高性能的2D和3D图形。在这个主题中,我们主要关注如何在Android平台上使用OpenGL ES绘制一个透明的三维/空间坐标系。这个过程...