当前位置:  编程技术>移动开发
本页文章导读:
    ▪androd之作图文本(FontMetrics)        androd之绘制文本(FontMetrics) Canvas 作为绘制文本时,使用FontMetrics对象,计算位置的坐标。 它的思路和java.awt.FontMetrics的基本相同。FontMetrics对象它以四个基本坐标为基准,分别为:・FontM.........
    ▪ loaded the "BlueView" nib but the view outlet was not set 异常的解决方法        loaded the "BlueView" nib but the view outlet was not set 错误的解决办法 [UIViewController _loadViewFromNibNamed:bundle:] loaded the "BlueView" nib but the view outlet was not set. 查书才知道,没有做nib文件到xxxViewControler程.........
    ▪ 调用系统的照相功能       调用系统的拍照功能 《Android/OPhone开发完全讲义》第8章Android服务,本章主要介绍了Android系统中的服务(Service)技术。Service是Android中4个应用程序组件之一。在Android系统内部提供了很多的.........

[1]androd之作图文本(FontMetrics)
    来源: 互联网  发布时间: 2014-02-18
androd之绘制文本(FontMetrics)
Canvas 作为绘制文本时,使用FontMetrics对象,计算位置的坐标。
它的思路和java.awt.FontMetrics的基本相同。

FontMetrics对象
它以四个基本坐标为基准,分别为:
・FontMetrics.top
・FontMetrics.ascent
・FontMetrics.descent
・FontMetrics.bottom

该图片将如下

Paint textPaint = new Paint( Paint.ANTI_ALIAS_FLAG);
textPaint.setTextSize( 35);
textPaint.setColor( Color.WHITE);

// FontMetrics对象
FontMetrics fontMetrics = textPaint.getFontMetrics();

String text = "abcdefghijklmnopqrstu";

// 计算每一个坐标
float baseX = 0;
float baseY = 100;
float topY = baseY + fontMetrics.top;
float ascentY = baseY + fontMetrics.ascent;
float descentY = baseY + fontMetrics.descent;
float bottomY = baseY + fontMetrics.bottom;

// 绘制文本
canvas.drawText( text, baseX, baseY, textPaint);

// BaseLine描画
Paint baseLinePaint = new Paint( Paint.ANTI_ALIAS_FLAG);>
baseLinePaint.setColor( Color.RED);
canvas.drawLine(0, baseY, getWidth(), baseY, baseLinePaint);

// Base描画
canvas.drawCircle( baseX, baseY, 5, baseLinePaint);

// TopLine描画
Paint topLinePaint = new Paint( Paint.ANTI_ALIAS_FLAG);
topLinePaint.setColor( Color.LTGRAY);
canvas.drawLine(0, topY, getWidth(), topY, topLinePaint);

// AscentLine描画
Paint ascentLinePaint = new Paint( Paint.ANTI_ALIAS_FLAG);
ascentLinePaint.setColor( Color.GREEN);
canvas.drawLine(0, ascentY, getWidth(), ascentY, ascentLinePaint);

// DescentLine描画
Paint descentLinePaint = new Paint( Paint.ANTI_ALIAS_FLAG);
descentLinePaint.setColor( Color.YELLOW);
canvas.drawLine(0, descentY, getWidth(), descentY, descentLinePaint);

// ButtomLine描画
Paint bottomLinePaint = new Paint( Paint.ANTI_ALIAS_FLAG);
bottomLinePaint.setColor( Color.MAGENTA);
canvas.drawLine(0, bottomY, getWidth(), bottomY, bottomLinePaint);




    
[2] loaded the "BlueView" nib but the view outlet was not set 异常的解决方法
    来源: 互联网  发布时间: 2014-02-18
loaded the "BlueView" nib but the view outlet was not set 错误的解决办法
[UIViewController _loadViewFromNibNamed:bundle:] loaded the "BlueView" nib but the view outlet was not set.



查书才知道,没有做nib文件到xxxViewControler程序的关联,特此记录下来:



1, 打开nib文件

2, 点击"File's Owner", 按command+4,设置Class为xxxViewControler

3, 按Control+"Files's Owner"或选中File‘s Owner,点右键, 里面有个默认的IBOutlet变量view, 看一下后面有没有做关联,如果没有就拉到下面的View和视图做个关联

    
[3] 调用系统的照相功能
    来源: 互联网  发布时间: 2014-02-18
调用系统的拍照功能

《Android/OPhone开发完全讲义》第8章Android服务,本章主要介绍了Android系统中的服务(Service)技术。Service是Android中4个应用程序组件之一。在Android系统内部提供了很多的系统服务,通过这些系统服务,可以实现更为复杂的功能,例如,监听来电、重力感应等。本节为大家介绍调用系统的拍照功能。

AD: <script src="http://www.51cto.com/js/article/keywords_ad_new.js"></script>


 

14.3.1  调用系统的拍照功能

本节的例子代码所在的工程目录是src\ch14\ch14_systemcamera

读者可以先试试自己手机上的拍照功能。可能由于手机型号不同,拍照的方式和过程也可能不一样。在HTC Hero手机上进行拍照会由系统自动对焦,在对焦的过程中,屏幕上会出现一个白色的对焦符号(类似于中括号)。如果对焦成功,这个对焦符号就会变成绿色,如图14.8所示。

当对焦成功后,按手机下方的【呼吸灯】按钮进行拍照。在拍照后手机屏幕下方会出现两个按钮:【完成】和【拍照】按钮。如果对照片满意,单击【完成】按钮结束拍照。如果对照片不满意,单击【拍照】按钮继续拍照,上一次拍的照片将丢失。由于这两个按钮无法通过DDMS透视图截获,因此,只能截获所拍的照片,如图14.9所示。当完成拍照后,可以对照片做进一步处理,例如本节的例子将照片显示在ImageView中,如图14.10所示。

  图14.8  对焦成功(HTC Hero)   图14.9  拍照成功(HTC Hero)   图14.10  在ImageVie中
显示照片(HTC Hero) 从上面的拍照过程可以猜到,用于显示拍照过程影像的界面实际上也是一个Activity。因此要调用系统的拍照功能,就要用到7.1.2节介绍的调用其他应用程序的Activity的方式。与拍照功能对应的Action是android.provider.MediaStore.ACTION_IMAGE_CAPTURE。用于拍照的Activity需要返回照片图像数据,因此,需要使用startActivityForResult方法启动这个Activity,代码如下:
  • Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);  
  • startActivityForResult(intent, 1); 
  • 截获Activity返回的图像数据的事件方法是onActivityResult,代码如下:

  • protected void onActivityResult(int requestCode, int resultCode, Intent data)  
  • {  
  •     if (requestCode == 1)  
  •     {  
  •     if (resultCode == Activity.RESULT_OK)  
  •     {  
  •         //  拍照Activity保存图像数据的key是data,返回的数据类型是Bitmap对象  
  •         Bitmap cameraBitmap = (Bitmap) data.getExtras().get("data");  
  •         //  在ImageView组件中显示拍摄的照片  
  •         imageView.setImageBitmap(cameraBitmap);  
  •     }  
  •     }  
  •     super.onActivityResult(requestCode, resultCode, data);  
  • 在默认情况下,系统的拍照Activity将照片保存在SD卡的DCIM\100MEDIA目录中(不同型号的手机可能保存的目录不同)。在拍照的过程中按手机下方的【menu】按钮会在屏幕的下方显示几个选项菜单。单击【分辨率】菜单项,会弹出一个只有一个分辨率选项的对话框(在HTC Hero手机上的分别率是624×416,如图14.11所示。这个分辨率可能随着手机型号的不同而不同,但分辨率都很小)。这就意味着所拍摄的照片分辨率不能大于624*416。如果将照片保存成大于这个分辨率,照片就会失真。而手机自带的拍照程序可以根据手机摄像头的最大分辨率设置多个照片分辨率,如图14.12所示。

     

      图14.11  拍照Activity时可设置的

     

     

      图14.12  拍照程序可设置的

     

    照片分辨率(HTC Hero) 照片分辨率(HTC Hero)

    根据官方文档的解释,在调用拍照Activity时通过MediaStore.EXTRA_OUTPUT指定照片保存的路径,可以允许拍摄分辨率更大的照片。原文如下:

    The caller may pass an extra EXTRA_OUTPUT to control where this image will be written. If the EXTRA_OUTPUT is not present, then a small sized image is returned as a Bitmap object in the extra field. This is useful for applications that only need a small image. If the EXTRA_OUTPUT is present, then the full-sized image will be written to the Uri value of EXTRA_OUTPUT.

    按着官方的解释,可以使用如下代码调用拍照Activity:

  • Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);  
  • intent.putExtra(MediaStore.EXTRA_OUTPUT,  Uri.fromFile(new File("/sdcard/test.jpg")));  
  • startActivityForResult(intent, 1); 
  • 但经作者测试,在调用拍照Activity时设置EXTRA_OUTPUT并不起任何作用(仅对Android SDK 1.5)。这也许是Android SDK 1.5的一个bug,或官方文档描述有误。如果读者非要拍摄更大分辨率的照片,可以实现自己的拍照Activity来完成这个功能,这部分内容将在14.3.2节介绍。

    虽然使用系统的拍照Activity无法拍摄更大分辨率的照片,但可以同时生成分辨率更小的照片。通过insertImage方法可以同时在/sdcard/DCIM/.thumbnails和/sdcard/DCIM/Camera目录中分别生成分辨率为50×50和208×312的图像(其他型号的手机也有可能是其他的分辨率)。调用insertImage方法的代码如下:

  • MediaStore.Images.Media.insertImage (getContentResolver(), cameraBitmap, null, null); 
  • 其中cameraBitmap是拍照Activity返回的Bitmap对象。

    不仅可以调用系统的拍照Activity,而且可以调用系统的摄像Activity。摄像Activity对应的Action是MediaStore.ACTION_VIDEO_CAPTURE,调用方法与调用系统的拍照Activity相同。


        
    最新技术文章:
    ▪Android开发之登录验证实例教程
    ▪Android开发之注册登录方法示例
    ▪Android获取手机SIM卡运营商信息的方法
    ▪Android实现将已发送的短信写入短信数据库的...
    ▪Android发送短信功能代码
    ▪Android根据电话号码获得联系人头像实例代码
    ▪Android中GPS定位的用法实例
    ▪Android实现退出时关闭所有Activity的方法
    ▪Android实现文件的分割和组装
    ▪Android录音应用实例教程
    ▪Android双击返回键退出程序的实现方法
    ▪Android实现侦听电池状态显示、电量及充电动...
    ▪Android获取当前已连接的wifi信号强度的方法
    ▪Android实现动态显示或隐藏密码输入框的内容
    ▪根据USER-AGENT判断手机类型并跳转到相应的app...
    ▪Android Touch事件分发过程详解
    ▪Android中实现为TextView添加多个可点击的文本
    ▪Android程序设计之AIDL实例详解
    ▪Android显式启动与隐式启动Activity的区别介绍
    ▪Android按钮单击事件的四种常用写法总结
    ▪Android消息处理机制Looper和Handler详解
    ▪Android实现Back功能代码片段总结
    ▪Android实用的代码片段 常用代码总结
    ▪Android实现弹出键盘的方法
    ▪Android中通过view方式获取当前Activity的屏幕截...
    ▪Android提高之自定义Menu(TabMenu)实现方法
    ▪Android提高之多方向抽屉实现方法
    ▪Android提高之MediaPlayer播放网络音频的实现方法...
    ▪Android提高之MediaPlayer播放网络视频的实现方法...
    ▪Android提高之手游转电视游戏的模拟操控
     


    站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3