- 浏览: 429473 次
- 性别:
- 来自: 成都
文章分类
最新评论
-
sunwang810812:
万分感谢中!!!!!这么多年终于看到一个可运行可解决的方案!! ...
POI 后台生成Excel,在前台显示进度 -
zzb7728317:
LZ正解
Spring Jackson AjaxFileUpload 没有执行回调函数的解决办法 -
sleeper_qp:
lz是在源码上修改的么? 源码的话你重新编译一遍了么? 可 ...
由nutch readseg -dump 中文编码乱码想到的…… -
shenjian430:
请问你改好的程序在写在哪了?
由nutch readseg -dump 中文编码乱码想到的…… -
yinxusen:
It seems to be the bug occur in ...
Mahout Local模式 执行example的注意点
在接下来的例子里,你将通过扩展View类创建一个指南针View。它使用传统的指南针上升箭头来指示方向。当完成时,应该和图4-3看起来一样。 指南针是一个UI控件的例子,它需要完全不同的视觉显示,不同于SDK工具箱中的TextView和Button,让我们从无到有使它成为一个出色的控件。 在第10章,你将使用这个指南针View和设备内建的重力加速计来显示用户当前的方向。在11章中,你将学习更高级的Canvas绘制技巧来戏剧性地改进它的外观。 图4-3 1. 创建一个新的指南针工程,包含指南针View和拥有它的Activity。现在创建CompassView类来扩展View。创建构造函数来运行View可以在代码中实例化,或者通过资源layout的膨胀。添加一个新的initCompassView方法来初始化控件,并在每个构造函数中调用它。 package com.paad.compass; import android.content.Context; import android.graphics.*; import android.graphics.drawable.*; import android.view.*; import android.util.AttributeSet; import android.content.res.Resources; public class CompassView extends View { public CompassView(Context context) { super(context); initCompassView(); } public CompassView(Context context, AttributeSet attrs) { super(context, attrs); initCompassView(); } public CompassView(Context context, AttributeSet ats, int defaultStyle) { super(context, ats, defaultStyle); initCompassView(); } protected void initCompassView() { setFocusable(true); } } 2. 指南针控件应该总是一个圆的方式占据画布允许的尽可能多的空间。重写onMeasure方法来计算最小的边,使用setMeasuredDimension来设置高度和高度值。 @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { // The compass is a circle that fills as much space as possible. // Set the measured dimensions by figuring out the shortest boundary, // height or width. int measuredWidth = measure(widthMeasureSpec); int measuredHeight = measure(heightMeasureSpec); int d = Math.min(measuredWidth, measuredHeight); setMeasuredDimension(d, d); } private int measure(int measureSpec) { int result = 0; // Decode the measurement specifications. int specMode = MeasureSpec.getMode(measureSpec); int specSize = MeasureSpec.getSize(measureSpec); if (specMode == MeasureSpec.UNSPECIFIED) { // Return a default size of 200 if no bounds are specified. result = 200; } else { // As you want to fill the available space // always return the full available bounds. result = specSize; } return result; } 3. 创建两个你将在绘制指南针时用到的资源文件:颜色和字符串。 3.1. 创建文本字符串资源 /res/values/strings.xml. <?xml version=”1.0” encoding=”utf-8”?> <resources> <string name=”app_name”>Compass</string> <string name=”cardinal_north”>N</string> <string name=”cardinal_east”>E</string> <string name=”cardinal_south”>S</string> <string name=”cardinal_west”>W</string> </resources> 3.2. 创建颜色资源 /res/values/colors.xml. <?xml version=”1.0” encoding=”utf-8”?> <resources> <color name=”background_color”>#F555</color> <color name=”marker_color”>#AFFF</color> <color name=”text_color”>#AFFF</color> </resources> 4. 现在回到CompassView类中。创建一个用来显示方向的属性并为它创建get和set方法。 private float bearing; public void setBearing(float _bearing) { bearing = _bearing; } public float getBearing() { return bearing; } 5. 接下来,返回到initCompassView方法中,获取第3步中创建的资源的引用。以类作用域的方法存储字符串值和由颜色值创建的Paint对象。你将在下一步中用这些对象来绘制指南针。 private Paint markerPaint; private Paint textPaint; private Paint circlePaint; private String northString; private String eastString; private String southString; private String westString; private int textHeight; protected void initCompassView() { setFocusable(true); circlePaint = new Paint(Paint.ANTI_ALIAS_FLAG); circlePaint.setColor(R.color. background_color); circlePaint.setStrokeWidth(1); circlePaint.setStyle(Paint.Style.FILL_AND_STROKE); Resources r = this.getResources(); northString = r.getString(R.string.cardinal_north); eastString = r.getString(R.string.cardinal_east); southString = r.getString(R.string.cardinal_south); westString = r.getString(R.string.cardinal_west); textPaint = new Paint(Paint.ANTI_ALIAS_FLAG); textPaint.setColor(r.getColor(R.color.text_color)); textHeight = (int)textPaint.measureText(“yY”); markerPaint = new Paint(Paint.ANTI_ALIAS_FLAG); markerPaint.setColor(r.getColor(R.color.marker_color)); } 6. 最后一步就是用第5步中创建的字符串和Paint对象来绘制指南针。接下来的代码片段只给出了有限的提示。你可以在第11章找到更多关于如何在Canvas上绘制和使用高级的Paint效果的细节。 6.1. 首先重写onDraw方法。 @Override protected void onDraw(Canvas canvas) { 6.2. 找到控件的中心,存储最小边的长度作为指南针的半径。 int px = getMeasuredWidth() / 2; int py = getMeasuredHeight() /2 ; int radius = Math.min(px, py); 6.3. 使用drawCircle方法绘制外边框,背景的颜色使用第5步中创建的circlePaint对象。 // Draw the background canvas.drawCircle(px, py, radius, circlePaint); 6.4. 指南针通过旋转面板来显示当前的指向,所以当前的方向总是在设备的顶端。为了达到这个效果,沿着当前指向的相反方向来旋转画布。 // Rotate our perspective so that the ‘top’ is // facing the current bearing. canvas.save(); canvas.rotate(-bearing, px, py); 6.5. 现在剩下来的就是绘制表盘。旋转画布一周,每隔15°绘制一个标记,每隔45°绘制一个方向字符串。 int textWidth = (int)textPaint.measureText(“W”); int cardinalX = px-textWidth/2; int cardinalY = py-radius+textHeight; // Draw the marker every 15 degrees and text every 45. for (int i = 0; i < 24; i++) { // Draw a marker. canvas.drawLine(px, py-radius, px, py-radius+10, markerPaint); canvas.save(); canvas.translate(0, textHeight); // Draw the cardinal points if (i % 6 == 0) { String dirString = “”; switch (i) { case(0) : { dirString = northString; int arrowY = 2*textHeight; canvas.drawLine(px, arrowY, px-5, 3*textHeight, markerPaint); canvas.drawLine(px, arrowY, px+5, 3*textHeight, markerPaint); break; } case(6) : dirString = eastString; break; case(12) : dirString = southString; break; case(18) : dirString = westString; break; } canvas.drawText(dirString, cardinalX, cardinalY, textPaint); } else if (i % 3 == 0) { // Draw the text every alternate 45deg String angle = String.valueOf(i*15); float angleTextWidth = textPaint.measureText(angle); int angleTextX = (int)(px-angleTextWidth/2); int angleTextY = py-radius+textHeight; canvas.drawText(angle, angleTextX, angleTextY, textPaint); } canvas.restore(); canvas.rotate(15, px, py); } canvas.restore();
发表评论
-
【转】区分Activity的四种加载模式
2012-01-11 21:33 880转自http://marshal.easymorse.c ... -
【转】Android之完美退出方法(2.1-2.2-2.3SDK版本均测试通过)
2012-01-11 15:49 1271转自:http://hi.baidu.com/xunle ... -
【转】Android程序完全退出的三种方法
2012-01-11 14:38 1060以下为网络上找的文 ... -
在程序中,打开google手机自带的程序Maps
2012-01-11 14:32 923Uri uri = Uri.parse("ht ... -
android keystore
2012-01-11 11:55 970C:\Program Files\Java\jdk1.6 ... -
解决ListView和ExpandableListView滚动时背景变黑
2012-01-10 11:24 1631今天做东西的时候发现ListView和Expandabl ... -
android中intent的作用
2012-01-10 00:25 25111 Intent.ACTION_MAIN St ... -
关于Android中Java与Javascript之间的传值研究
2012-01-10 00:23 2965Android中提供的WebView的功能不可谓不强大, ... -
Android自适应屏幕大小和layout布局(横屏|竖屏)
2011-12-27 14:27 2561一:不同的layout Android手机屏幕大小不一,有48 ... -
从sbf刷机包里提取需要的apk文件
2011-11-18 14:07 25011、首先必然要有刷机包sbf文件 2、用MotoAndroi ... -
MB502 使用心得
2011-08-20 00:34 35811、解决MOTO ME502用不了CMWAP的办法 第 ... -
如何在Android中点击overlay弹出带尾巴的气泡
2011-07-10 12:37 59911.在res/layout目录下建立pop view ... -
Android中点中overlay弹出带尾巴的气泡的实现
2010-11-17 20:59 8331.在res/layout目录下建立pop view的xml文 ... -
(转)Android中LocationManager的简单使用,获取当前位置
2010-11-16 21:22 2241Android中LocationManager的提供了一系 ... -
创建指南针View的例子(2)
2010-11-12 15:25 15037. 为了查看指南针,修改main.xml资源,使用你的C ... -
Android Bitmap和Canvas学习笔记
2010-11-12 15:18 1110位图是我们开发中最常用的资源,毕竟一个漂亮的界面对用户 ... -
android sqlite3 adb使用
2010-10-04 23:10 14561.首先,emulator必须跑起来。可以通过eclipse或 ...
相关推荐
ChaosCompass 自定义View,实现小米指南针和时钟
用方向传感器制作指南针,在一个Activity中实现,效果没有自定义的view好
为作者原创资源可嵌入 移动开发中 进行了简单的封装 可动态显示温度 湿度 和风向
android 自定义view比较综合的例子,涉及到一些复杂的实现效果,有一些基础的人可以参考下。
QT 整理的Graphics View 的一些例子
已废弃 请移步至 https://github.com/githubwing/ThreeDLayout
iOS XIB创建View
SmartImageView实现原理例子
Compass view for Android. This library provides a fully customizable linear compass view. Latest Version How to use Configuring your project dependencies Add the library dependency to your build....
当程序中有大量的数据需要展示时,就需要用到 ListView 啦。 ListView 允许用户通过手指上下滑动的方式将屏幕外的数据滚动到屏幕内,同时屏幕上原有的数据则会滚动出屏幕
基于QT GraphicsView三层架构所写的例子,通俗易懂,很经典的教程。代码简单易懂,便于初学者学习。
为 View Composer 创建用户帐户19 配置受限制的组策略19 使用 View 组策略管理模板文件20 为智能卡身份验证准备 Active Directory 20 4 安装 View Composer 23 准备 View Composer 数据库23 为 View Composer 配置 ...
参考大神的。Android自定义View实现方位刻度尺(类似于吃鸡手游) https://blog.csdn.net/baidu_35559769/article/details/81165537 然后整理出来的源码。
Android 创建自定义View源码~~~~~~~~~~~~~~
SQL SERVER里面创建VIEW的过程,一个比较简单的范例
改例子是工作中从同事那里得到的参考例子,感觉经典,就留下来了,虽然内容不多,几乎涵盖了所有相关的操作,很好的参考例子,所以要留下来,方便以后使用
采用WDK源码中 usbView 例子的代码创建的完整工程代码,可直接采用VS2008打开编译运行。
第1章 ProductView 9.0 简介 3 1.1 ProductView用户界面构成 3 1.2 可读文件类型 3 第2章 ProductView 的基本功能 5 2.1 定向模型和文档。 5 2.2 更改模型外观。 5 2.2.1 阴影、线框、透明、颜色、网格和去除隐藏线 ...
Delphi创建SQLserver数据库视图的例子,使用create View语句来生成视图,当然本程序创建好视图后,也可删除视图,下面是详细的代码: //创建一个视图: procedure TForm1.Button1Click(Sender: TObject); ...
这是一个简易的指南针,非常实用。也非常适合广大对Android开发有兴趣的初学者,对Android传感器,View控件的学习。