• latifah maulida rahma changed their profile picture 2 years, 6 months ago

  • Tutorial membuat aplikasi ICapture (Image Capture)

  • Buka aplikasi Eclipse IDE
  • Kemudian tetntukan workspace
  • Buat sebuah project android, file -> NewProject -> androidProject
  • Beri nama project yang akan dibuat, kemudian klik Next
  • Pada Configure Launcher Icon, logo aplikasi dapat berupa Image, Clipart maupun Text. Pada contoh ini menggunakan Text. Kemudian klik Next >.
  • Pada Create Activiy, biarkan sesuai dengan default kemudian klik Next >.
  • Pada Blank Activity, pada field Activity Name di isi dengan nama class yang akan dibuat. Kemudian klik Finish.
  • Lakukan coding pada “Activity_main.xml”
  •  

    Activity_main.xml

    Pada tahap ini, kita buat layout / interface dari Icapture. Ada dua tombol yang ada pada activity_main yaitu tombol Image Capture dan tombol Gallery .

    • Tombol Image Capture digunakan untuk memulai membuka camera dan melakukan capture gambar.
    • Tombol gallery untuk membuka gallery dari gambar-gambar yang sudah diambil dari app ICapture.
    • ImageView digunakan untuk menampilkan hasil capture yang baru saja diambil.

    <?xml version=“1.0” encoding=“utf-8”?><LinearLayout xmlns:android=“http://schemas.android.com/apk/res/android”

    android:layout_width=“fill_parent”

    android:layout_height=“fill_parent”

    android:layout_marginTop=“@dimen/activity_horizontal_margin”

    android:gravity=“center_vertical”

    android:orientation=“vertical” >

     

    <Button

    android:id=“@+id/button1”

    android:layout_width=“244dp”

    android:layout_height=“wrap_content”

    android:layout_gravity=“center_vertical|center”

            android:text=“Image Capture” />

     

    <Button

    android:id=“@+id/galleryBt”

    android:layout_width=“238dp”

    android:layout_height=“wrap_content”

    android:layout_gravity=“center”

    android:layout_margin=“@dimen/activity_vertical_margin”

            android:text=“Gallery” />

     

    <ImageView

    android:id=“@+id/imageView1”

    android:layout_width=“match_parent”

            android:layout_height=“250dp”

    android:layout_weight=“0.96”

    android:src=“@style/AppBaseTheme” />

     

    </LinearLayout>

     

    Setelah itu, lakukan coding pada bagian java, “MainActivity.java”. Modifikasi sourcecode dibawah ini digunakan untuk tombol Image Capture melakukan tugas memanggil activity dari app lain yaitu dari camera handphone pengguna guna melakukan pengambilan gmabar . lalu tombol Gallery melakukan tugasnya dengan memanggil activity gallery GalleryActivity.class

        // Activity request codesprivate static final int CAMERA_CAPTURE_IMAGE_REQUEST_CODE = 100;

    public static final int MEDIA_TYPE_IMAGE = 1;

    private static final String IMAGE_DIRECTORY_NAME = “Hello Camera”;

    private Uri fileUri;

    private ImageView imgPreview;

    private Button btnKamera,  btnGallery;

     

    @Override

    protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);

     

    imgPreview = (ImageView) findViewById(R.id.imageView1);

    btnKamera = (Button) findViewById(R.id.button1);

    btnGallery = (Button) findViewById(R.id.galleryBt);

     

    btnKamera.setOnClickListener(new View.OnClickListener() {

     

    @Override

    public void onClick(View v) {

    // capture image

    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

    fileUri = getOutputMediaFileUri(MEDIA_TYPE_IMAGE);

    intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);

    startActivityForResult(intent, CAMERA_CAPTURE_IMAGE_REQUEST_CODE);

    }

    });

    btnGallery.setOnClickListener(new View.OnClickListener() {

    @Override

    public void onClick(View v) {

    Intent a = new Intent (MainActivity.this, GalleryActivity.class);

    startActivity(a);

    }

    });

    }

     

    Setelah gambar di ambil , user akan diminta apakah gambar akan disimpan atau tidak. Untuk itu kita modifikasi source dibawah ini pada MainActivity.java

    /*** metod ini akan dipanggil setelah camera ditutup

    * */

    @Override

    protected void onActivityResult(int requestCode, int resultCode, Intent data) {

    // jika capture image

    if (requestCode == CAMERA_CAPTURE_IMAGE_REQUEST_CODE) {

    if (resultCode == RESULT_OK) {

    // jika berhasi maka

    // ditampilkan pada image view

    previewCapturedImage();

    } else if (resultCode == RESULT_CANCELED) {

    // jika batal

    Toast.makeText(getApplicationContext(),

    “User cancelled image capture”, Toast.LENGTH_SHORT)

    .show();

    } else {

    // jika gagal

    Toast.makeText(getApplicationContext(),

    “Sorry! Failed to capture image”, Toast.LENGTH_SHORT)

    .show();

    }

    }

    }

     

    Ketika user seruju untuk menyimpan hasil capture, foto tersebut akan ditampilkan pada ImageView

    /** menampilakan image pada ImageView

    */

    private void previewCapturedImage() {

    try {

    imgPreview.setVisibility(View.VISIBLE);

     

    // bimatp factory

    BitmapFactory.Options options = new BitmapFactory.Options();

     

    // mengecilkan image agar sesuai dengan ImageView

    options.inSampleSize = 8;

     

    final Bitmap bitmap = BitmapFactory.decodeFile(fileUri.getPath(),

    options);

     

    imgPreview.setImageBitmap(bitmap);

    } catch (NullPointerException e) {

    e.printStackTrace();

    }

    }

     

    Gambar akan disimpan pada sebuah folder dengan nama Hallo Camera di SdCard hanphone. Untuk bisa melakukan hal tersebut kita perlu memodifikasi source code dibawah ini pada MainActivity.java

    /*** Here we store the file url as it will be null after returning from camera

    * app

    */

    @Override

    protected void onSaveInstanceState(Bundle outState) {

    super.onSaveInstanceState(outState);

    // save file url in bundle as it will be null on scren orientation

    // changes

    outState.putParcelable(“file_uri”, fileUri);

    }

    /*

    * Here we restore the fileUri again

    */

    @Override

    protected void onRestoreInstanceState(Bundle savedInstanceState) {

    super.onRestoreInstanceState(savedInstanceState);

    // get the file url

    fileUri = savedInstanceState.getParcelable(“file_uri”);

    }

    /**

    * membuat file uri untuk menyimpan image

    */

    public Uri getOutputMediaFileUri(int type) {

    return Uri.fromFile(getOutputMediaFile(type));

    }

    /*

    * membuat nama file dari setiap image yang disimpan

    */

    private static File getOutputMediaFile(int type) {

    // menyeting dimana kita akan menyimpan file di SdCard

    // file akan disimpan pada directory picture di dalam folder  IMAGE_DIRECTORY_NAME

    // IMAGE_DIRECTORY_NAME sudah kita

    // inisialisasi dengan private static final String IMAGE_DIRECTORY_NAME = “Hello Camera”;

    File mediaStorageDir = new File(

    Environment

    .getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES),

    IMAGE_DIRECTORY_NAME);

    // jika folder belum dibuat maka dibuatkan folder Hallo Camera

    if (!mediaStorageDir.exists()) {

    if (!mediaStorageDir.mkdirs()) {

    Log.d(IMAGE_DIRECTORY_NAME, “Oops! Failed create ”

    + IMAGE_DIRECTORY_NAME + ” directory”);

    return null;

    }

    }

    // membuat nama file

    String timeStamp = new SimpleDateFormat(“yyyyMMdd_HHmmss”,

    Locale.getDefault()).format(new Date());

    File mediaFile;

    if (type == MEDIA_TYPE_IMAGE) {

    mediaFile = new File(mediaStorageDir.getPath() + File.separator

    + “IMG_” + timeStamp + “.jpg”);

    } else {

    return null;

    }

    return mediaFile;

    }

     

    Kita modifikasi  AndroidManifesr.xml  Tujuan pada tahap ini adalah untuk meminta ijin pada aplikasi agar aplikasi kamera dapat berjalan pada andoid. Berikut codingnya.

    • android.hardware.camera : untuk mengakses kamera
    • WRITE_EXTERNAL_STORAGE : untuk mengakses SdCard dan menambahkan file
    • READ_EXTERNAL_STORAGE : untuk membaca file yang ada di SdCard guna kepentingan menampilkannya di gallery

    <uses-feature android:name=“android.hardware.camera” /><uses-permission android:name=“android.permission.WRITE_EXTERNAL_STORAGE” />

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

     

    Kita membuat gallery dengan tampilan gridview , untuk itu kita buat file activity_gallery. Xml untuk memodifikasi tampilan . kita tambahkan source code dibawah ini

    <GridViewandroid:id=“@+id/gridview”

    android:layout_width=“fill_parent”

    android:layout_height=“fill_parent”

    android:columnWidth=“90dp”

    android:numColumns=“auto_fit”

    android:verticalSpacing=“10dp”

    android:horizontalSpacing=“10dp”

    android:stretchMode=“columnWidth”

    android:gravity=“center”/>

     

    Pada GalleryActivity.java , memanggil gridview dan mengakses folder Hello Camera untuk membaca file yang ada pada folder tersebut

    int IMAGE_PICKER_REQUEST;private ImageAdapter imageAdapter;

     

    @Override

    public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_gallery);

     

    GridView gridview = (GridView) findViewById(R.id.gridview);

    imageAdapter = new ImageAdapter(this);

    gridview.setAdapter(imageAdapter);

     

    //mengakses folder Hello Camera

    String ExternalStorageDirectoryPath = Environment

    .getExternalStorageDirectory()

    .getAbsolutePath();

     

    String targetPath = ExternalStorageDirectoryPath + “/Pictures/Hello Camera”;

     

    Toast.makeText(getApplicationContext(), targetPath, Toast.LENGTH_LONG).show();

    File targetDirector = new File(targetPath);

     

    File[] files = targetDirector.listFiles();

    for (File file : files){

    imageAdapter.add(file.getAbsolutePath());

    }

    gridview.setOnItemClickListener(new OnItemClickListener() {

    public void onItemClick(AdapterView<?> parent, View v, int position, long id) {

    Toast.makeText(GalleryActivity.this, “” + position, Toast.LENGTH_SHORT).show();

    }

    });

    }

     

     

    ImageAdapter.java , digunakan untuk menentukan ukuran gambar dan bagaimana gambar spasi di GridView dengan menetapkan padding untuk setiap gambar:

    public class ImageAdapter extends BaseAdapter { 

    private Context context;

    ArrayList<String> imageList = new ArrayList<String>();

     

    public ImageAdapter(Context c) {

    context = c;

    }

     

    void add(String path){

    imageList.add(path);

    }

     

    @Override

    public int getCount() {

    return imageList.size();

    }

     

    @Override

    public Object getItem(int arg0) {

    // TODO Auto-generated method stub

    return null;

    }

     

    @Override

    public long getItemId(int position) {

    // TODO Auto-generated method stub

    return 0;

    }

     

    @Override

    public View getView(int position, View convertView, ViewGroup parent) {

    ImageView imageView;

    if (convertView == null) {

    imageView = new ImageView(context);

    imageView.setLayoutParams(new GridView.LayoutParams(220, 220));

    imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);

    imageView.setPadding(8, 8, 8, 8);

    } else {

    imageView = (ImageView) convertView;

    }

     

    Bitmap bm = decodeSampledBitmapFromUri(imageList.get(position), 220, 220);

    imageView.setImageBitmap(bm);

    return imageView;

    }

     

    public Bitmap decodeSampledBitmapFromUri(String path, int reqWidth, int reqHeight) {

     

    Bitmap bm = null;

    final BitmapFactory.Options options = new BitmapFactory.Options();

    options.inJustDecodeBounds = true;

    BitmapFactory.decodeFile(path, options);

    options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight);

     

    options.inJustDecodeBounds = false;

    bm = BitmapFactory.decodeFile(path, options);

     

    return bm;

    }

     

    public int calculateInSampleSize(

     

    BitmapFactory.Options options, int reqWidth, int reqHeight) {

    final int height = options.outHeight;

    final int width = options.outWidth;

    int inSampleSize = 1;

     

    if (height > reqHeight || width > reqWidth) {

    if (width > height) {

    inSampleSize = Math.round((float)height / (float)reqHeight);

    } else {

    inSampleSize = Math.round((float)width / (float)reqWidth);

    }

    }

     

    return inSampleSize;

    }

     

    }

     

    Hasil uji coba adalah sebagai berikut:

  • Merupakan tampilan awal dari app ICapture
  • ic (1) ic (2)

    • Untuk melakukan capture, dipilih tombol Image Capture . selanjutnya kita akan masuk ke camera

    ic (4)

    • Setelah berhasil mengambil foto, hasilnya akan ditampilan

    ic (5)

    • Ketika setuju untuk menyimpan foto makan ditipilih tombol centang, yang selanjutnya hasilnya akan ditampilkan pada ImageView

    ic (6)

    • Untuk melihat gallery, ditipilih tombol Gallery .

    Sebelumic (3)

    Sesudahic (7)

    Oleh:

    Latifah Maulida Rahma – 115090601111004

    Johan Ismail – 115060807111100