آموزش برنامه نویسی اندروید با اندروید استودیو (بخش سی و پنجم: کار با دوربین در اندروید)

استاندارد

گاهی پیش می آید که در برنامه اندرویدی نیاز به استفاده از دوربین داشته باشیم. اگر تا به حال از برنامه هایی مثل اینستاگرام و برنامه های ویرایش تصاویر استفاده کرده باشید، متوجه شدید که گزینه ای برای استفاده از دوربین دستگاه پلتفرمی شما وجود دارد.

در مواقعی دیگر می خواهیم با استفاده از دوربین در اپلیکیشنی که نوشته ایم، بارکد را بخوانیم تا از آن استفاده ی مورد نظر را کنیم.

من یک پروژه جدید به نام Camera-Gsm ایجاد می کنم. از قسمت Paletteها یک دکمه Button بر روی لایه میکشم. و اسمش را Camera می گذارم.

ابزار جدیدی که در این قسمت با آن کار می کنیم، ImageView می باشد. از قسمت Images & Media در جعبه ابزار، یک ImageView را به لایه اپلیکیشن مورد نظر، می کشیم.

میخواهیم تصویری که دوربین میگیرد در این ImageView نمایش داده شود.

زمانی که ImageView را به سمت لایه اپلیکیشن خود، می کشیم، یک پنجره به شکل زیر باز می شود. این پنجره در واقع آیکونی را به صورت پیش فرض بر روی ImageView ایجاد می کند.

از آنجایی که این موضوع آموزشی است، ما در اینجا ic_Launcher را انتخاب می کنیم تا این شکلک اندروید، بر روی ImageView ایجاد شود که بتوانیم محل آن را تشخیص دهیم.

وقتی ImageView را به لایه اپلیکیشن می کشیم و پس از Ok کردن پنجره بالا، بر روی ImageView می زنیم. سمت راست پنجره Android Studio و از قسمت Properties دو مقدار layout_width و layout_height را که برای تعیین پهنا و ارتفاع ImageView ما می باشد، به شکل زیر تغییر میدهم. مقدار layout_width را fill_parent می گذارم تا عرض لایه اپلیکیشن را به صورت کامل پر کند. سپس مقدار layout_height را match_parent میگذارم تا ارتفاع ImageView به صورت اتوماتیک پر شود.

کد Button و ImageView

<Button
        android:text="Camera"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="14dp"
        android:id="@+id/button"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true" />

<ImageView
        android:layout_height="match_parent"
        app:srcCompat="@mipmap/ic_launcher"
        android:id="@+id/imageView"
        android:layout_width="fill_parent"
        android:layout_above="@+id/button"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_marginBottom="54dp" />

کار ما با طراحی لایه اپلیکیشن تمام است. به سراغ فایل MainActivity.java می رویم تا کدهای جاوای برنامه را درآن می نویسیم.

یک مقدار را به صورت Global یعنی قبل از تابع ()onCreate تعریف میکنم تا هر زمانی که اکتیویتی ما بالا آمد، برنامه به صورت خودکار بالا بیاید.

private static final int Cam_Req = 1;

سپس یک متغیر image از نوع ImageView را نیز به همین صورت یعنی گلوبال تعریف می کنم تا بتوانم در قسمت های مختلف برنامه از آن استفاده کنم.

ImageView image;

برای استفاده از ImageView باید کلاس زیر را به برنامه Import کنیم. (کدهای بالای قسمت جاوای برنامه MainActivity.java)  یا اینکه می توانید با کلیدهای ترکیبی Alt + Enter بر روی کلمه ImageView زمانی که قرمز است کلاس را Import کنید.

import android.widget.ImageView;

در مرحله بعدی باید Button و ImageView را با استفاده از ID به برنامه منتقل کنم.

Button photoButton = (Button) findViewById(R.id.button);
image = (ImageView) findViewById(R.id.imageView);

سپس یک رویداد برای دکمه Button ایجاد میکنم تا هر وقت بر روی آن کلیک شد، اپلیکیشن به قسمت دوربین برود.

 

photoButton.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
                startActivityForResult(cameraIntent, Cam_Req);

            }
        });

در کد بالا در داخل تابع ()onCreate، با استفاده از Intent، اطلاعاتی را از برنامه می گیرد و به MediaStore می فرستد. سپس با استفاده از دستور StartActivityForResult ، اینتنت را به دوربین ارجاع می دهیم. این دستور باعث فعال شدن دوربین می شود.

پس تا به اینجا کار با دوربین تقریبا تمام شده است و دوربین آماده تصویر برداری است. ولی هنوز کدی برای ذخیره تصویر بر روی ImageView ننوشته ایم.

 حال خارج از تابع ()onCreate  کد زیر را می نویسم.

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == Cam_Req) {
            Bitmap photo = (Bitmap) data.getExtras().get("data");
            image.setImageBitmap(photo);

        }
    }

این کد باعث می شود که اطلاعاتی که از دوربین گرفته شده است، با استفاده از کد Bitmap به تصویر تبدیل شود.
و با استفاده از کد زیر به ImageView فرستاده شود.

image.setImageBitmap(photo);

کد کامل MainActivity.java

package com.gsm_developers.camera_gsm;

import android.content.Intent;
import android.graphics.Bitmap;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;

public class MainActivity extends AppCompatActivity {

    private static final int Cam_Req = 1;

    ImageView image;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button photoButton = (Button) findViewById(R.id.button);
        image = (ImageView) findViewById(R.id.imageView);

        photoButton.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
                startActivityForResult(cameraIntent, Cam_Req);

            }
        });

    }

    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == Cam_Req) {
            Bitmap photo = (Bitmap) data.getExtras().get("data");
            image.setImageBitmap(photo);

        }
    }
}

اپلیکیشن را اجرا می کنیم (ما در شبیه ساز این اپلیکیشن را اجرا کردیم)

مشاهده می کنید که در مرحله اول یک دکمه به اسم Camera و یک ImageView با همان شکلک اندرویدی که انتخاب کرده بودیم، در اپلیکیشن ما وچود دارد.

با زدن دکمه Camera دوربین برنامه به کار گرفته می شود. تصویری که در زیر مشاهده می کنید به علت آنست که این برنامه در شبیه ساز اجرا شده است و شبیه ساز برای تست و صحت دوربین از این تصویر استفاده کرده است.

با زدن آیکون کوچک دوربین در گوشه سمت راست برنامه، برنامه به دوربین جلو یا عقب سوییچ می کند.

 

اگر دکمه وسط آبی رنگ را بزنیم عکس گرفته می شود.

مشاهده می کنید که وقتی عکس گرفته می شود، سه آیکون جدید در پایین لایه اپلیکیشن ما ایجاد شده است. این سه لایه، از چپ به راست به ترتیب به معنای کنسل کردن (خروج از قسمت دوربین)، دوباره عکس گرفتن و تایید این عکس به منزله ذخیره آن می باشد.

اگر یادتان باشد، کدهای ذخیره عکس دوربین، و تبدیل آن به تصویر را نوشته بودیم. اگر تیک را بزنیم، عکسی که گرفته شده است را در قسمت ImageView مشاهده می کنیم.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *