Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit cc07229

Browse files
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)

AltStyle によって変換されたページ (->オリジナル) /