Skip to content

Commit cc07229

Browse files
committed
Changed surface size adjustment for Android 3.0+.
1 parent ab97b12 commit cc07229

File tree

2 files changed

+52
-12
lines changed

2 files changed

+52
-12
lines changed

app/src/main/java/com/snippet/app/CameraActivity.java

Lines changed: 49 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,28 +16,31 @@
1616

1717
package com.snippet.app;
1818

19-
import com.snippet.R;
20-
2119
import android.app.Activity;
2220
import android.hardware.Camera;
2321
import android.hardware.Camera.AutoFocusCallback;
2422
import android.os.Build;
2523
import android.os.Bundle;
24+
import android.util.DisplayMetrics;
2625
import android.util.Log;
2726
import android.view.SurfaceHolder;
2827
import android.view.SurfaceView;
2928
import android.view.View;
3029
import android.view.ViewGroup;
3130
import android.view.Window;
3231
import android.view.WindowManager;
32+
import android.widget.RelativeLayout;
3333
import android.widget.Toast;
3434

35+
import com.snippet.R;
36+
3537
import java.io.IOException;
3638
import java.util.ArrayList;
3739
import java.util.List;
3840

3941
public class CameraActivity extends Activity {
4042

43+
private static final String TAG = CameraActivity.class.getSimpleName();
4144
private Camera myCamera;
4245
private boolean mClicked;
4346

@@ -89,7 +92,7 @@ public void surfaceCreated(SurfaceHolder holder) {
8992
}
9093

9194
public void surfaceChanged(SurfaceHolder holder, int format, int width,
92-
int height) {
95+
int height) {
9396
Camera.Parameters parameters = myCamera.getParameters();
9497

9598
// Determine picture size
@@ -171,20 +174,58 @@ public void surfaceChanged(SurfaceHolder holder, int format, int width,
171174
+ parameters.getPictureSize().height
172175
+ " AspectRatio: "
173176
+ ((double) parameters.getPictureSize().width / parameters
174-
.getPictureSize().height));
177+
.getPictureSize().height));
175178
Log.i("TEST", "PreviewSize: "
176179
+ parameters.getPreviewSize().width
177180
+ ", "
178181
+ parameters.getPreviewSize().height
179182
+ " AspectRatio: "
180183
+ ((double) parameters.getPreviewSize().width / parameters
181-
.getPreviewSize().height));
184+
.getPreviewSize().height));
182185
Log.i("TEST", "FocusMode: " + parameters.getFocusMode());
183186

184187
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+
}
188229
surface.setLayoutParams(params);
189230
surface.requestLayout();
190231

app/src/main/res/layout/activity_camera.xml

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,14 @@
11
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
2-
xmlns:tools="http://schemas.android.com/tools"
32
android:id="@+id/parent"
43
android:layout_width="match_parent"
54
android:layout_height="match_parent"
65
android:background="@android:color/black" >
76

87
<SurfaceView
98
android:id="@+id/surface"
10-
android:layout_width="wrap_content"
11-
android:layout_height="wrap_content"
12-
android:layout_centerInParent="true" />
9+
android:layout_width="match_parent"
10+
android:layout_height="match_parent"
11+
android:layout_marginRight="@dimen/height_element" />
1312

1413
<LinearLayout
1514
android:id="@+id/header"

0 commit comments

Comments
 (0)