package irdc.ex10_05;
import java.io.IOException;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import jp.sourceforge.qrcode.QRCodeDecoder;
import jp.sourceforge.qrcode.data.QRCodeImage;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.PixelFormat;
import android.hardware.Camera;
import android.hardware.Camera.PictureCallback;
import android.hardware.Camera.ShutterCallback;
import android.net.Uri;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.Window;
import android.view.ViewGroup.LayoutParams;
import android.webkit.URLUtil;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;
public class EX10_05 extends Activity implements SurfaceHolder.Callback
{
/* 建立私有Camera对象 */
private Camera mCamera01;
private Button mButton01, mButton02, mButton03;
/* 作为review照下来的相片之用 */
private ImageView mImageView01;
private String TAG = "HIPPO_DEBUG";
private SurfaceView mSurfaceView01;
private SurfaceHolder mSurfaceHolder01;
/* 预设相机预览模式为false */
private boolean bIfPreview = false;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
/* 使应用程序全屏幕执行,不使用title bar */
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.main);
DrawCaptureRect mDraw = new DrawCaptureRect
(
EX10_05.this,
// PORTRAIT
//110, 10, 100, 100,
190, 10, 100, 100,
//181, 1, 118, 118,
getResources().getColor(R.drawable.lightred)
);
addContentView(mDraw, new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
/* 取得屏幕解析像素 */
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
mImageView01 = (ImageView) findViewById(R.id.myImageView1);
/* 以SurfaceView作为相机Preview之用 */
mSurfaceView01 = (SurfaceView) findViewById(R.id.mSurfaceView1);
/* 系结SurfaceView,取得SurfaceHolder对象 */
mSurfaceHolder01 = mSurfaceView01.getHolder();
/* Activity必须实作SurfaceHolder.Callback */
mSurfaceHolder01.addCallback(EX10_05.this);
/* 额外的设定预览大小设定,在此不使用 */
//mSurfaceHolder01.setFixedSize(160, 120);
/*
* 以SURFACE_TYPE_PUSH_BUFFERS(3)
* 作为SurfaceHolder显示型态
* */
mSurfaceHolder01.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
mButton01 = (Button)findViewById(R.id.myButton1);
mButton02 = (Button)findViewById(R.id.myButton2);
mButton03 = (Button)findViewById(R.id.myButton3);
/* 开启相机及Preview */
mButton01.setOnClickListener(new Button.OnClickListener()
{
@Override
public void onClick(View arg0)
{
// TODO Auto-generated method stub
/* 自订初始化开启相机函数 */
initCamera();
}
});
/* 停止Preview及相机 */
mButton02.setOnClickListener(new Button.OnClickListener()
{
@Override
public void onClick(View arg0)
{
// TODO Auto-generated method stub
/* 自定义重置相机,并关闭相机预览函数 */
resetCamera();
}
});
/* 拍照 */
mButton03.setOnClickListener(new Button.OnClickListener()
{
@Override
public void onClick(View arg0)
{
// TODO Auto-generated method stub
/* 自定义拍照函数 */
takePicture();
}
});
}
/* 自定义初始相机函数 */
private void initCamera()
{
if(!bIfPreview)
{
/* 若相机非在预览模式,则开启相机 */
try
{
/*
* The Heap 是应用程序在手机里执行所配置的空间
* 当超过预设的16 MB(每一个应用程序)时就会导致 "Out of memory"的错误
* 目前看来是Cupcake(AVD 1.5)才会发生
* Connect E from ICameraClient 0x....
* new client (0x...) sttempting to connect - rejected
* */
mCamera01 = Camera.open();
}
catch(Exception e)
{
Log.e(TAG, e.getMessage());
}
}
if (mCamera01 != null && !bIfPreview)
{
try
{
Log.i(TAG, "inside the camera");
mCamera01.setPreviewDisplay(mSurfaceHolder01);
/* 建立Camera.Parameters物件 */
Camera.Parameters parameters = mCamera01.getParameters();
/* 设定相片格式为JPEG */
parameters.setPictureFormat(PixelFormat.JPEG);
//parameters.setPreviewSize(w, h);
List<Camera.Size> s=parameters.getSupportedPreviewSizes();
try
{
if(s!=null)
{
for(int i=0;i<s.size();i++)
{
Log.i(TAG,""+(((Camera.Size)s.get(i)).height)+"/"+(((Camera.Size)s.get(i)).width));
}
}
parameters.setPreviewSize(320, 240);
//parameters.setPreviewSize(176, 144);
/* 在2.0模拟器中,设定不支持的PreviewSize将造成Exception */
s=parameters.getSupportedPictureSizes();
try
{
if(s!=null)
{
for(int i=0;i<s.size();i++)
{
Log.i(TAG,""+(((Camera.Size)s.get(i)).height)+"/"+(((Camera.Size)s.get(i)).width));
}
}
/* 在2.0模拟器中,设定不支持的PictureSize将造成Exception */
parameters.setPictureSize(512, 384);
//parameters.setPictureSize(213, 350);
/* 将Camera.Parameters设定予Camera */
mCamera01.setParameters(parameters);
/* setPreviewDisplay唯一的参数为SurfaceHolder */
mCamera01.setPreviewDisplay(mSurfaceHolder01);
/* 立即执行Preview */
mCamera01.startPreview();
bIfPreview = true;
Log.i(TAG, "startPreview");
}
catch (Exception e)
{
Log.i(TAG, e.toString());
e.printStackTrace();
}
}
catch (Exception e)
{
Toast.makeText
(
EX10_05.this,
"initCamera error.",
Toast.LENGTH_LONG
).show();
e.printStackTrace();
}
}
catch (IOException e)
{
// TODO Auto-generated catch block
mCamera01.release();
mCamera01 = null;
Log.i(TAG, e.toString());
e.printStackTrace();
}
}
}
/* 拍照撷取影像 */
private void takePicture()
{
if (mCamera01 != null && bIfPreview)
{
/* 呼叫takePicture()方法拍照 */
mCamera01.takePicture(shutterCallback, rawCallback, jpegCallback);
}
}
/* 相机重置 */
private void resetCamera()
{
if (mCamera01 != null && bIfPreview)
{
try
{
mCamera01.stopPreview();
/* 扩展学习,释放Camera对象 */
//mCamera01.release();
bIfPreview = false;
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
private ShutterCallback shutterCallback = new ShutterCallback()
{
public void onShutter()
{
// Shutter has closed
}
};
p
Google Android SDK 开发范例大全(第2版)光盘内容 第9-10章
需积分: 0 135 浏览量
更新于2010-06-21
收藏 7.88MB RAR 举报
《Google Android SDK 开发范例大全(第2版)》是一部深入浅出的Android开发教程,其中包含了丰富的实践案例,旨在帮助开发者全面掌握Android应用的开发技能。此资源的光盘内容分为三个部分,此处提供的为第三部分,涵盖第9至10章。
第9章:Android UI设计与优化
在这一章中,开发者将学习到Android用户界面(UI)的设计原则和最佳实践。Android SDK提供了多种布局工具和组件,如线性布局、相对布局、网格布局等,让开发者可以构建灵活且具有吸引力的用户界面。此外,章节内容可能还会包括如何使用自定义视图、触摸事件处理、动画效果的实现以及UI性能优化,如减少视图层次、使用ViewHolder模式和避免过度绘制等关键技巧。
第10章:Android网络编程与数据存储
在这一章,开发者会深入理解Android平台上的网络通信。Android支持多种网络API,如HttpURLConnection、OkHttp、Retrofit等,用于进行HTTP请求。章节可能会详细讲解如何发送GET和POST请求,处理响应数据,以及异常处理。同时,数据存储也是关键部分,包括SQLite数据库的使用、SharedPreferences进行轻量级数据存储、文件系统操作以及云同步等技术。
CH10可能包含的示例可能涵盖:
1. 使用XML或代码动态创建UI布局。
2. 实现自定义控件并添加到布局中。
3. 创建和应用触摸事件监听器,实现滑动、点击等交互效果。
4. 使用Android动画库实现平移、旋转、缩放等动画效果。
5. 对比和实践不同的布局管理器,以优化UI性能。
6. 设计高效的Adapter,使用ViewHolder优化ListView或RecyclerView的滚动性能。
7. 实现网络请求的示例,包括异步请求、下载文件、上传数据等。
8. 学习如何处理网络请求的错误,如超时、无网络连接等。
9. 存储和检索SQLite数据库中的数据,包括创建表、查询、更新和删除操作。
10. 使用SharedPreferences存储简单配置信息。
11. 文件系统的读写操作,如保存和读取文本文件、图片等。
12. 探索Android云同步服务,如Google Drive API集成。
通过这些章节的学习,开发者不仅能掌握Android SDK的基础知识,还能深入理解如何在实际项目中运用这些技术,提升应用的用户体验和功能完善性。无论是对初学者还是有经验的开发者,这个资源都能提供宝贵的学习材料和实践案例,帮助他们在Android开发领域更上一层楼。
天赋淫权
- 粉丝: 0
- 资源: 2
最新资源
- C#运动控制加视觉定位框架,程序用来取放料,控制卡用的是正运动ZMC408CE总线运动控制卡,控制六个电机,XY轴,两个Z轴,两个旋转轴,相机用的是海康,3个海康相机,视觉采取用海康SDK加Halco
- 基于分布式驱动电动汽车的路面附着系数估计,分别用卡尔曼滤波对电动汽车四个车轮的路面附着系数进行估计 本模型参考scilunwen搭建,开发了分布式驱动电动汽车路面附着系数估计的进阶版本,可在高速,低
- 基于SSM框架的酒店管理系统设计与实现.zip
- 四种回归模型对比,EWOA-BP GA-BP SSA-BP BP回归预测,基于改进鲸鱼优化算法(EWOA)优化BP神经网络的数据回归预测 内含EWOA-BP,GA-BP,SSA-BP,BP四种模型对比
- IGWO-RF多特征回归,基于改进灰狼算法(IGWO)优化随机森林(RF)数据回归预测 改进点:两个点 初始化改进收敛因子改进 1、运行环境要求MATLAB版本为2018b及其以上 2、评价指标包括:
- 基于JavaWeb和SSM框架的校园帮服务平台设计与实现-毕业设计课程设计.zip
- CNN-LSTM-Attention分类,基于卷积神经网络-长短期记忆网络结合注意力机制(CNN-LSTM-Attention)分类预测 MATLAB语言(要求2020版本以上) 中文注释清楚
- 五合一 Comsol仿真锂枝晶生长 此链接包含多个模型,单枝晶,多枝晶,随机生长 相场,浓度,电场耦合3 5种模型打包带走,配带相关文献
- en.stm32cubeprg-win64-v2-18-0
- 设计与实现基于JavaWeb的校园兼职信息平台-毕业设计课程设计.zip
- comsol周期性结构多极子展开 包含透射谱计算,多极子分解(可导出数据用其他软件绘制也可comsol直接出图)
- 永磁同步电机自抗扰控制模型ADRC
- 完整awss3接口封装类
- #汽车纵向和横向控制 本项目涉及在全自动驾驶框架内进行汽车纵向和横向控制 汽车是一个具有非线性纵向和横向耦合动力学的复杂系统 因此,自动驾驶必须与纵向和横向控制相结合 我们研究了一种基于模型预测
- 基于django的机场安全管理系统-毕设展示系统.zip
- 基于分布式驱动电动汽车的车辆状态估计,可估计包括纵向速度,质心侧偏角,横摆角速度,侧倾角四个状态 四个模型,车身,算法,轮胎模型,可估计包括纵向速度,横摆角速度,质心侧偏角,侧倾角四个自由度等