基于opencv的相机之增加图库功能(五)

简介

  继续在之前基础上,添加图库功能。

mapstorageActivity

具体代码

  1、在预览拍照界面上,加上图库按钮。点击该按钮则进入到图库当中。
@Override
public void onClick(View v) {
    // TODO Auto-generated method stub
    ...............
    else if(v.getId() == 5){                 
    if(myVariable.myMapstorageFlag == 0){
         myVariable.myMapstorageFlag = 1;
    }else{
         myVariable.myMapstorageFlag = 0;
    }
         Intent intent = new Intent(MainActivity.this, mapstorageActivity.class);
         startActivity(intent);
         myVariable.mOpenCvCameraView.disableView();
    }
}
    注意在进入mapstorageActivity之后,需要使用myVariable.mOpenCvCameraView.disableView(),关闭掉camera,否则当从新返回预览拍照界面时候,出出现camera无法连接的错误。
  2、mapstorageActivity中,从上到下,一共有4个可操作控件,最上方的是返回和图片选择控件。
mapvariable.myMapBack.setOnClickListener(new OnClickListener() {
 @Override
 public void onClick(View v) {
          // TODO Auto-generated method stub
          Intent intent = new Intent(mapstorageActivity.this, MapFilePathActivity.class);
      startActivity(intent);
          finish();
     }
});
mapvariable.myMapChoice.setOnClickListener(new OnClickListener() {               
 @Override
 public void onClick(View arg0) {
    // TODO Auto-generated method stub
    if(mapvariable.imageFilePath != 100){
     Intent intent = new Intent();  
         intent.putExtra("picNumber", mapvariable.imageCurNumber);
         intent.putExtra("doPicEditing", mapvariable.adjustEdit);
     Bundle b=new Bundle();  
     b.putStringArray("imageIds", mapvariable.imageIds);  
     intent.putExtras(b);  
     intent.setClass(mapstorageActivity.this, PicDoing.class);   
          mapstorageActivity.this.startActivity(intent);
          finish();
     }else{
          Intent intent = new Intent();  
          intent.putExtra("PingTuPicture", mapvariable.imageIds[mapvariable.imageCurNumber]);  
          setResult(100, intent);  
          mapstorageActivity.this.finish();  
     }
     }
 });
    点击返回之后,图库继续回退到MapFilePathActivity界面中。
    点击选择之后,图库将当前被选择的图片,作为参数,然后进入到PicDoing界面中;另外如果解析到的imageFilePath 为100的特殊情况,则会进入一些
其他处理。
  3、接着是一个ImageView的图像显示窗口,在该窗口上,将会显示出当前被选中的图片;
另外,在该窗口上左右滑动时候,会进行图片切换;在长按该窗口之后也会默认选择该图片,继续进入到PicDoing界面中。
    mapvariable.mapGestureDetector = new GestureDetector(this, this);
@Override
public void onLongPress(MotionEvent e) {
    // TODO Auto-generated method stub
    if(mapvariable.imageFilePath != 100){
        Intent intent = new Intent();  
        intent.putExtra("picNumber", mapvariable.imageCurNumber);  
        Bundle b=new Bundle();  
        b.putStringArray("imageIds", mapvariable.imageIds);  
        intent.putExtras(b);  
        intent.setClass(mapstorageActivity.this, PicDoing.class);   
        this.startActivity(intent);
        finish();
    }else{
        Intent intent = new Intent();  
        intent.putExtra("PingTuPicture", mapvariable.imageIds[mapvariable.imageCurNumber]);  
        setResult(100, intent);  
        mapstorageActivity.this.finish();  
    }
}
    @Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
        float velocityY) {
    // TODO Auto-generated method stub
    if(e1.getX() - e2.getX() > mapvariable.mapFilpDistance){
        if(mapvariable.imageCurNumber < mapvariable.imageNumber - 1){
            mapvariable.imageCurNumber += 1;
        }
        Bitmap bitmap = mapvariable.mapimageScane.getLoacalBitmap(mapvariable.imageIds[mapvariable.imageCurNumber]);
        mapvariable.mapStorageImageView_1.setImageBitmap(bitmap);
    }
    if(e2.getX() - e1.getX() > mapvariable.mapFilpDistance){
        if(mapvariable.imageCurNumber > 0){
            mapvariable.imageCurNumber -= 1;
        }
        Bitmap bitmap = mapvariable.mapimageScane.getLoacalBitmap(mapvariable.imageIds[mapvariable.imageCurNumber]);
        mapvariable.mapStorageImageView_1.setImageBitmap(bitmap);
 
    }
    return true;
}
    这里注册了一个手势操作GestureDetector,onFling表示为滑动,根据检查出来的左右滑动,切换显示选中的图片。
  4、最下面是一个Gallery组件,当前目录下的所有图片都导入进去,当滑动gallery的时候,同样对应更新选中的图片,并imageview中显示出来。	       
  5、当进入mapstorageActivity,但是mycamera并没有图片的时候,会进入到nopictue的布局,点击中间的camera图片,会重新退回到预览拍照界面。
@Override
public void onClick(View v) {
   if(v.getId() == 0){
   finish();
   }
}           
 
public void noPicture(mapVariable mapvariable,Context context, MapButtonListener btnFirstMapMenu){
    LinearLayout.LayoutParams lp;
     
    mapvariable.retBtnCamera = new ImageButton(context);
    mapvariable.retBtnCamera .setId(0);
    mapvariable.retBtnCamera.setImageResource(R.drawable.image_picture);
    lp = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT, 1);
    mapvariable.retBtnCamera.setLayoutParams(lp);
    mapvariable.retBtnCamera.setBackgroundColor(Color.BLACK);
    mapvariable.retBtnCamera.setOnClickListener(btnFirstMapMenu);
    mapvariable.retBtnCamera.setOnTouchListener(btnFirstMapMenu);
     
}
效果演示
  效果截图如下:
                  
                (没有图片)                                                 (正常图库)

MapFilePathActivity

  1、在最顶部有一个返回控件,点击之后,会退回到预览拍照界面。
mapFilePathVariable.myMapFilePathBack.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
     // TODO Auto-generated method stub                 
     Intent intent = new Intent(MapFilePathActivity.this, MainActivity.class);
     startActivity(intent);
     finish();
   }
});
     2、接着是图片选择的文件夹目录选项,当前有mycamera和secret两个目录,点击对应选项,进入到mapstorageActivity界面,显示出该目录的图片信息。
class MapButtonListener implements OnClickListener, OnTouchListener{
    @Override
    public boolean onTouch(View arg0, MotionEvent arg1) {
        if(arg0.getId() == 0){
            Intent intent = new Intent();  
            intent.putExtra("GridViewMycameraPicNumber", mapFilePathVariable.myMapFilePath_mycamera_number); 
            intent.putExtra("GridViewSecretPicNumber", mapFilePathVariable.myMapFilePath_secret_number);
            intent.putExtra("curFilePath", arg0.getId());
            Bundle b=new Bundle();  
            b.putStringArray("mapstroaImageIds", mapFilePathVariable.imageIds);  
            intent.putExtras(b);  
            intent.setClass(MapFilePathActivity.this, mapstorageActivity.class);   
            MapFilePathActivity.this.startActivity(intent);
            finish();
        }else if(arg0.getId() == 1){
            Intent intent = new Intent();  
            intent.putExtra("mapstroaMycameraPicNumber", mapFilePathVariable.myMapFilePath_mycamera_number); 
            intent.putExtra("mapstroaSecretPicNumber", mapFilePathVariable.myMapFilePath_secret_number);
            intent.putExtra("curFilePath", arg0.getId());
            Bundle b=new Bundle();  
            b.putStringArray("mapstroaImageIds", mapFilePathVariable.imageIds);  
            intent.putExtras(b);  
            intent.setClass(MapFilePathActivity.this, mapstorageActivity.class);   
            MapFilePathActivity.this.startActivity(intent);
            finish();
        }
        // TODO Auto-generated method stub  
        return false;
    }
   有设置目录mycamera的ID为0,secret目录的ID为1。

效果演示

  效果截图如下:
         
                (图片目录选择)
具体演示下载:http://download.csdn.net/detail/u011630458/9261617

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值