|
16 | 16 |
|
17 | 17 | package com.snippet.app; |
18 | 18 |
|
19 | | -import com.snippet.R; |
20 | | - |
21 | 19 | import android.app.Activity; |
22 | 20 | import android.hardware.Camera; |
23 | 21 | import android.hardware.Camera.AutoFocusCallback; |
24 | 22 | import android.os.Build; |
25 | 23 | import android.os.Bundle; |
| 24 | +import android.util.DisplayMetrics; |
26 | 25 | import android.util.Log; |
27 | 26 | import android.view.SurfaceHolder; |
28 | 27 | import android.view.SurfaceView; |
29 | 28 | import android.view.View; |
30 | 29 | import android.view.ViewGroup; |
31 | 30 | import android.view.Window; |
32 | 31 | import android.view.WindowManager; |
| 32 | +import android.widget.RelativeLayout; |
33 | 33 | import android.widget.Toast; |
34 | 34 |
|
| 35 | +import com.snippet.R; |
| 36 | + |
35 | 37 | import java.io.IOException; |
36 | 38 | import java.util.ArrayList; |
37 | 39 | import java.util.List; |
38 | 40 |
|
39 | 41 | public class CameraActivity extends Activity { |
40 | 42 |
|
| 43 | + private static final String TAG = CameraActivity.class.getSimpleName(); |
41 | 44 | private Camera myCamera; |
42 | 45 | private boolean mClicked; |
43 | 46 |
|
@@ -89,7 +92,7 @@ public void surfaceCreated(SurfaceHolder holder) { |
89 | 92 | } |
90 | 93 |
|
91 | 94 | public void surfaceChanged(SurfaceHolder holder, int format, int width, |
92 | | - int height) { |
| 95 | + int height) { |
93 | 96 | Camera.Parameters parameters = myCamera.getParameters(); |
94 | 97 |
|
95 | 98 | // Determine picture size |
@@ -171,20 +174,58 @@ public void surfaceChanged(SurfaceHolder holder, int format, int width, |
171 | 174 | + parameters.getPictureSize().height |
172 | 175 | + " AspectRatio: " |
173 | 176 | + ((double) parameters.getPictureSize().width / parameters |
174 | | - .getPictureSize().height)); |
| 177 | + .getPictureSize().height)); |
175 | 178 | Log.i("TEST", "PreviewSize: " |
176 | 179 | + parameters.getPreviewSize().width |
177 | 180 | + ", " |
178 | 181 | + parameters.getPreviewSize().height |
179 | 182 | + " AspectRatio: " |
180 | 183 | + ((double) parameters.getPreviewSize().width / parameters |
181 | | - .getPreviewSize().height)); |
| 184 | + .getPreviewSize().height)); |
182 | 185 | Log.i("TEST", "FocusMode: " + parameters.getFocusMode()); |
183 | 186 |
|
184 | 187 | View surface = findViewById(R.id.surface); |
185 | | - ViewGroup.LayoutParams params = (ViewGroup.LayoutParams) surface.getLayoutParams(); |
186 | | - params.height = parameters.getPreviewSize().height; |
187 | | - params.width = parameters.getPreviewSize().width; |
| 188 | + RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) surface.getLayoutParams(); |
| 189 | + if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.GINGERBREAD_MR1) { |
| 190 | + params.height = parameters.getPreviewSize().height; |
| 191 | + params.width = parameters.getPreviewSize().width; |
| 192 | + params.rightMargin = 0; |
| 193 | + params.addRule(RelativeLayout.CENTER_IN_PARENT); |
| 194 | + } else { |
| 195 | + DisplayMetrics metrics = getResources().getDisplayMetrics(); |
| 196 | + // surface |
| 197 | + float ws = metrics.widthPixels - |
| 198 | + getResources().getDimensionPixelSize(R.dimen.height_element); |
| 199 | + float hs = metrics.heightPixels; |
| 200 | + float rs = ws / hs; |
| 201 | + // preview |
| 202 | + float wp = parameters.getPreviewSize().width; |
| 203 | + float hp = parameters.getPreviewSize().height; |
| 204 | + float rp = parameters.getPreviewSize().width / hp; |
| 205 | + if (rp < rs) { |
| 206 | + Log.i(TAG, "Surface is wider than preview"); |
| 207 | + params.width = (int) ws; |
| 208 | + params.height = (int) (hp * ws / wp); |
| 209 | + params.topMargin = (int) ((hs - params.height) / 2); |
| 210 | + params.bottomMargin = (int) ((hs - params.height) / 2); |
| 211 | + } else { |
| 212 | + Log.i(TAG, "Preview is wider than surface"); |
| 213 | + params.width = (int) (wp * hs / hp); |
| 214 | + params.height = (int) hs; |
| 215 | + params.leftMargin = (int) ((ws - params.width) / 2); |
| 216 | + params.rightMargin = (int) ((ws - params.width) / 2); |
| 217 | + } |
| 218 | + Log.i(TAG, "metrics.widthPixels=" + metrics.widthPixels); |
| 219 | + Log.i(TAG, "metrics.heightPixels=" + metrics.heightPixels); |
| 220 | + Log.i(TAG, "ws=" + ws); |
| 221 | + Log.i(TAG, "hs=" + hs); |
| 222 | + Log.i(TAG, "wp=" + wp); |
| 223 | + Log.i(TAG, "hp=" + hp); |
| 224 | + Log.i(TAG, "params.width=" + params.width); |
| 225 | + Log.i(TAG, "params.height=" + params.height); |
| 226 | + Log.i(TAG, "params.leftMargin=" + params.leftMargin); |
| 227 | + Log.i(TAG, "params.rightMargin=" + params.rightMargin); |
| 228 | + } |
188 | 229 | surface.setLayoutParams(params); |
189 | 230 | surface.requestLayout(); |
190 | 231 |
|
|
0 commit comments