parent
cd69904e59
commit
62200fff4b
@ -0,0 +1,245 @@ |
||||
package com.github.florent37.camerafragment.sample; |
||||
|
||||
import android.Manifest; |
||||
import android.content.Intent; |
||||
import android.content.pm.PackageManager; |
||||
import android.os.Build; |
||||
import android.os.Bundle; |
||||
import android.support.annotation.NonNull; |
||||
import android.support.annotation.RequiresPermission; |
||||
import android.support.v4.app.ActivityCompat; |
||||
import android.support.v4.view.ViewCompat; |
||||
import android.support.v7.app.AppCompatActivity; |
||||
import android.view.View; |
||||
import android.widget.Button; |
||||
import android.widget.TextView; |
||||
|
||||
import com.github.florent37.camerafragment.CameraFragment; |
||||
import com.github.florent37.camerafragment.CameraFragmentApi; |
||||
import com.github.florent37.camerafragment.PreviewActivity; |
||||
import com.github.florent37.camerafragment.configuration.Configuration; |
||||
import com.github.florent37.camerafragment.listeners.CameraFragmentControlsListener; |
||||
import com.github.florent37.camerafragment.listeners.CameraFragmentResultListener; |
||||
import com.github.florent37.camerafragment.listeners.CameraFragmentStateListener; |
||||
import com.github.florent37.camerafragment.listeners.CameraFragmentVideoRecordTextListener; |
||||
import com.github.florent37.camerafragment.widgets.CameraSettingsView; |
||||
import com.github.florent37.camerafragment.widgets.CameraSwitchView; |
||||
import com.github.florent37.camerafragment.widgets.FlashSwitchView; |
||||
import com.github.florent37.camerafragment.widgets.MediaActionSwitchView; |
||||
import com.github.florent37.camerafragment.widgets.RecordButton; |
||||
|
||||
import java.io.File; |
||||
import java.util.ArrayList; |
||||
import java.util.List; |
||||
|
||||
import butterknife.Bind; |
||||
import butterknife.ButterKnife; |
||||
import butterknife.OnClick; |
||||
|
||||
public class MainActivityCustoms extends AppCompatActivity { |
||||
|
||||
private static final int REQUEST_CAMERA_PERMISSIONS = 931; |
||||
private static final int REQUEST_PREVIEW_CODE = 1001; |
||||
|
||||
public static final String FRAGMENT_TAG = "camera"; |
||||
|
||||
@Bind(R.id.settings_view) Button settingsView; |
||||
@Bind(R.id.flash_switch_view) Button flashSwitchView; |
||||
@Bind(R.id.front_back_camera_switcher) Button cameraSwitchView; |
||||
@Bind(R.id.record_button) Button recordButton; |
||||
@Bind(R.id.photo_video_camera_switcher) Button mediaActionSwitchView; |
||||
|
||||
@Bind(R.id.cameraLayout) View cameraLayout; |
||||
@Bind(R.id.addCameraButton) View addCameraButton; |
||||
|
||||
@Override |
||||
protected void onCreate(Bundle savedInstanceState) { |
||||
super.onCreate(savedInstanceState); |
||||
setContentView(R.layout.activity_main_customs); |
||||
ButterKnife.bind(this); |
||||
} |
||||
|
||||
@OnClick(R.id.flash_switch_view) |
||||
public void onFlashSwitcClicked(){ |
||||
final CameraFragmentApi cameraFragment = getCameraFragment(); |
||||
if (cameraFragment != null) { |
||||
cameraFragment.toggleFlashMode(); |
||||
} |
||||
} |
||||
|
||||
@OnClick(R.id.front_back_camera_switcher) |
||||
public void onSwitchCameraClicked(){ |
||||
final CameraFragmentApi cameraFragment = getCameraFragment(); |
||||
if (cameraFragment != null) { |
||||
cameraFragment.switchCameraType(); |
||||
} |
||||
} |
||||
|
||||
@OnClick(R.id.record_button) |
||||
public void onRecordButtonClicked(){ |
||||
final CameraFragmentApi cameraFragment = getCameraFragment(); |
||||
if (cameraFragment != null) { |
||||
cameraFragment.takePhotoOrCaptureVideo(new CameraFragmentResultListener() { |
||||
@Override |
||||
public void onVideoRecorded(String filePath) { |
||||
|
||||
} |
||||
|
||||
@Override |
||||
public void onPhotoTaken(byte[] bytes, String filePath) { |
||||
|
||||
} |
||||
}); |
||||
} |
||||
} |
||||
|
||||
@OnClick(R.id.settings_view) |
||||
public void onSettingsClicked(){ |
||||
final CameraFragmentApi cameraFragment = getCameraFragment(); |
||||
if (cameraFragment != null) { |
||||
cameraFragment.openSettingDialog(); |
||||
} |
||||
} |
||||
|
||||
@OnClick(R.id.photo_video_camera_switcher) |
||||
public void onMediaActionSwitchClicked(){ |
||||
final CameraFragmentApi cameraFragment = getCameraFragment(); |
||||
if (cameraFragment != null) { |
||||
cameraFragment.switchActionPhotoVideo(); |
||||
} |
||||
} |
||||
|
||||
@OnClick(R.id.addCameraButton) |
||||
public void onAddCameraClicked(){ |
||||
if (Build.VERSION.SDK_INT > 15) { |
||||
final String[] permissions = { |
||||
Manifest.permission.CAMERA, |
||||
Manifest.permission.RECORD_AUDIO, |
||||
Manifest.permission.WRITE_EXTERNAL_STORAGE, |
||||
Manifest.permission.READ_EXTERNAL_STORAGE}; |
||||
|
||||
final List<String> permissionsToRequest = new ArrayList<>(); |
||||
for (String permission : permissions) { |
||||
if (ActivityCompat.checkSelfPermission(this, permission) != PackageManager.PERMISSION_GRANTED) { |
||||
permissionsToRequest.add(permission); |
||||
} |
||||
} |
||||
if (!permissionsToRequest.isEmpty()) { |
||||
ActivityCompat.requestPermissions(this, permissionsToRequest.toArray(new String[permissionsToRequest.size()]), REQUEST_CAMERA_PERMISSIONS); |
||||
} else addCamera(); |
||||
} else { |
||||
addCamera(); |
||||
} |
||||
} |
||||
|
||||
@Override |
||||
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { |
||||
super.onRequestPermissionsResult(requestCode, permissions, grantResults); |
||||
if (grantResults.length != 0) { |
||||
addCamera(); |
||||
} |
||||
} |
||||
|
||||
@RequiresPermission(Manifest.permission.CAMERA) |
||||
public void addCamera() { |
||||
addCameraButton.setVisibility(View.GONE); |
||||
cameraLayout.setVisibility(View.VISIBLE); |
||||
|
||||
final CameraFragment cameraFragment = CameraFragment.newInstance(new Configuration.Builder().build()); |
||||
getSupportFragmentManager().beginTransaction() |
||||
.replace(R.id.content, cameraFragment, FRAGMENT_TAG) |
||||
.commit(); |
||||
|
||||
if (cameraFragment != null) { |
||||
cameraFragment.setResultListener(new CameraFragmentResultListener() { |
||||
@Override |
||||
public void onVideoRecorded(String filePath) { |
||||
Intent intent = PreviewActivity.newIntentVideo(MainActivityCustoms.this, filePath); |
||||
startActivityForResult(intent, REQUEST_PREVIEW_CODE); |
||||
} |
||||
|
||||
@Override |
||||
public void onPhotoTaken(byte[] bytes, String filePath) { |
||||
Intent intent = PreviewActivity.newIntentPhoto(MainActivityCustoms.this, filePath); |
||||
startActivityForResult(intent, REQUEST_PREVIEW_CODE); |
||||
} |
||||
}); |
||||
|
||||
cameraFragment.setStateListener(new CameraFragmentStateListener() { |
||||
|
||||
@Override |
||||
public void onCurrentCameraBack() { |
||||
cameraSwitchView.setText("back"); |
||||
} |
||||
|
||||
@Override |
||||
public void onCurrentCameraFront() { |
||||
cameraSwitchView.setText("front"); |
||||
} |
||||
|
||||
@Override |
||||
public void onFlashAuto() { |
||||
flashSwitchView.setText("auto"); |
||||
} |
||||
|
||||
@Override |
||||
public void onFlashOn() { |
||||
flashSwitchView.setText("on"); |
||||
} |
||||
|
||||
@Override |
||||
public void onFlashOff() { |
||||
flashSwitchView.setText("off"); |
||||
} |
||||
|
||||
@Override |
||||
public void onCameraSetupForPhoto() { |
||||
mediaActionSwitchView.setText("photo"); |
||||
flashSwitchView.setVisibility(View.VISIBLE); |
||||
} |
||||
|
||||
@Override |
||||
public void onCameraSetupForVideo() { |
||||
mediaActionSwitchView.setText("video"); |
||||
flashSwitchView.setVisibility(View.GONE); |
||||
} |
||||
|
||||
@Override |
||||
public void shouldRotateControls(int degrees) { |
||||
ViewCompat.setRotation(cameraSwitchView, degrees); |
||||
ViewCompat.setRotation(mediaActionSwitchView, degrees); |
||||
ViewCompat.setRotation(flashSwitchView, degrees); |
||||
} |
||||
|
||||
@Override |
||||
public void onRecordStateVideoReadyForRecord() { |
||||
recordButton.setText("take video"); |
||||
} |
||||
|
||||
@Override |
||||
public void onRecordStateVideoInProgress() { |
||||
recordButton.setText("stop"); |
||||
} |
||||
|
||||
@Override |
||||
public void onRecordStatePhoto() { |
||||
recordButton.setText("take photo"); |
||||
} |
||||
|
||||
@Override |
||||
public void onStopVideoRecord() { |
||||
settingsView.setVisibility(View.VISIBLE); |
||||
} |
||||
|
||||
@Override |
||||
public void onStartVideoRecord(File outputFile) { |
||||
} |
||||
}); |
||||
|
||||
} |
||||
} |
||||
|
||||
private CameraFragmentApi getCameraFragment() { |
||||
return (CameraFragmentApi) getSupportFragmentManager().findFragmentByTag(FRAGMENT_TAG); |
||||
} |
||||
} |
@ -0,0 +1,116 @@ |
||||
<?xml version="1.0" encoding="utf-8"?> |
||||
<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"> |
||||
|
||||
<FrameLayout |
||||
android:id="@+id/content" |
||||
android:layout_width="match_parent" |
||||
android:layout_height="match_parent" /> |
||||
|
||||
<Button |
||||
android:id="@+id/addCameraButton" |
||||
android:layout_width="match_parent" |
||||
android:layout_height="wrap_content" |
||||
android:layout_margin="15dp" |
||||
android:text="Add camera" |
||||
tools:visibility="gone" /> |
||||
|
||||
|
||||
<!--android:background="#82000000"--> |
||||
<RelativeLayout |
||||
android:id="@+id/cameraLayout" |
||||
android:layout_width="match_parent" |
||||
android:layout_height="150dp" |
||||
android:layout_alignParentBottom="true" |
||||
android:layout_alignParentLeft="true" |
||||
android:layout_alignParentStart="true" |
||||
android:layout_gravity="bottom" |
||||
android:background="@android:color/transparent"> |
||||
|
||||
<Button |
||||
android:id="@+id/record_button" |
||||
android:layout_width="75dp" |
||||
android:layout_height="75dp" |
||||
android:layout_centerInParent="true" |
||||
android:layout_marginLeft="50dp" |
||||
android:layout_marginRight="50dp" |
||||
android:text="take photo" /> |
||||
|
||||
<LinearLayout |
||||
android:layout_width="100dp" |
||||
android:layout_height="wrap_content" |
||||
android:layout_alignParentRight="true" |
||||
android:orientation="vertical"> |
||||
|
||||
<TextView |
||||
android:layout_width="wrap_content" |
||||
android:layout_height="wrap_content" |
||||
android:layout_marginLeft="5dp" |
||||
android:text="capture type" |
||||
android:textColor="@android:color/white" /> |
||||
|
||||
<Button |
||||
android:id="@+id/photo_video_camera_switcher" |
||||
android:layout_width="match_parent" |
||||
android:layout_height="wrap_content" |
||||
android:checked="false" |
||||
android:gravity="center" |
||||
android:text="photo" /> |
||||
|
||||
</LinearLayout> |
||||
|
||||
|
||||
<Button |
||||
android:id="@+id/settings_view" |
||||
android:layout_width="100dp" |
||||
android:layout_height="wrap_content" |
||||
android:layout_alignParentBottom="true" |
||||
android:text="settings" /> |
||||
|
||||
<LinearLayout |
||||
android:layout_width="100dp" |
||||
android:layout_height="wrap_content" |
||||
android:orientation="vertical"> |
||||
|
||||
<TextView |
||||
android:layout_width="wrap_content" |
||||
android:layout_height="wrap_content" |
||||
android:layout_marginLeft="5dp" |
||||
android:text="flash" |
||||
android:textColor="@android:color/white" /> |
||||
|
||||
<Button |
||||
android:id="@+id/flash_switch_view" |
||||
android:layout_width="match_parent" |
||||
android:layout_height="wrap_content" |
||||
android:layout_centerInParent="true" |
||||
android:text="auto" /> |
||||
</LinearLayout> |
||||
|
||||
<LinearLayout |
||||
android:layout_width="100dp" |
||||
android:layout_height="wrap_content" |
||||
android:layout_alignParentBottom="true" |
||||
android:layout_alignParentRight="true" |
||||
android:orientation="vertical"> |
||||
|
||||
<TextView |
||||
android:layout_width="wrap_content" |
||||
android:layout_height="wrap_content" |
||||
android:layout_marginLeft="5dp" |
||||
android:text="camera" |
||||
android:textColor="@android:color/white" /> |
||||
|
||||
<Button |
||||
android:id="@+id/front_back_camera_switcher" |
||||
android:layout_width="match_parent" |
||||
android:layout_height="wrap_content" |
||||
android:text="front" /> |
||||
</LinearLayout> |
||||
|
||||
</RelativeLayout> |
||||
|
||||
</FrameLayout> |
@ -1,80 +0,0 @@ |
||||
<?xml version="1.0" encoding="utf-8"?> |
||||
<merge xmlns:android="http://schemas.android.com/apk/res/android" |
||||
android:layout_width="match_parent" |
||||
android:layout_height="match_parent" |
||||
android:background="@android:color/transparent"> |
||||
|
||||
<RelativeLayout |
||||
android:layout_width="match_parent" |
||||
android:layout_height="60dp" |
||||
android:layout_alignParentEnd="true" |
||||
android:layout_alignParentRight="true" |
||||
android:layout_alignParentTop="true" |
||||
android:paddingTop="10dp"> |
||||
|
||||
<com.github.florent37.camerafragment.widgets.FlashSwitchView |
||||
android:id="@+id/flash_switch_view" |
||||
android:layout_width="40dp" |
||||
android:layout_height="40dp" |
||||
android:layout_centerInParent="true" /> |
||||
|
||||
<com.github.florent37.camerafragment.widgets.CameraSwitchView |
||||
android:id="@+id/front_back_camera_switcher" |
||||
android:layout_width="40dp" |
||||
android:layout_height="40dp" |
||||
android:layout_alignParentRight="true" |
||||
android:layout_centerVertical="true" |
||||
android:layout_marginRight="15dp" |
||||
android:visibility="gone" /> |
||||
|
||||
</RelativeLayout> |
||||
|
||||
<!--android:background="#82000000"--> |
||||
<RelativeLayout |
||||
android:id="@+id/record_panel" |
||||
android:layout_width="match_parent" |
||||
android:layout_height="150dp" |
||||
android:layout_alignParentBottom="true" |
||||
android:background="@android:color/transparent"> |
||||
|
||||
<com.github.florent37.camerafragment.widgets.RecordButton |
||||
android:id="@+id/record_button" |
||||
android:layout_width="75dp" |
||||
android:layout_height="75dp" |
||||
android:layout_centerInParent="true" |
||||
android:layout_marginLeft="50dp" |
||||
android:layout_marginRight="50dp" /> |
||||
|
||||
<com.github.florent37.camerafragment.widgets.MediaActionSwitchView |
||||
android:id="@+id/photo_video_camera_switcher" |
||||
android:layout_width="40dp" |
||||
android:layout_height="40dp" |
||||
android:layout_alignParentRight="true" |
||||
android:layout_centerVertical="true" |
||||
android:layout_marginRight="40dp" |
||||
android:checked="false" |
||||
android:gravity="center" /> |
||||
|
||||
<TextView |
||||
android:id="@+id/record_duration_text" |
||||
android:layout_width="wrap_content" |
||||
android:layout_height="wrap_content" |
||||
android:layout_centerVertical="true" |
||||
android:layout_toLeftOf="@id/record_button" |
||||
android:textColor="@android:color/white" |
||||
android:textSize="14dp" |
||||
android:visibility="invisible" /> |
||||
|
||||
<TextView |
||||
android:id="@+id/record_size_mb_text" |
||||
android:layout_width="wrap_content" |
||||
android:layout_height="wrap_content" |
||||
android:layout_centerVertical="true" |
||||
android:layout_toRightOf="@id/record_button" |
||||
android:textColor="@android:color/white" |
||||
android:textSize="14dp" |
||||
android:visibility="invisible" /> |
||||
|
||||
</RelativeLayout> |
||||
|
||||
</merge> |
After Width: | Height: | Size: 593 KiB |
After Width: | Height: | Size: 6.0 MiB |
After Width: | Height: | Size: 5.8 MiB |
Loading…
Reference in new issue