由於要用到數據庫
所有先要添加mysql-connector-java-5.0.3-bin.jar到路徑
選擇工程右鍵選擇java bulid path 右邊點擊add external jar 選擇文件
首先這是主類
package com.example.mytestcam;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List;
import android.app.Activity;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.graphics.PixelFormat;
import android.hardware.Camera;
import android.hardware.Camera.AutoFocusCallback;
import android.hardware.Camera.Parameters;
import android.hardware.Camera.PictureCallback;
import android.hardware.Camera.PreviewCallback;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.os.Message;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.SurfaceHolder;
import android.view.SurfaceHolder.Callback;
import android.view.SurfaceView;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.RelativeLayout;
publicclassMyTestCamextendsActivityimplementsCallback {
String mySdcard;
String myWorkDir="/myworkdir";
publicStringmJpgFileName="noPic";
publicStringmSecondJpgFileName="noPic";
public final StringTAG="TAG";
publiclongtime;
SurfaceViewsurfaceView;
SurfaceHoldersurfaceHolder;
Buttonbtn,btn2;
HandlermyHander;
CameramCamera;
booleanisPreview=false;
booleanmSecondPic=false;
Parametersparmeters;
RelativeLayoutrelativeLayout;
//畫邊框的View
MyRectViewmyView;
String [] mJpgFileNameArray=newString[2];
Test_SQL db;
@Override
publicvoidonCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().setFormat(PixelFormat.TRANSLUCENT);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
setContentView(R.layout.activity_my_test_cam);
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
int screenWidth = dm.widthPixels;
int screenHeight= dm.heightPixels;
LOG("screenWidth="+screenWidth+"screenHeight="+screenHeight);
surfaceView=(SurfaceView)findViewById(R.id.surface_view);
btn=(Button)findViewById(R.id.takPic);
btn2=(Button)findViewById(R.id.showPic);
btn.setOnClickListener(onclicklistener);
btn2.setOnClickListener(onclicklistener);
mySdcard=Environment.getExternalStorageDirectory().toString();
myWorkDir =String.format("%s%s",mySdcard,myWorkDir);
surfaceHolder=surfaceView.getHolder();
surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
surfaceHolder.addCallback(this);
myHander=new MyHandler();
myHander.sendEmptyMessage(0);
myView=new MyRectView(MyTestCam.this);
relativeLayout=(RelativeLayout)findViewById(R.id.relativeLayout);
relativeLayout.addView(myView);
db=new Test_SQL(this);
if(!createWorkDir(myWorkDir))
{
LOG("can't open Work Dir");
}
}
// 這段是測試 android的生命週期的
protectedvoidonDestroy() {
LOG(TAG,"onDestroy()");
super.onDestroy();
}
@Override
protectedvoid onPause() {
LOG(TAG,"onPause()");
super.onPause();
}
@Override
protectedvoid onRestart() {
LOG(TAG,"onRestart()");
super.onRestart();
}
@Override
protectedvoid onResume() {
LOG(TAG,"onResume()");
super.onResume();
}
@Override
protectedvoid onStart() {
LOG(TAG,"onStart()");
super.onStart();
}
@Override
protectedvoid onStop() {
LOG(TAG,"onStop()");
super.onStop();
}
publicstaticfinalinttakeMyFirstPic=0x001;
publicstaticfinalinttakeMySecondPic=0x002;
//注意handler的用法 在oncreate裏面初始化 然後
// 當有handler發送信息時 這是由系統調用的
publicclassMyHandlerextendsHandler
{
MyHandler(){}
publicvoid handleMessage(Messagemsg)
{
switch (msg.what) {
casetakeMyFirstPic:
LOG(" case takeMyFirstPic: ");
if (mCamera !=null)
{
mCamera.setPreviewCallback(null);
//拍照
mCamera.takePicture(null,null,JpegCallBack);
}
break;
casetakeMySecondPic:
LOG(" case takeMySecondPic: ");
if (mCamera !=null)
{
mCamera.setPreviewCallback(null);
mCamera.takePicture(null,null,JpegCallBack);
}
break;
default:
;
}
}
}
OnClickListener onclicklistener=newOnClickListener()
{
@Override
publicvoid onClick(View v)
{
switch(v.getId()){
// 照相按鈕 點擊後
case R.id.takPic:
mSecondPic=false;
//獲得系統時間
time=System.currentTimeMillis();
mJpgFileName=String.format("%s/%d_1.jpg",myWorkDir,time);
LOG(mJpgFileName);
mSecondJpgFileName=String.format("%s/%d_2.jpg",myWorkDir,time);
db.open();
db.insertPicName(mJpgFileName,mSecondJpgFileName);
db.close();
// 在這裏調用 Focus對焦的功能
mCamera.autoFocus(focusCallback);
break;
//顯示圖片 跳到另外的一個activity 查看intent相關資料
case R.id.showPic:
Intent intent=new Intent();
Bundle bundle=new Bundle();
mJpgFileNameArray[0]=mJpgFileName;
mJpgFileNameArray[1]=mSecondJpgFileName;
bundle.putStringArray("strr",mJpgFileNameArray);
intent.putExtras(bundle);
LOG("intent.putExtras(bundle);");
intent.setClass(MyTestCam.this,MyIntentView.class);
startActivity(intent);
break;
}
}
};
protectedAutoFocusCallbackfocusCallback =newAutoFocusCallback() {
@Override
publicvoid onAutoFocus(boolean success, Camera camera)
{
// handler 發送消息 在 153 行接收 也就是在 classmyhandler 裏面接收的
myHander.sendEmptyMessage(takeMyFirstPic);
}
};
protected PictureCallbackJpegCallBack =new PictureCallback() {
@Override
publicvoid onPictureTaken(byte[] data, Camera camera)
{
//下面是控制拍的第幾張照片
if(mSecondPic)
{
saveImage(mSecondJpgFileName,data);
}
else
{
saveImage(mJpgFileName,data);
}
mCamera.setPreviewCallback(previewCallback);
mCamera.startPreview();
if(!mSecondPic)
{
mSecondPic=!mSecondPic;
// 發送消息拍第二張照片
myHander.sendEmptyMessage(takeMySecondPic);
}
}
};
//菜單按鈕 手機上的菜單鍵纔會有顯示可以不看着一段
//老版本的如果你sdk還沒有下面的onCreateOptionMenu與 onOptionsItemSelected就不要寫
@Override
publicbooleanonCreateOptionsMenu(Menu menu) {
// getMenuInflater().inflate(R.menu.activity_my_test_cam, menu);
super.onPrepareOptionsMenu(menu);
menu.clear();
MenuInflaterinflater=getMenuInflater();
inflater.inflate(R.menu.activity_my_test_cam,menu);
MenuItem item1= menu.add(1,1,1,"Item1");
//使菜單項帶圖片
//在res/drawable-hdpi下面要有 a1這張圖片
item1.setIcon(R.drawable.a1);
MenuItem item2= menu.add(1,2,2,"Item2");
item2.setIcon(R.drawable.a3);
menu.add(3,3,3,"Item3");
menu.add(1,5,5,"Item5");
menu.add(2,6,6,"Item6");
returntrue;
}
//菜單按鈕相應
publicbooleanonOptionsItemSelected(MenuItem item){
int item_id=item.getItemId();
LOG(""+item_id);
switch(item_id) {
case 1:
break;
case 3:
break;
case 6:
break;
default:
break;
}
returntrue;
}
@Override
publicvoidsurfaceChanged(SurfaceHolder holder,int format,int width,
int height)
{
//TODO Auto-generated method stub
}
@Override
publicvoidsurfaceCreated(SurfaceHolder holder)
{
//TODO Auto-generated method stub
initCamera();
}
@Override
publicvoidsurfaceDestroyed(SurfaceHolder holder)
{
//TODO Auto-generated method stub
if (mCamera !=null)
{
if (isPreview)
{
mCamera.setPreviewCallback(null);
mCamera.stopPreview();
}
isPreview =false;
mCamera.release();
mCamera =null;
}
}
PreviewCallback previewCallback=newPreviewCallback() {
@Override
publicvoid onPreviewFrame(byte[] data, Camera camera)
{
//preview的回調數據在這裏處理
//例如保存圖片到SDcard
}
};
protectedvoid initCamera()
{
//TODO Auto-generated method stub
if (mCamera ==null && !isPreview)
{
//打開照相機
mCamera = Camera.open();
}
if (mCamera !=null && !isPreview)
{
try
{
parmeters =mCamera.getParameters();
List<Camera.Size>picSize=parmeters.getSupportedPictureSizes();
int picNum =picSize.size();
Camera.Sizecs=picSize.get(0);
Camera.Sizepics=picSize.get(0);
LOG("PictureSizes_0 ",pics.width+" "+pics.height+" a= "+picNum);
pics=picSize.get(1);
LOG("PictureSizes_1 ",pics.width+" "+pics.height);
pics=picSize.get(2);
LOG("PictureSizes_2 ",pics.width+" "+pics.height);
pics=picSize.get(3);
LOG("PictureSizes_3 ",pics.width+" "+pics.height);
pics=picSize.get(4);
LOG("PictureSizes_4 ",pics.width+" "+pics.height);
pics=picSize.get(5);
LOG("PictureSizes_5 ",pics.width+" "+pics.height);
parmeters.setPreviewSize(cs.width, cs.height);
parmeters.setPictureFormat(PixelFormat.JPEG);
parmeters.setPictureSize(800,600);
mCamera.setParameters(parmeters);
mCamera.setPreviewDisplay(surfaceHolder);
//注意這裏是 preview回調
mCamera.setPreviewCallback(previewCallback);
mCamera.startPreview();
isPreview =true;
}catch(IOException e)
{
//TODO Auto-generated catch block
e.printStackTrace();
}
}
}
publicboolean createWorkDir(StringdirName)
{
if (dirName ==null ||dirName.toLowerCase().compareTo("null") == 0)
returnfalse;
FilepFile = newFile(dirName);
if (!pFile.exists())
{
try
{
boolean rev = pFile.mkdirs();
if (rev)
returntrue;
else
returnfalse;
}catch(Exception e)
{
e.printStackTrace();
returnfalse;
}
}
returntrue;
}
protectedboolean saveImage(StringmJpgFileName2,byte[]data)
{
boolean success=false;
if (mJpgFileName2 !=null)
{
Filefile=newFile(mJpgFileName2);
try
{
FileOutputStreamstream =newFileOutputStream(file);
stream.write(data);
stream.close();
success=true;
}catch(FileNotFoundException e)
{
//TODO Auto-generated catch block
e.printStackTrace();
}catch(IOException e)
{
e.printStackTrace();
}
finally
{
return success;
}
}
else
return success;
}
//最好將函數封裝 方便以後調試
publicvoid LOG(String string)
{
Log.e("MyTestCam",string);
}
// 函數重載
publicvoid LOG(Stringstring,String str1)
{
Log.e(string,str1);
}
}
下面是顯示圖片的類
如下功能 觸屏 圖像對比 以及一些圖像縮放方面的知識。
package com.example.mytestcam;
import java.io.File;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import android.app.Activity;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Matrix;
import android.graphics.PixelFormat;
importandroid.graphics.drawable.BitmapDrawable;
import android.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.Toast;
public class MyIntentView extends Activity
{
// 這是屏幕的寬度
intx = 400, y;
booleanfirstPic = true;
String[]name = null;
ImageViewimaOne, imaTwo;
RelativeLayoutrelativeLayout;
MyDrawLineViewmyView;
Bitmapbm1, bm2;
Test_SQLdb;
publicvoid onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
//去掉屏蔽的標題
getWindow().setFormat(PixelFormat.TRANSLUCENT);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
//設置屏幕的橫豎屏
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
setContentView(R.layout.myview);
LOG("myview");
Intentintent = getIntent();
LOG("Intentintent = getIntent();");
Bundlebunde = intent.getExtras();
LOG("Bundlebunde = intent.getExtras(); ");
name= bunde.getStringArray("strr");
db=newTest_SQL(this);
imaOne= (ImageView) findViewById(R.id.first_view);
imaTwo= (ImageView) findViewById(R.id.sec_view);
myView= new MyDrawLineView(MyIntentView.this);
relativeLayout= (RelativeLayout) findViewById(R.id.relativeLayout1);
relativeLayout.addView(myView);
//
LOG("Stringname = bunde.getString");
LOG("Stringname = bunde.getString" + name.toString());
if(name[0].equals("noPic"))
{
db.open();
Cursorc=db.getLastPicName();
name[0]=c.getString(1);
name[1]=c.getString(2);
db.close();
LOG(name[0]);
LOG(name[1]);
}else
{
db.open();
Cursorc=db.getLastPicName();
if(name[0].equals(c.getString(1)));
else
db.insertPicName(name[0],name[1]);
db.close();
LOG("getLastPicName", name[0]);
LOG("getLastPicName",name[1]);
}
loadPic(name[0]);
loadPic(name[1]);
}
@Override
publicboolean onTouchEvent(MotionEvent event)
{
//TODO Auto-generated method stub
// LOG("onTouch ");
x= (int) event.getX();
y= (int) event.getY();
if(event.getAction() == MotionEvent.ACTION_DOWN)
{
LOG("MotionEvent.ACTION_DOWN" + " x= " + x);
myView.drawLine(x,600);
myView.invalidate();
// 我的屏幕顯示後照片的大小寬度是800當手在這範圍裏就從畫圖片 超過者範圍就直接是完整的圖片
if(x > 800)
{
x= 800;
}
Bitmap bitmap =Bitmap.createBitmap(bm1, 0, 0, x, 600);
imaOne.setImageBitmap(bitmap);
imaOne.bringToFront();
// bitmap.recycle();
}else if (event.getAction() == MotionEvent.ACTION_MOVE)
{
//LOG("MotionEvent.ACTION_DOWN" + " x= " + x);
myView.drawLine(x, 600);
myView.invalidate();
if(x > 800)
{
x= 800;
}
Bitmapbitmap = Bitmap.createBitmap(bm1, 0, 0, x, 600);
imaOne.setImageBitmap(bitmap);
imaOne.bringToFront();
// bitmap.recycle();
}
super.onTouchEvent(event);
returnfalse;
}
publicvoid loadPic(String str)
{
Filefile;
file= new File(str);
try
{
if(file.exists())
{
//Bitmap bm ;
//這段是可以改變圖片大小
//float newWidth=400, newHeight=300;
//float scaleWidth = (float)newWidth / bm.getWidth();
//float scaleHeight = (float)newHeight / bm.getHeight();
//Matrix m = new Matrix();
//m.postScale(scaleWidth, scaleHeight);
//Bitmap resizedBitmap = Bitmap.createBitmap(bm, 0, 0,
//bm.getWidth(), bm.getHeight(), m, true);
//Bitmap newBitmap=Bitmap.createScaledBitmap(bm, 400, 300,
//true);
if(firstPic)
{
firstPic= !firstPic;
bm1= BitmapFactory.decodeFile(str);
imaOne.setScaleType(ImageView.ScaleType.FIT_START);
//Bitmap bitmap = Bitmap.createBitmap(bm1, 0, 0, x, 600);
Bitmapbitmap = Bitmap.createBitmap(bm1, 0, 0, x, 600);
imaOne.setImageBitmap(bitmap);
// bitmap.recycle();
//Bitmap newBitmap=Bitmap.createScaledBitmap(bm, 400, 300,
//true);
imaOne.bringToFront();
// bitmap.recycle();
//imaOne。setVisible(View.INVISIBLE);
//imaOne.setVisibility(View.INVISIBLE);
}else
{
bm2= BitmapFactory.decodeFile(str);
imaTwo.setScaleType(ImageView.ScaleType.FIT_START);
Bitmapbitmap = Bitmap.createBitmap(bm2, 0, 0, 800, 600);
imaTwo.setImageBitmap(bitmap);
}
}
}catch (Exception e)
{
System.out.println("filenot exist!");
}
}
publicvoid LOG(String string)
{
Log.e("MyTestCam",string);
}
publicvoid LOG(String string ,String str)
{
Log.e(string,str);
}
}
畫圖爲相機加邊框
package com.example.mytestcam;
import java.util.Arrays;
import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Rect;
import android.graphics.Paint.Style;
import android.graphics.RectF;
import android.util.Log;
import android.view.View;
import android.widget.TextView;
public class MyRectView extends View {
private int arry[]=new int[31] ;
public MyRectView(Context context) {
super(context);
Arrays.fill(arry, 0);
}
public void drawrect(int a[])
{
arry=a;
}
@SuppressLint("DrawAllocation")
publicvoid update(){postInvalidate();}
protected void onDraw(Canvas canvas)
{
super.onDraw(canvas);
Paint paint = new Paint();
paint.setColor(android.graphics.Color.RED);
paint.setStrokeWidth(5.0f);
//空心矩形
paint.setStyle(Style.STROKE);
// 繪製一個矩形
canvas.drawRect(new Rect(0, 0, getWidth(), getHeight()), paint);
}
}
畫線類線隨着手指移動
package com.example.mytestcam;
import java.util.Arrays;
import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Rect;
import android.graphics.Paint.Style;
import android.graphics.RectF;
import android.util.Log;
import android.view.View;
import android.widget.TextView;
public class MyDrawLineView extends View {
//x方向與y方向 我圖像寬爲800 畫一豎線到圖片中間 在 myintentView 控制圖像對比
int x=0,y=600;
public MyDrawLineView(Context context) {
super(context);
}
public void drawLine(int a,int b)
{
x=a;
y=b;
}
@SuppressLint("DrawAllocation")
publicvoid update(){postInvalidate();}
protected void onDraw(Canvas canvas)
{
super.onDraw(canvas);
Paint paint = new Paint();
paint.setColor(android.graphics.Color.RED);
paint.setStrokeWidth(5.0f);
//空心矩形
// paint.setStyle(Style.STROKE);
// 繪製一個矩形
if(x==0)
{
x=400;
}
canvas.drawLine(x,0, x, y, paint);
}
}
下面是數據庫封裝的類
package com.example.mytestcam;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
importandroid.database.sqlite.SQLiteDatabase;
importandroid.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
public class Test_SQL // extendsSQLiteOpenHelper
{
publicstatic final String TAG="Test_SQL";
publicstatic final String KEY_ROWID = "_id";
publicstatic final String KEY_PicSource1 = "picSource1";
publicstatic final String KEY_PicSource2 = "picSource2";
privatestatic final String DATABASE_NAME = "picName.db";
privatestatic final int DATABASE_VERSION = 1;
privatestatic final String DATABASE_TABLE = "pic";
privatestatic final String DATABASE_CREATE = "create table pic (_id integerprimary key ,picSource1 text not null,picSource2 text not null);";
//privatestatic final String DATABASE_CREATE = "create table titles (_id integerprimary key autoincrement,isbn text not null,title text not null,publisher textnot null);";
privateSQLiteDatabase db;
privateContext mContext;
DBHelperdbHelper;
publicTest_SQL(Context context)
{
this.mContext=context;
dbHelper=newDBHelper(context);
}
publicTest_SQL open()
{
db=dbHelper.getWritableDatabase();
returnthis;
}
publicvoid close()
{
db.close();
}
publiclong insertPicName(String picSource , String picSource0)
{
ContentValuesvalue= new ContentValues();
value.put(KEY_PicSource1,picSource);
value.put(KEY_PicSource2,picSource0);
returndb.insert(DATABASE_TABLE, null, value);
}
publicboolean deletePicName(long rowId)
{
returndb.delete(DATABASE_TABLE, KEY_ROWID + "=" + rowId, null) > 0;
}
publicCursor getAllPicName()
{
returndb.query(DATABASE_TABLE, new String[] { KEY_ROWID, KEY_PicSource1,KEY_PicSource2 }, null, null, null, null, null);
}
publicCursor getPicName(long rowId) throws SQLException
{
CursormCursor = db.query(true, DATABASE_TABLE, new String[] {
KEY_ROWID,KEY_PicSource1 ,KEY_PicSource2}, KEY_ROWID
+"=" + rowId, null, null, null, null, null);
if(mCursor != null)
{
mCursor.moveToFirst();
}
returnmCursor;
}
publicCursor getLastPicName() throws SQLException
{
intid=0;
CursormCursor=db.query(DATABASE_TABLE, null, null, null, null, null, "_idDESC");
if(mCursor.moveToNext())
{
id =mCursor.getInt(mCursor.getColumnIndex("_id"));
// 這個id就是最大值
Log.e("ID", " msg= "+id);
}
mCursor=db.query(DATABASE_TABLE, new String[] {KEY_ROWID, KEY_PicSource1 ,KEY_PicSource2}, KEY_ROWID+"="+id,null,null, null, null, null);
// mCursor = db.query(true, DATABASE_TABLE, newString[] {
// KEY_ROWID,KEY_PicSource1 ,KEY_PicSource2}, KEY_ROWID
// +"=" + "MAX(rowId)", null, null, null, null, null);
if(mCursor != null)
{
mCursor.moveToFirst();
}
returnmCursor;
}
publicboolean updatePicName(long rowId, String picSource1,String picSource2)
{
ContentValuesvalue= new ContentValues();
value.put(KEY_PicSource1,picSource1);
value.put(KEY_PicSource2,picSource2);
returndb.update(DATABASE_TABLE, value, KEY_ROWID + "=" + rowId, null) >0;
}
publicstatic class DBHelper extends SQLiteOpenHelper
{
publicDBHelper(Context context) {
super(context,DATABASE_NAME, null, DATABASE_VERSION);
//TODO Auto-generated constructor stub
}
@Override
publicvoid onCreate(SQLiteDatabase db)
{
//TODO Auto-generated method stub
db.execSQL(DATABASE_CREATE);
}
@Override
publicvoid onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
{
//TODO Auto-generated method stub
Log.e(TAG,"Upgrading database from version " + oldVersion + " to "
+newVersion + ", which will destroy all old data");
db.execSQL("DROPTABLE IF EXISTS titles");
onCreate(db);
}
}
}
下面是佈局
activity_my_test_cam.xml
<RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/relativeLayout"
>
<SurfaceView
android:id="@+id/surface_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<Button
android:id="@+id/takPic"
android:layout_width="50dip"
android:layout_height="90dip"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:background="@drawable/btn_press"
android:text="bton"/>
<Button
android:id="@+id/showPic"
android:layout_width="50dip"
android:layout_height="90dip"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true"
android:background="@drawable/btn_press"
android:text="bton2"/>
</RelativeLayout>
MyIntentView的佈局
myview.xml
<?xmlversion="1.0"encoding="UTF-8"?>
<RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/relativeLayout1"
>
<ImageView
android:id="@+id/first_view"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_alignParentLeft="true"
/>
<ImageView
android:id="@+id/sec_view"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_alignLeft="@+id/relativeLayout1"
android:layout_alignParentLeft="true"
/>
</RelativeLayout>
Menu
activity_my_test_cam.xml
<menuxmlns:android="http://schemas.android.com/apk/res/android">
<itemandroid:id="@+id/menu_settings"
android:title="@string/menu_settings"
android:orderInCategory="100"
android:showAsAction="never"/>
</menu>
AndroidManifest.xml
<manifestxmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.mytestcam"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="15"/>
<uses-permissionandroid:name="android.permission.CAMERA"/>
<uses-permissionandroid:name="android.permission.READ_PHONE_STATE"/>
<uses-featureandroid:name="android.hardware.camera"/>
<uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permissionandroid:name="android.permission.READ_EXTERNAL_STORAGE"/>
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@android:style/Theme.NoTitleBar"
android:screenOrientation="landscape"
>
<activity
android:name=".MyTestCam"
android:screenOrientation="landscape"
android:label="@string/title_activity_my_test_cam">
<intent-filter>
<actionandroid:name="android.intent.action.MAIN"/>
<categoryandroid:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<activity
android:name=".MyIntentView"
android:screenOrientation="landscape"
android:label="MyIntentView"
android:theme="@android:style/Theme.NoTitleBar">
</activity>
<activity
android:name=".Origintation"
android:label="Origintation"
android:screenOrientation="landscape"
android:theme="@android:style/Theme.NoTitleBar">
</activity>
</application>
</manifest>
OK;裏面的一些變化根據自己情況調整 ,注意看用法。