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

Panduan Rinci Cara Membuat Website

Website adalah suatu kumpulan halaman berbentuk digital yang dapat diakses menggunakan perangkat lunak yang disebut Browser, dengan bantuan jaringan Internet. Penjelasan mengenai apa itu website telah dijelaskan sebelumnya di dalam postingan : Mengenal Apa Itu Web dan Hal yang Perlu di Perhatikan dalam Membangun Web . Didalam postingan tersebut sudah dijelaskan apa saja yang perlu diperhatikan dalam pembuatan web atau website. Selanjutnya pada postingan ini akan dijelaskan secara rinci bagaimana cara membuat sebuah website. Sebelum membuat sebuah website anda harus memutuskan terlebih dahulu akan membuat website seperti apa. Jika anda sudah menentukan tema web anda sekarang anda perlu menentukan aplikasi apa yang ingin anda gunakan. Apakah anda akan membuatnya secara native, menggunakan framework, atau menggunakan CMS. Pada postingan ini yang dijelaskan adalah langkah-langkah membuat sebuah website baik secara native, framework, ataupun menggunkan CMS. Silahkan anda simak langkah demi ...

Mengenal Sejarah Bahasa Pemrograman C++

C++ merupakan bahasa pemrograman tingkat menengah yang banyak dijadikan sebagai dasar pembelajaran dalam dunia pemrograman. Bahasa ini bisa dibilang mudah dipelajari sebab sudah menggunakan bahasa yang mirip dengan bahasa manusia dibandingkan dengan bahasa Assemble yang merupakan bahasa tingkat rendah. Salah satu keunggulan dari bahasa ini adalah kecepatannya dalam melakukan kompilasi kedalam bahasa mesin, selain itu bahasa c++ banyak dijadikan sebagai acuan untuk bahasa-bahasa pemrograman baru. Sejarah Awal Pembuatan Bahasa Pemrograman C++ Bahasa C++ dibuat oleh Bjarne Stroustrup yaitu seorang ilmuwan komputer dan profesor di bidang ilmu komputer di Texas A&M University. Profesor yang berasal dari Denmark ini dulunya tergabung dalam Computer Research Institute of Cambridge University dimana dia menghabiskan hari-harinya mengabdikan diri untuk meneliti perangkat lunak yang berjalan pada sistem terdistribusi. Sistem terdistribusi merupakan sistem dimana banyak komputer yang terhubu...

Pengenalan Route dan View Laravel Plus Membuat Tampilan Website Pertama Dengan Laravel - Coding Rakitan

 ( Source : Dokumentasi Pribadi ) Hallo sobat CODING RAKITAN, bagaimana kabarnya? Semoga semuanya sehat ya :). Pada artikel kali ini, saya akan membagikan tentang Route dan View pada Laravel dengan membuat halaman website sederhana. Tujuan akhirnya adalah agar teman-teman tahu konsep Route dan view pada Laravel. Bagi teman-teman yang belum menginstal Laravel-nya, silahkan diinstal dulu artikel saya sebelumnya. (Baca : Cara Install Laravel Terbaru Via Composer ). Okey, saya akan bahas dulu satu persatu apa itu Route dan View. Route Route kalau diterjemahkan jadi rute atau jalan. Rute atau jalan itu merupakan alur yang bisa kita lalui untuk menuju ke tempat tujuan kita. Jadi kita harus melewati jalan tertentu untuk sampai pada tujuan tertentu. Hehehe. Ah, gitulah! :) Intinya Route ini digunakan untuk memaping atau memetakan atau membuat peta url yang bisa kita gunakan untuk mengakses website Laravel kita. View View dalam laravel artinya tampilan, yaitu tempat dimana kita menyimpan se...