Android中Camera的聚焦流程---应用层

本文详细探讨了在Android应用层中,特别是展锐平台的相机应用,如何触发并处理聚焦功能。从点击屏幕事件出发,经过FocusOverlayManager和PhotoModule的交互,深入到AutoFocusCallback的回调以及FocusManager中的聚焦完成和取消聚焦操作。同时,还阐述了更新聚焦框UI的过程和相机状态、聚焦状态的变化。对于底层实现,如聚焦命令的下发和回调,建议有兴趣的读者查阅源码。
摘要由CSDN通过智能技术生成

在Camera中,autofocus是个很重要的知识点,一般有移动对焦,点击聚焦和长按聚焦,这里我们以展锐平台相机的点击聚焦为例,分析下聚焦在app层的流程。

1、聚焦触发

点击屏幕事件的触发
PhotoModule.java的onSingleTapUp中

 public void onSingleTapUp(View view, int x, int y) {
   
 	......
 	//调用FocusManager的singletap
 	mFocusManager.onSingleTapUp(x, y);
 }

FocusOverlayManager.java的onSingleTapUp中

public void onSingleTapUp(int x, int y) {
   
         
        lastSingleTap.set(x,y);
        //如果当前已经是定焦的,取消定焦,重新对焦
        if(isAFLock) {
   
            sendCancleMsg(false);
            mListener.setAELock(false);
            isAFLock = false;
        }

        //没有初始化或者拍照前的聚焦的状态,直接返回
        if (!mInitialized || mState == STATE_FOCUSING_SNAP_ON_FINISH) {
    
            return;
        }
        //让用户可以取消掉之前未消失的触摸聚焦
        if ((mFocusArea != null) && (mState == STATE_FOCUSING ||
                mState == STATE_SUCCESS || mState == STATE_FAIL)) {
    
            cancelAutoFocus();
        }
        if (mPreviewRect.width() == 0 || mPreviewRect.height() == 0) {
   
            return;
        }
     
        // Initialize variables.
        if (mAutoChasingSupported && mAutoChasingEnable){
   
            boolean isChasing = isAutoChasing();
            if (isChasing) {
   
                initializeAutoChasingRegion(0,0);
                Log.d(TAG,"set chasing Region x = 0 , y = 0");
                mListener.setAutoChasingParameters();
            }
        }

        //初始化聚焦的区域
        // Initialize mFocusArea.
        if (mFocusAreaSupported) {
   
            initializeFocusAreas(x, y);
            mFocusRing.setFocusLocation(x, y);
        }
        // Initialize mMeteringArea.
        if (mMeteringAreaSupported) {
   
            initializeMeteringAreas(x, y);
        }

        // Log manual tap to focus.
        mTouchCoordinate = new TouchCoordinate
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值