X

Tuesday, November 19, 2019

Apa Itu Version Control System Dan Manfaatnya Bagi Programmer - Coding Rakitan

VERSION CONTROL SYSTEM
VERSION CONTROL SYSTEM (Source : Dokumentasi Pribadi)
Halo sobat-sobat CODINGRAKITAN, apa kabar? Semoga kalian semua baik-baik saja.
Pada artikel kali ini, saya akan membagikan kepada anda sekalian tentang VERSION CONTROL SYSTEM. Mahkluk apa sih itu? Hehehe, mari kita bedah bersama.

Kalau teman-teman seorang desainer grafis, pernah nggak sih kalian nyimpan design, seperti contoh pada gambar dibawah ini :

VERSION CONTROL SYSTEM
(Source : Dokumentasi Pribadi)
Bagi teman-teman yang sedang atau sudah melewati skripsi, pernah nggak nyimpan file seperti dibawah ini? Kalau pernah, berarti kita sama, Hehehe.

VERSION CONTROL SYSTEM

(Source : Dokumentasi Pribadi)
Kalau datang revisi didosen pembimbing misalnya ditulis revisi 1, 2 dan seterusnya. Begitu pula dengan teman-teman yang design grafis, misalnya nyimpan file 1, file 1 -revisi, file 2 revisi dan seterusnya dan ini kita lakukan dan kita control secara manual. Sama hal dengan teman-teman programmer atau teman-teman yang suka ngoding, pasti pernah buat satu file, misalnya index.php atau file apapun dalam kodingan teman-teman.

Pada suatu saat misalnya teman-teman ingin menambahkan suatu fungsi tertentu dalam file tersebut, kemudian setelah itu teman-teman menambahkan berberapa fungsi baru lagi, lagi dan lagi dan menghapus berberapa fungsi yang teman-teman pikir tidak terpakai. Dan pada suatu saat program teman-teman ERROR atau tidak berjalan. Kemudian teman-teman berpikir, kenapa ya program sebelumnya berjalan dengan baik dan saat ini tidak.

Saat itulah teman-teman berpikir lagi, wah mungkin karena saya hapus kodingan atau fungsi yang itu beberapa hari lalu, tapi apa dan bagaimana ya kodingan atau fungsi itu, saya sudah lupa dan akhirnya teman-teman pusing sendiri mencari tahu kodingan yang sebelumnya teman-teman sudah hapus. Ilustrasinya begitu, Hehehe

Disinilah kita memanfaatkan VCS (VERSION CONTROL SYSTEM). VCS merupakan salah satu tools yang digunakan untuk mengontrol setiap perubahan file yang sudah kita buat, perubahan kodingan sedikit pun, bahkan spasi sekalipun dicatat baik-baik sama system ini. Kembali ke ilustrasinya ya teman-teman? Dengan dicatatnya setiap perubahan file kodingan yang teman-teman sudah buat, teman-teman bisa melihat kembali file yang sebelumnya, mengembalikan file yang sebelumnya ataupun membandingkan file kodingan lama dengan file kodingan yang baru.

VCS juga sangatlah bermanfaat bagi teman-teman yang berkerja secara TEAM atau kolaboratif karena kita dapat dengan mudah melihat setiap perubahan file kodingan yang dibuat oleh teman-teman TEAM kita, kita juga dapat melihat siapa yang mengubahnya dan kapan dia mengubahnya serta apa yang dia ubah, dibagian mananya, sehingga kita tidak saling menyalahkan satu sama lain saat kodingan kita tiba-tiba ERROR. Karena kita sudah tahu dengan jelas siapa pelakunya, tinggal selanjutnya kita cari solusi Bersama untuk mengatasi permasalahan kodingan teman kita tersebut. Disitulah sangat terasanya kegunaan dari VERSION CONTROL SYSTEM ini. Dan ini sangatlah membantu kita dalam memanage file kodingan kita.

(Source : Dokumentasi Pribadi - Contoh Penggunaan VCS dalam kerja TEAM)


Kesimpulan : VCS (VERSION CONTROL SYSTEM) merupakan sebuah infrastruktur atau tools yang digunakan untuk mengontrol setiap perubahan yang kita buat. Baik itu perubahan file (penambahan atau pengurangan), maupun perubahan kodingan (penambahan atau pengurangan fungsi dikodingan kita). 

Okey teman-teman saya kira sampai disini dulu ya postingan saya untuk kali ini,
Salam dari Admin CODINGRAKITAN, tetap semangat guys,
Sampai jumpa dipostingan selanjutnya.






Friday, November 1, 2019

Cara Membuat Aplikasi Kamera Bagian Ketiga - Flash Light - Coding Rakitan


Pada postingan kali ini kita akan melanjutkan postingan sebelumnya Cara Membuat Aplikasi Kamera Bagian Kedua - Capture Image. Postingan sebelumnya kita sudah menambahkan fitur capture image yang membuat kamera dapat menangkap gambar ketika tombol di pencet.

Fitur yang akan kita tambahkan selanjutnya adalah Flash Light atau lampu blitz kamera. Dimana ketika tombol blitz dalam keadaan hidup atau auto maka ketika tangkapan kamera dilakukan, blitz akan menyala.

Langkah pertama :

Pertama-tama izinkan aplikasi untuk mengakses Flash light dengan menambahkan kode berikut kedalam AndroidManifest.xml
 
<uses-permission android:name="android.permission.FLASHLIGHT"/>
 
Langkah kedua :

Tambahkan ikon Vector Asset berikut kedalam drawable anda dan sesuaikan dengan nama yang ada di gambar. Tidak tahu cara menambahkannya ? silahkan baca postingan Cara Menggunakan Icon Vector Asset bawahan Android Studio



Langkah ketiga :

Edit activity_main.xml 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:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="right"
        android:orientation="vertical"
        android:padding="5dp">

        <ImageView
            android:id="@+id/flash"
            android:layout_width="wrap_content"
            android:layout_height="50dp"
            android:onClick="onClick"
            android:tag="off"
            android:tint="@android:color/white"
            app:srcCompat="@drawable/flash_off"
            tools:ignore="VectorDrawableCompat" />
    </LinearLayout>

    <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 keempat :

Edit class MainActivity.java 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;
    int flash = 1;
    String aksi_flash = "mati";
    Camera.Parameters pr;
    ImageView iv_flash;
    @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);
        iv_flash = findViewById(R.id.flash);
        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){
                        kembaliCamera();
                    }else{
                        finish();
                    }
                    return true;
            }
        }
        return super.onKeyDown(keyCode, event);
    }
    public void kembaliCamera(){
        ly.setVisibility(View.GONE);
        HOME=1;
        if (aksi_flash=="hidup"){
            flashAktif();
        }
        cm.startPreview();
    }


    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.hapus:
                kembaliCamera();
                break;
            case R.id.img:
                ambilGambar();
                break;
            case R.id.flash:
                flash++;
                if (flash==1){
                    iv_flash.setImageResource(R.drawable.flash_off);
                    flashMati();
                    aksi_flash = "mati";
                }else
                if (flash==2){
                    iv_flash.setImageResource(R.drawable.flash_on);
                    flashAktif();
                    aksi_flash = "hidup";
                }else
                if (flash==3){
                    iv_flash.setImageResource(R.drawable.flash_auto);
                    flashAuto();
                    aksi_flash = "auto";
                    flash = 0;
                }
                break;
        }

    }



    private void flashAktif() {
        pr = cm.getParameters();
        pr.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
        cm.setParameters(pr);
        cm.startPreview();
    }

    private void flashAuto() {
        pr = cm.getParameters();
        pr.setFlashMode(Camera.Parameters.FLASH_MODE_AUTO);
        cm.setParameters(pr);
        cm.startPreview();
    }

    private void flashMati() {
        pr = cm.getParameters();
        pr.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
        cm.setParameters(pr);
        cm.startPreview();
    }

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

    }

    private void ambilGambar() {
        if (aksi_flash=="auto"){
            flashAuto();
        }
        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);

        }
    };



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

        @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();
        }
    }
}

 
Pada class di atas kita menambahkan 3 method yang berfungsi untuk mengatur blitz yaitu flashAktif(), flashAuto(), dan flashMati(). Kode yang berfungsi untuk menyalakan flash light adalah "pr.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);" dimana kode ini menginstruksikan untuk membuat Flash Mode Torch ketika dilakukan tangkapan kamera.


Cara Mengambil data JSON dengan Volley di Android Studio


Volley merupakan sebuah library atau pustaka yang dikembangkan oleh Google untuk membantu para developer Android Studio. Volley ini berfungsi untuk melakukan transaksi HTTP. Transaksi berupa mengirim data POST dan GET dapat dilakukan menggunakan Volley.

Ini tentunya akan memudahkan pengguna dalam mengambil data dari sebuah web service. Untuk dapat menggunakan library ini developer terlebih dahulu harus mengidentifikasikan dependecies untuk mengunduh libarary ini. Caranya dengan menambahkan kode di bawah ini kedalam build.grandle.
 
dependencies{
 ...
 implementation 'eu.the4thfloor.volley:com.android.volley:2015.05.28'
 ...

}
 
Karena dalam hal bertransaksi ke halam web diperlukan akses Internet maka, kita perlu menuliskan kode di bawah kedalam AndroidManifest.xml
 
<uses-permission android:name="android.permission.INTERNET"/>
 
Setiap transaksi yang dilakukan baik itu pengiriman data berupa GET atau POST nantinya akan memberikan respon berupa String.

Data GET

 
 String url = "http://codingrakitan.blogspot.com/";

        RequestQueue rq = Volley.newRequestQueue(this);
        StringRequest sr = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {
                Log.d("respon", "hasil : "+response);
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                Log.d("respon", "error : "+error);
            }
        });
        rq.add(sr);
 

Data POST

 
 String url = "http://codingrakitan.blogspot.com/";
 RequestQueue rq = Volley.newRequestQueue(this);
        StringRequest sr = new StringRequest(Request.Method.POST, Constants.URL_INSERT, new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {
                 Log.d("respon", "hasil : "+response);

            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                Log.d("error", "isi = "+error.getMessage());
            }
        }){
            @Override
            protected Map<String, String> getParams() {
                Map<String, String> params = new HashMap<String, String>();
                params.put("username", "admin");
                params.put("password", "admin");               
                return params;
            }
        };
        rq.add(sr);
 
Pada kode di atas di buat untuk mengirimkan data berupa post dengan name "username" dan "password" dengan masing-masing field, valuenya adalah "admin".

Catatan ganti url dengan alamat url web service anda.


Wednesday, October 23, 2019

Cara Membuat Image View Bulat (Circle Image) dengan Glide di Android Studio


Hai sobat Coding Rakitan ! kali ini kami ingin memberikan sebuah tutorial untu membuat Image View berbentuk bulat atau lebih dikenal dengan nama Circle Image. Untuk membuat Circle Image ada banyak cara yang bisa di tempuh mulai dari manipulasi bitmap menggunakan canvas, menggunakan shape drawable, hingga menggunakan library. Cara yang akan kita gunakan disini yaitu menggunakan library, sebab lebih mudah dan praktis. Bagi pemula juga tidak akan ribet menggunakannya.

Library yang akan kita gunakan adalah Glide, library ini tidak hanya untuk menampilkan image tetapi bisa pula membuat Circle Image. Kelebihan lainnya anda bisa menampilkan image online ataupun offline (langsung dari directory project).

Sebelum kita memulai saya akan memberikan beberapa contoh aplikasi yang menerapkan Circle Image.



Selain aplikasi-aplikasi di atas masih banyak lagi yang menggunakan Circle Image. Untuk hasil dari project yang dibuat pada postingan ini nantinya akan sangat sederhana, bisa anda lihat seperti gambar di bawah.



Langkah 1 : Buat project baru.



Langkah 2 : Import libarary glide dengan memasukkan code berikut ke dalam build.grandle (app module).
 
dependencies {
    ...
    implementation 'com.github.bumptech.glide:glide:4.2.0'
    annotationProcessor 'com.github.bumptech.glide:compiler:4.2.0'
}
 
Langkah 3 : Masukkan gambar percobaan kedalam directory drawable dengan nama gambar.jpg (seuai keinginan anda). Berikut adalah contoh gambar yang akan di tampilkan



Langkah 4 : Edit activity_main.xml seperti berikut.
 
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@android:color/darker_gray"
        android:gravity="center_horizontal"
        android:orientation="vertical">

        <ImageView
            android:id="@+id/gambar"
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:layout_marginTop="20dp" />
    </LinearLayout>

</RelativeLayout>
 
Langkah 5 : Edit class MainActivity seperti berikut.

 
public class MainActivity extends AppCompatActivity {

    private ImageView gambar;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        gambar = findViewById(R.id.gambar);
        Glide.with(this)
                .load(R.drawable.gambar)
                .apply(RequestOptions.circleCropTransform())
                .into(gambar);

    }
}

 
Penjelasan :

Bagian yang menjadi instruksi untuk menggunakan glide terdapat pada kode :

 
Glide.with(this)
                .load(R.drawable.gambar)
                .apply(RequestOptions.circleCropTransform())
                .into(gambar);
 
Kode tersebut menginstruksikan gambar yang terdapada di "R.drawable.gambar" untuk di tampilkan kedalam image view dengan bentuk circle dengan menggunakan method "circleCropTransform()". Selain gambar dari directori anda juga bisa menggunakan gambar online dengan cara menuliskan ".load(URL_GAMBAR)", contohnya :

 
Glide.with(this)
                .load("http://codingrakitan.blogspot.com/")
                .apply(RequestOptions.circleCropTransform())
                .into(gambar);
 



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


Monday, October 21, 2019

Cara Membuat Aplikasi Kamera dengan Android Studio


Pada postingan Cara Membuat Aplikasi Kamera dengan Android Studio ini kita akan membuat aplikasi yang nantinya dapat mengakses perangkat keras android yaitu kamera. Hasil dari aplikasi yang dibuat nantinya akan tampak seperti gambar di bawah.



Aplikasi kamera yang akan dibuat akan sangat sederhana. Hanya akan menampilkan tampilan kamera, dan belum bisa melakukan jepretan gambar. Fungsi jepretan gambar akan di tambahkan pada postingan selanjutnya.

Buat terlebih dahulu project baru dengan format seperti dibawah.



Baca : Cara Membuat Project Baru di Android Studio

Langsung saja untuk membuat aplikasi kamera silahkan ikuti langkah-langkah di bawah ini:

Langkah 1 : Tambah izin menggunakan camera di AndroidManifest.xml

...
<uses-permission android:name="android.permission.CAMERA"/>
...
Langkah 2 : Edit activity_main.xml 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:id="@+id/fr_kamera"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity" />
 
Langkah 3 : Edit class MainActivity seperti berikut.

 
public class MainActivity extends AppCompatActivity {

    private FrameLayout fr_kamera;
    private SurfaceView sv;
    private SurfaceHolder sh;
    private Camera cm;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);



        fr_kamera = findViewById(R.id.fr_kamera);
        sv = new SurfaceView(this);
        sh = sv.getHolder();
        sh.addCallback(new SurfaceHolderCallback());
        fr_kamera.addView(sv);
    }

    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();
        }
    }
}

 
Jika camera anda orientasinya tidak sesuai dengan yang diharapkan silahkan rubah pada bagian cm.setDisplayOrientation(90); anda bisa menggantinya misalnya 0, 90, 180. Pada bagian tersebut jika tidak sesuai bisa jadi hp anda tegakkan ke atas, tetapi gambar yang tampil malah memanjang ke samping.

Selanjutka kita akan membuat tombol untuk menangkap tangkapan kamera, lanjut di postingan Cara Membuat Aplikasi Kamera Bagian Kedua - Capture Image.


Belajar Dasar C++ - Membuat Input dan Output



Input merupakan proses memasukkan data, sedangkan output adalah proses menampilkan data. Dalam pemrograman input dan output inilah yang menjadi aktivitas utama selain dari proses data.

Dalam C++ kita bisa menggunakan perintah "cout" untuk menampilkan data (output). Sedangkan untuk menampilkan data digunakan perintah "cin". Agar dapat digunakan baik cin ataupun cout diperlukan file header yaitu "<iostream>".

Agar anda tidak pusing ada baiknya kita lakukan langsung dengan cara Praktek.

Pertama : Buat project baru dengan nama coba.cpp  


Kedua : Isi dengan kode seperti berikut.

 

 
    #include <iostream>
    using namespace std;
   
  int main() {
   
      string nama;
      string alamat;
      int stambuk;
      string nomor_hp;
   
      cout << "Input Nama : ";
      cin >> nama;
      
      cout << "Input Alamat : ";
      cin >> alamat;
      
   
      cout << "Input Stambuk : ";
      cin >> stambuk;
      
      cout << "Input Nomor HP : ";
      cin >> nomor_hp;
   
      cout << endl;
   
      cout << "Nama : " << nama << endl;
      cout << "Alamat : " << alamat << endl;
      cout << "Stambuk : " << stambuk << endl;
      cout << "Nomor HP : " << nomor_hp << endl;
   
      return 0;
  }
 
Penjelasan Kode :

Pada bagian atas akan di panggil terlebih dahulu file heade yaitu "  #include <iostream>" agar fungsi cout dan cin dapat dijalankan dalam program.

Kemudian di dalam kode main pertama-tama yang harus di lakukan adalah mendeklarasikan variabel seperti di bawah ini :
 
   string nama;
   string alamat;
   int stambuk;
   string nomor_hp;
 
Variabel-variabel tersebut ditujukan untuk menampung data yang di input nantinya, misalnya inputan nama yang anda masukkan akan di tampung kedalam variabel nama bertipe data String.

Kode selanjutnya yaitu :
 
  cout << "Input Nama : ";
      cin >> nama;
      
      cout << "Input Alamat : ";
      cin >> alamat;
      
   
      cout << "Input Stambuk : ";
      cin >> stambuk;
      
      cout << "Input Nomor HP : ";
      cin >> nomor_hp;
 

Kode ini berfungsi menampilkan kata kemudian di ikuti fungsi menginput data sehingga nantinya akan tampak seperti gambar di bawah ini :


Kemudian terdapat kode cout << endl; dimana kode ini berfungsi untuk melakukan enter.

Kode terakhir yaitu :
 
  cout << "Nama : " << nama << endl;
  cout << "Alamat : " << alamat << endl;
  cout << "Stambuk : " << stambuk << endl;
  cout << "Nomor HP : " << nomor_hp << endl;
 
Berfungi untuk menampilkan semua inputan yang telah di input kedalam variabel tadi. Sehingga akhirnya di dapatkan tampilan seperti berikut.