Langsung ke konten utama

Cara Membuat Aplikasi Kamera Bagian Kedua - Capture Image


Pada postingan pertama dari Cara Membuat Aplikasi Kamera kita sudah membuat aplikasi dan menampilkan kamera preview. Lanjutan dari postingan tersebuat, kita akan membuat tangkapan atau Capture Image.

Aksi yang akan kita masukkan sebagai tambahan adalah Capture Image (tanpa menyimpan gambar), tombol back press yaitu ketika tombol kembali di tekan pada tampilan Capture Image maka camera kembali menampilkan preview, serta tombol Hapus yang fungsinya sama dengan back press.

Selain itu kita akan membuat agar aplikasi nantinya tampil full screen tanpa toolbar.

Tampilan nantinya akan tampak seperti barikut :



Langsung saja ikuti langkah-langkah di bawah ini :

Langkah 1 : Buat dua ikon drawable dengan nama camera dan hapus, anda bisa menggunakan Vector Asset yang disediakan oleh Android Studio. Baca : Cara Menggunakan Icon Vector Asset bawahan Android Studio  

 


Langkah 2 : Edit AndroidManifest.xml dengan kode seperti berikut.
 
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="codingrakitan.blogspot.com.aplikasikamera">

<uses-permission android:name="android.permission.CAMERA"/>

<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.AppCompat.Light.NoActionBar">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>

</manifest>

Langkah 3 : Edit activity_main.xml dengan kode seperti berikut.
 
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" >

<FrameLayout
android:id="@+id/fr_kamera"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/black">

</FrameLayout>

<ImageView
android:id="@+id/img"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_gravity="bottom|center_horizontal"
android:layout_marginBottom="30dp"
android:adjustViewBounds="true"
android:onClick="onClick"
android:tint="@android:color/white"
app:srcCompat="@drawable/camera"
tools:ignore="VectorDrawableCompat" />

<LinearLayout
android:id="@+id/ly"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/black"
android:orientation="vertical"
android:visibility="gone">

<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent">

<ImageView
android:id="@+id/tampil"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:adjustViewBounds="false"
app:srcCompat="@drawable/ic_launcher_background"
tools:ignore="VectorDrawableCompat" />

<ImageView
android:id="@+id/hapus"
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_gravity="bottom"
android:layout_margin="20dp"
android:adjustViewBounds="true"
android:onClick="onClick"
android:tint="@android:color/white"
app:srcCompat="@drawable/delete"
tools:ignore="VectorDrawableCompat" />

<TextView
android:id="@+id/textView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@android:color/transparent"
android:padding="10dp"
android:text="codingrakitan.blogspot.com"
android:textColor="@android:color/white"
android:textSize="12sp" />

</FrameLayout>

</LinearLayout>

</FrameLayout>

Langkah 4 : Edit class MainActivity dengan kode seperti berikut.

 
public class MainActivity extends AppCompatActivity implements View.OnClickListener {

private FrameLayout fr_kamera;
private SurfaceView sv;
private SurfaceHolder sh;
private Camera cm;
private ImageView tampil;
private LinearLayout ly;
private int HOME = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);

fr_kamera = findViewById(R.id.fr_kamera);
tampil = findViewById(R.id.tampil);
ly = findViewById(R.id.ly);


kameraAktif();

}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event){
if (event.getAction() == KeyEvent.ACTION_DOWN) {
switch (keyCode) {
case KeyEvent.KEYCODE_BACK:
if (HOME==0){
ly.setVisibility(View.GONE);
HOME=1;
}else{
finish();
}
return true;
}
}
return super.onKeyDown(keyCode, event);
}

@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.hapus:
ly.setVisibility(View.GONE);
break;
case R.id.img:
ambilGambar();
break;
}

}

private void kameraAktif() {
sv = new SurfaceView(this);
sh = sv.getHolder();
sh.addCallback(new SurfaceHolderCallback());
fr_kamera.addView(sv);

}

private void ambilGambar() {
cm.takePicture(null, null, jpegCallback);
HOME = 0;
}
Camera.PictureCallback jpegCallback = new Camera.PictureCallback() {
@Override
public void onPictureTaken(byte[] data, Camera camera) {
Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
Matrix matrix = new Matrix();
matrix.postRotate(90);
Bitmap rotateBitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight()
, matrix, true);
tampil.setImageBitmap(rotateBitmap);
ly.setVisibility(View.VISIBLE);
cm.startPreview();
}
};



private class SurfaceHolderCallback implements SurfaceHolder.Callback {
@Override
public void surfaceCreated(SurfaceHolder holder) {
cm = Camera.open();
Camera.Parameters parameters = cm.getParameters();
List<Camera.Size> ss = parameters.getSupportedPreviewSizes();
Camera.Size pictSize = ss.get(0);
parameters.setPictureSize(pictSize.width, pictSize.height);
cm.setParameters(parameters);
}

@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
try {
cm.setDisplayOrientation(90);
cm.setPreviewDisplay(sv.getHolder());
Camera.Parameters parameters = cm.getParameters();
List<Camera.Size> previewSize = cm.getParameters().getSupportedPreviewSizes();
Camera.Size pre = previewSize.get(0);
parameters.setPreviewSize(pre.width, pre.height);

ViewGroup.LayoutParams lp = new FrameLayout.LayoutParams(
ViewGroup.LayoutParams.FILL_PARENT,
ViewGroup.LayoutParams.FILL_PARENT);

sv.setLayoutParams(lp);
cm.setParameters(parameters);
cm.startPreview();
}catch (Exception e){}

}

@Override
public void surfaceDestroyed(SurfaceHolder holder) {
cm.stopPreview();
cm.release();
}
}
}




Sekarang anda tinggal melakukan pengetesan menggunakan emulator atau lebih baiknya menggunakan HP Smartphone langsung, sebab lebih leluasa dalam mengambil gambar.

Lanjut :  Cara Membuat Aplikasi Kamera Bagian Ketiga - Flash Light


Komentar

Postingan populer dari blog ini

Apa Sih Itu Svelte Js? Bagaimana Cara Menjalankannya? Yuks Simak Pembahasan Berikut Ini

(Sumber : Website https://svelte.dev/)   Hallo Sahabat Coders, Semoga kita semua selalu diberikan Kesehatan dan keberlimpahan dalam pekerjaan atau usaha kita. Perkembangan dunia pemrograman semakin hari semakin menjadi-jadi. Banyak Bahasa pemrograman maupun framework baru bermunculan akhir-akhir ini. Terutama framework JavaScript yang yang banyak bermunculan. Dan semuanya sangat menarik untuk dicoba.  Framework JavaScript yang terkenal saat ini contohnya Angular JS, Vue JS, React JS dan lain sebagainya dan mungkin banyak orang sudah tahu tentang framework- framework ini. Namun, akhir-akhir ini, ada framework yang baru terkenal yaitu Svelte JS (Website : https://svelte.dev/ ). Framework ini Admin tahu dari seorang JavaScript Developer terkenal di Indonesia yaitu Mas Riza Fahmi ( Curriculum Director di Hacktiv8 Indonesia ). Svelte Js merupakan sebuah framework JavaScript untuk menulis komponen antarmuka ( user interface) yang dibuat oleh Rich Harris . Namun menurut penulisn...

Mengenal Apa itu Android Studio

Android Studio merupakan tools IDE ( Integrated Development Environment ) yang digunakan untuk membuat aplikasi android. Fungsi utamanya adalah sebagai editor yang menyediakan berbagai kebutuhan dalam membangun aplikasi android seperti widget, library, dll. Android Studio versi terbaru telah mendukung 2 bahasa pemrograman yaitu Java dan Kotlin. Sebelumnya hanya mendukung bahasa Java. Android Studio hadir sebagai pengganti Eclipse ADT ( Android Development Tools ) yaitu tools utama sebelumnya. Tools Android Studio ini dibangun di atas aplikasi yang sudah populer sebagai editor programer yaitu JetBrains IntelliJ IDE. Selain itu Android Studio di lengkapi dengan Emulator sendiri. Sama halnya seperti Eclipse, Android Studio juga memerlukan SDK ( Software Development Kit ) untuk membangun aplikasi android. Bedanya Android Studio didukung penuh oleh Google sebagai pengembangnya serta menggunakan grandle dalam melakukan build. Baca juga : Perbedaan Membuat Aplikasi Android Menggunakan Ecli...

Cara Membuat Project Baru dengan Ruby on Rails

    Pada postingan sebelumnya Mengenal dan Menginstall Ruby on Rails kita telah menginstall bahan-bahan yang diperlukan untuk menjalankan Rails atau Ruby on Rails. Tentunya membuat project baru adalah langkah yang perlu di ketahui sebagai dasar membuat web menggunakan Rails ini. Membuat Project baru di Rails Sebagai contoh disini kita akan membuat project baru bernama " hello_world ". Cara membuatnya sangat mudah anda tinggal buka CMD dengan menekan Windows + R kemudian ketikkan CMD. Setelah CMD terbuka, arahkan ke folder tempat anda ingin menyimpan file Rails anda. Disini saya mengarahkannya pada "E:\ruby_on_rails", anda bisa menentukan sesuka hati tempat penyimpanannya. Untuk mengarahkan ketikkan perintah " cd E: " kemudian masuk ke folder " cd ruby_on_rails ", seperti pada gambar.     Setelah berada di folder atau directory yang di inginkan, ketikkan perintah rails new hello_world . Intruksi tersebut mengisyaratkan untuk membuat project ba...