編輯:關於Android編程
①、照相機屏幕是橫屏顯示:在清單文件中activity元素的android:screenOrientation
屬性指定顯示狀態,landscape為橫屏顯示,portrait為豎屏顯示。不指定該屬性時是橫豎屏可以切換的。
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
android:screenOrientation="landscape"
android:name=".DemoActivity"
android:label="@string/app_name" >
②、照相機全屏顯示:就是隱藏activity的狀態欄和標題欄。
在activity的onCreate方法中使用requestWindowFeature()方法設置顯示窗體的狀態,為Window.FEATURE_NO_TITLE 無標題狀態。
注意:一定要寫到 setcontentview()方法之前。
public class DemoActivity extends Activity implementsOnClickListener {
public voidonCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//不顯示標題:
// 一定要寫到 setcontentview之前
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.main);
//設置窗體隱藏狀態欄
getWindow().setFlags(
WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
}
}
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
android:id="@+id/sv"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:orientation="horizontal" >
android:id="@+id/autofocus"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="自動對焦" />
android:id="@+id/takepic"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="拍照" />
//獲取各組件
SurfaceView sv = (SurfaceView) this.findViewById(R.id.sv);
//對焦的按鈕
Button autofocus = (Button) this.findViewById(R.id.autofocus);
//拍照
Button takepic = (Button) this.findViewById(R.id.takepic);
//按鈕注冊點擊事件:
autofocus.setOnClickListener(this);
takepic.setOnClickListener(this);
//獲取SurfaceHolder對象
SurfaceHolder holder = sv.getHolder();
// 注意: 要寫在holder創建之前:
holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
//設置SurfaceHolder回調函數
holder.addCallback(new Callback() {
//SurfaceHolder銷毀的方法
public voidsurfaceDestroyed(SurfaceHolder holder) {
camera.release();//釋放資源
camera = null;
}
//SurfaceHolder創建時調用的方法:
public voidsurfaceCreated(SurfaceHolder holder) {
//將創建的SurfaceHolder對象設置給成員變量。
DemoActivity.this.holder = holder;
//照相機對象
camera = Camera.open();
//獲取照相機所有參數的鍵值對字符串.
// String parrten = camera.getParameters().flatten();
// TODO:設置照相機的參數
//獲取照相機參數對象:
Camera.Parameters parms = camera.getParameters();
System.out.println(parms.flatten());
//為參數設置值:
parms.setPreviewFrameRate(5); //每秒顯示的幀數
parms.setPictureSize(1280, 960);//設置寬高
parms.setPictureFormat(PixelFormat.JPEG);//設置照片的輸出格式
parms.set("jpeg-quality", 100);//照片質量
//
// camera.setParameters(parms);
//設置預覽界面,surfaceHolder作為參數:
camera.setPreviewDisplay(holder);
//通過SurfaceView顯示取景畫面
camera.startPreview();//開始預覽
}
@Override
public voidsurfaceChanged(SurfaceHolder holder, int format,
int width, int height) {
}
});
按鈕的點擊事件方法:
public void onClick(View v) {
switch (v.getId()) {
case R.id.autofocus://點擊對焦的按鈕
camera.autoFocus(null);//讓手機對焦的方法:
break;
case R.id.takepic://點擊照相按鈕:
//takePicture方法參數1:按快門,拍照聲音響起時的回調。
參數2:照片後未壓縮圖片的回調
參數3:照片後壓縮成jpeg圖片的回調
camera.takePicture(null, null, new PictureCallback() {
//方法參數1:照片的二進制字節數組
public voidonPictureTaken(byte[] data, Camera camera) {
//判斷sd是否可用
if(Environment.MEDIA_MOUNTED.equals(
Environment.getExternalStorageState())){
//TODO:保存圖片到sd卡
File file = new File(
Environment.getExternalStorageDirectory(),
System.currentTimeMillis()+".jpg");
FileOutputStream fos = new FileOutputStream(file);
// fos.write(data);
// fos.flush();
// fos.close();
//decodeByteArray()方法獲取Bitmap對象
Bitmap bm =BitmapFactory.decodeByteArray(data, 0, data.length);
//壓縮方法:
參數1:壓縮的圖片格式。
參數2:文件質量
參數3:文件的輸出流
bm.compress(CompressFormat.JPEG,50, fos);
fos.flush();
fos.close();
Toast.makeText(
getApplicationContext(),"保存圖片成功", 1).show();
camera.startPreview();//重新開始預覽圖片
}else{
Toast.makeText(getApplicationContext(), "sd卡不可用", 1).show();
}
}
});
break;
}
}
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
android:id="@+id/sv"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:orientation="horizontal" >
android:id="@+id/recoder"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="錄制" />
android:id="@+id/stop"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:enabled="false"
android:clickable="false"
android:text="停止" />
public class DemoActivity extends Activity implementsOnClickListener {
private SurfaceView sv;
private Buttonstart,stop;
private SurfaceHolderholder;
private MediaRecorderrecorder;
@Override
public voidonCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//獲取組件
sv = (SurfaceView)this.findViewById(R.id.sv);
//獲取surfaceHolder
holder =sv.getHolder();
holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
start = (Button)this.findViewById(R.id.recoder);
stop = (Button)this.findViewById(R.id.stop);
start.setOnClickListener(this);
stop.setOnClickListener(this);
//SurfaceHolder 的回調
holder.addCallback(new Callback() {
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
//
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
DemoActivity.this.holder= holder;
//創建MediaRecorder對象
recorder = newMediaRecorder();
recorder.reset();
//從照相機采集視頻
recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
//設置采集音頻
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
//設置輸出格式
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
//設置大小
recorder.setVideoSize(720,480); // TODO ?
recorder.setVideoFrameRate(3);//每秒3幀
//設置視頻編碼方式
recorder.setVideoEncoder(MediaRecorder.VideoEncoder.H263);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
//判斷sd是否可用 if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
//創建視頻文件對象
File file = new File (
Environment.getExternalStorageDirectory(),
System.currentTimeMillis()+".3gp");
//視頻輸出的文件
recorder.setOutputFile(file.getAbsolutePath());
//設置顯示
recorder.setPreviewDisplay(DemoActivity.this.holder.getSurface());
}else{
Toast.makeText(getApplicationContext(), "sd卡不可用", 1).show();
}
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, intwidth,
int height) {
// TODO Auto-generatedmethod stub
}
});
}
//按鈕的點擊事件方法
public void onClick(Viewv) {
switch (v.getId()) {
case R.id.recoder://錄制按鈕
try {
recorder.prepare();//准備錄制
} catch (Exception e) {
Toast.makeText(getApplicationContext(), "錄制准備失敗", 0).show();
e.printStackTrace();
}//預期准備
recorder.start();
stop.setEnabled(true);
stop.setClickable(true);
start.setEnabled(false);
start.setClickable(false);
break;
case R.id.stop://停止按鈕
recorder.stop();
recorder.release();
start.setEnabled(true);
start.setClickable(true);
stop.setEnabled(false);
stop.setClickable(false);
break;
}
}
}
public class DemoActivity extends Activity {
/** Called when theactivity is first created. */
private ImageView iv;
@Override
public voidonCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
iv = (ImageView)this.findViewById(R.id.iv);
}
//點擊按鈕的事件方法:
public void click(Viewview){
//隱式意圖 獲取系統照相機組件
Intent intent = new Intent();
intent.setAction("android.media.action.IMAGE_CAPTURE");
intent.addCategory("android.intent.category.DEFAULT");
startActivityForResult(intent, 0); //以獲取返回值開啟組件
}
//以帶返回值形式開啟組件 ,觸發的方法:
protected voidonActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
// new Intent("inline-data").putExtra("data",bitmap);
System.out.println("獲取到照片");
if(data!=null){
Uri uri = data.getData();
//iv.setImageURI(uri);
//System.out.println(uri.toString());
String str = data.getAction();
if(str!=null){
System.out.println(str);
}
//查看源代碼 獲取圖片
Bitmap bitmap =data.getParcelableExtra("data");
//將圖片設置在ImageView中顯示:
iv.setImageBitmap(bitmap);
}
}
}
public class DemoActivity extends Activity {
/** Called when theactivity is first created. */
private ImageView iv;
@Override
public voidonCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
iv = (ImageView)this.findViewById(R.id.iv);
}
//按鈕的點擊方法
public void click(Viewview){
//隱式意圖激活系統錄制視頻組件
Intent intent = new Intent();
intent.setAction("android.media.action.VIDEO_CAPTURE");
intent.addCategory("android.intent.category.DEFAULT");
startActivityForResult(intent, 0);
}
@Override
protected voidonActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
// new Intent("inline-data").putExtra("data",bitmap);
System.out.println("獲取到照片");
if(data!=null){
Uri uri = data.getData();
通過獲取的uri 播放錄制的視頻
}
}
}
android中提供了4中動畫: AlphaAnimation 透明度動畫效果 ScaleAnimation 縮放動畫效果 TranslateAnimation 位移動畫
Android基礎入門教程——2.4.6 ListView的數據更新問題標簽(空格分隔): Android基礎入門教程本節引言: 我們前面已經學習
前言開發做得久了,總免不了會遇到各種坑。而在Android開發的路上,『軟鍵盤擋住了輸入框』這個坑,可謂是一個曠日持久的巨坑——來來來,我們慢慢看
本文在《7種形式的Android Dialog使用實例》在這篇文章的基礎進行學習,具體內容如下1.概述 android原生控件向來以丑著稱(新推出的Material D