安卓定制的相机变焦不工作(Android Custom Camera Zoom Not Workin

2019-09-02 12:18发布

我已经看到了关于这个问题的其他几个问题,但似乎没有解决我的问题。 我有一个自定义的相机应用,工作正常,一切,但变焦按钮。 这是使用SDK分8靶14我的代码:

@Override
        public void surfaceChanged(SurfaceHolder holder, int format, int width,
                int height) {
            if (isPreviewing){ 
                camera.stopPreview(); 
            }

            Camera.Parameters p = camera.getParameters();
            p.setPreviewSize(sizes.get(0).width, sizes.get(0).height);
            p.setColorEffect(effect); 

            zoomControls = (ZoomControls) findViewById(R.id.zoomControls);

            if (p.isZoomSupported()) {
                maxZoomLevel = p.getMaxZoom();
                Toast.makeText(PictureTaker.this, String.valueOf(maxZoomLevel),Toast.LENGTH_LONG).show();
                zoomControls.setIsZoomInEnabled(true);
                zoomControls.setIsZoomOutEnabled(true);

                zoomControls.setOnZoomInClickListener(new OnClickListener() {
                    public void onClick(View v) {
                        if (currentZoomLevel < maxZoomLevel) {
                            currentZoomLevel++;
                            camera.startSmoothZoom(currentZoomLevel);
                            //Toast.makeText(PictureTaker.this, String.valueOf(currentZoomLevel),Toast.LENGTH_LONG).show();
                        }
                    }
                });

                zoomControls.setOnZoomOutClickListener(new OnClickListener() {
                    public void onClick(View v) {
                        if (currentZoomLevel > 0) {
                            currentZoomLevel--;
                            camera.startSmoothZoom(currentZoomLevel);
                        }
                    }
                });
            } else {
                zoomControls.setVisibility(View.GONE);
            }

            camera.setParameters(p); 

            try {
                camera.setPreviewDisplay(holder); 
            } // end try
            catch (IOException e) {
                Log.v(TAG, e.toString());
            } // end catch

            camera.startPreview(); // begin the preview
            isPreviewing = true;
        }

该setColorEffect从选项菜单来了,完美的作品。 我知道isZoomSupported和getMaxZoom正在因为吐司显示“59”的代码运行时,而变焦按钮无可奈何。 这是从XML的zoomControl可

<ZoomControls
 android:id="@+id/zoomControls"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:layout_alignParentBottom="true"
 android:layout_centerHorizontal="true"
 android:layout_marginBottom="17dp"
 android:baselineAligned="false"
 android:gravity="center_horizontal"
 android:orientation="horizontal" />

我在清单的所有必要的权限,并没有错误显示logcat中。 不知道我做错了。 我添加了一个第二吐司报告如果当按下该按钮的currentZoomLevel被改变和它示出了由每次一得到递增的值。 我也尝试不使用startSmoothZoom,只是设置了变焦与

p.setZoom(currentZoomLevel); or p.setZoomLevel(15); 

并没有一个作品无论是。 我的手机,HTC不可思议确实有它的原生相机应用完美的工作变焦。 如果我注释掉的代码zoomControl可部分,一切工作正常,甚至与在那里zoomControl可代码专用相机做工细腻其他所有功能,它只是不放大。

Answer 1:

想通了,也许这可以帮助一些已经有类似的问题谁是其他人的。 这是smoothzoom。 猜猜我的HTC不支持这一点。

@Override
        public void surfaceChanged(SurfaceHolder holder, int format, int width,
                int height) {
            if (isPreviewing){ 
                camera.stopPreview(); 
            }

            p = camera.getParameters();
            p.setPreviewSize(sizes.get(0).width, sizes.get(0).height);
            p.setColorEffect(effect); 



            if (p.isZoomSupported() && p.isSmoothZoomSupported()) {
                //most phones
                maxZoomLevel = p.getMaxZoom();

                zoomControls.setIsZoomInEnabled(true);
                zoomControls.setIsZoomOutEnabled(true);

                zoomControls.setOnZoomInClickListener(new OnClickListener() {
                    public void onClick(View v) {
                        if (currentZoomLevel < maxZoomLevel) {
                            currentZoomLevel++;
                            camera.startSmoothZoom(currentZoomLevel);

                        }
                    }
                });

                zoomControls.setOnZoomOutClickListener(new OnClickListener() {
                    public void onClick(View v) {
                        if (currentZoomLevel > 0) {
                            currentZoomLevel--;
                            camera.startSmoothZoom(currentZoomLevel);
                        }
                    }
                });
            } else if (p.isZoomSupported() && !p.isSmoothZoomSupported()){
                //stupid HTC phones
                maxZoomLevel = p.getMaxZoom();

                zoomControls.setIsZoomInEnabled(true);
                zoomControls.setIsZoomOutEnabled(true);

                zoomControls.setOnZoomInClickListener(new OnClickListener() {
                    public void onClick(View v) {
                        if (currentZoomLevel < maxZoomLevel) {
                            currentZoomLevel++;
                            p.setZoom(currentZoomLevel);
                            camera.setParameters(p);

                        }
                    }
                });

                zoomControls.setOnZoomOutClickListener(new OnClickListener() {
                    public void onClick(View v) {
                        if (currentZoomLevel > 0) {
                            currentZoomLevel--;
                            p.setZoom(currentZoomLevel);
                            camera.setParameters(p);
                        }
                    }
                });
            }else{
                //no zoom on phone
                zoomControls.setVisibility(View.GONE);
            }

            camera.setParameters(p); 

            try {
                camera.setPreviewDisplay(holder); 
            } // end try
            catch (IOException e) {
                Log.v(TAG, e.toString());
            } // end catch

            camera.startPreview(); // begin the preview
            isPreviewing = true;
        } // end method surfaceChanged

这让在步骤我的HTC变焦。 关键是每个按钮点击后设置相机的参数。 你也许可以设置currentZoomLevel你想要的任何数量的基础上,maxZoomLevel,(我的HTC是59,但我的Droid 4只有15),中了ZoomControls的点击,使设备放大和缩小速度更快。 可能是编写此,或许应该把一些检查,以确保maxZoomSize不返回NULL或东西整洁的方式,但它的工作在多个设备上。



Answer 2:

其简单的忘记startSmoothZoom()方法

遵循此:

Camera.Parameters params = camera.getParameters();
params.setZoom(zoom_value);
camera.setParameters(params);


Answer 3:

params.setZoom(currentZoomLevel); camera.setParameters(PARAMS); 代码也是在我的三星G3手机工作。



文章来源: Android Custom Camera Zoom Not Working