私は、カメラプレビューでスピナー付きのカメラアプリを構築しようとしています。 私は、不必要であると思ったカメラコードをいくつか残しました。スピナーは私がそれを押したときに反応している(色が変わっている)が、落ちない。私のスピナーはかなり小さく(50dp)、矢印が表示されておらず、携帯電話は古いですが、良い状態です(Samsung Galaxy Pocket plus S5301、Androidバージョン4.04)。たぶんこれは表面が変化することと関係がありますか?SurfaceViewのAndroid Spinnerがドロップダウンしない
のJava:
public class CameraActivity extends AppCompatActivity implements SurfaceHolder.Callback {
private Camera camera;
private SurfaceView surfaceView;
private SurfaceHolder surfaceHolder;
Camera.PictureCallback rawCallback;
Camera.ShutterCallback shutterCallback;
Camera.PictureCallback jpegCallback;
private LayoutInflater controlInflater = null;
private final String TAG = " CameraActivity";
static final int REQUEST_IMAGE_CAPTURE = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_camera);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_USER);
getWindow().setFormat(PixelFormat.UNKNOWN);
surfaceView = (SurfaceView)findViewById(R.id.camera_preview);
surfaceHolder = surfaceView.getHolder();
surfaceHolder.addCallback(this);
surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
controlInflater = LayoutInflater.from(getBaseContext());
View viewControl = controlInflater.inflate(R.layout.activity_camera, null);
LayoutParams layoutParamsControl = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
this.addContentView(viewControl, layoutParamsControl);
if(!getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA)) {
Toast.makeText(getApplicationContext(), "Your phone does not have a camera.", Toast.LENGTH_SHORT).show();
finish();
}
Spinner spinner1 = (Spinner) findViewById(R.id.spinner1);
ArrayAdapter<CharSequence> adapter1 = ArrayAdapter.createFromResource(this, R.array.planets_array, android.R.layout.simple_spinner_item);
adapter1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner1.setAdapter(adapter1);
}
public void refreshCamera() {
if (surfaceHolder.getSurface() == null) {
return;
}
try {
camera.stopPreview();
} catch (Exception e) {
e.printStackTrace();
}
try {
camera.setPreviewDisplay(surfaceHolder);
camera.startPreview();
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
try {
camera = Camera.open();
} catch (Exception e) {
e.printStackTrace();
}
Camera.Parameters param;
param = camera.getParameters();
param.setPreviewSize(352, 288);
camera.setParameters(param);
try {
camera.setPreviewDisplay(surfaceHolder);
camera.startPreview();
}
catch (Exception e) {
System.err.println(e);
return;
}
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
refreshCamera();
}
XML
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="package.main.CameraActivity">
<SurfaceView android:id="@+id/camera_preview"
android:layout_width="match_parent"
android:layout_height="match_parent"></SurfaceView>
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<LinearLayout android:id="@+id/topLayout"
android:layout_alignParentTop="true"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Spinner
android:id="@+id/spinner1"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_margin="10dp"
android:dropDownWidth="200dp"
android:paddingRight="14dp"
android:background="@android:drawable/spinner_background"
android:spinnerMode="dropdown" />
//More spinners
</LinearLayout>
//Image in the middle of the screen
</RelativeLayout>
</FrameLayout>
XML値/のstrings.xml
<resources>
<string-array name="planets_array">
<item>Mercury</item>
<item>Venus</item>
<item>Earth</item>
<item>Mars</item>
<item>Jupiter</item>
<item>Saturn</item>
<item>Uranus</item>
<item>Neptune</item>
</string-array>
</resources>
ありがとうございますが、動作しませんでした。 RelativeLayoutに変更しました。私はFrameLayoutをLinearLayoutの周りに置き、スピナーの周りに配置しようとしました。それから、コードからFrameLayoutを削除しました。しかし何も助けなかった。 – TheEagle