camera 初学者入门 handler preview focus canvas 图片存放 及数据库调用

来源:互联网 发布:淘宝不支持国际转运 编辑:程序博客网 时间:2024/05/28 09:34

 

 

由于要用到数据库

所有先要添加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();

                                               //imaOnesetVisible(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;里面的一些变化根据自己情况调整 ,注意看用法。