آموزش برنامه نویسی اندروید قسمت پانزدهم

1396/7/19 --- 4675

با سلام خدمت دوستانی که در حال مطالعه آموزش اندروید هستند. مقاری هستم و قرار هست با هم جلسه 15 آموزش اندروید رو شروع کنیم.

در جلسه قبل یک مرور کلی بر پروژمون داشتیم و یاد گرفتیم چطور عکس اضافه کنیم. توی این جلسه هم بهم یک سری از کارهای جالب برای پروژمون رو یاد میگیریم.

 

1 ) Crop کردن عکس

در جلسه قبل یاد گرفتیم چطور عکسی رو از gallery انتخاب کنیم، به bitmap تغییر بدیم و داخل یک ImageView قرار بدیم. و برای اینکه بصورت دایره­ای بنظر بیاد روی ImageView خود یک فریم دایره­ای گذاشتیم. اما مشکلی که بود این بود که عکس باید مربع یعنی مثل ImageVIew ما دارای طول و عرض برابر میبود تا داخل ImageView قرار بگیرد. این بار میخواهیم یاد بگیریم چطور عکس را به فرم مربعی crop کنیم.

کدهایی که داشتیم به ترتیب زیر بودند:

آموزش برنامه نویسی اندروید قسمت پاتزدهم

آموزش برنامه نویسی اندروید قسمت پاتزدهم

این بار باید پس کاری کنیم که پس از اینکه فرد عکس خود را انتخاب کرد، وارد پنجره­ای برای crop کردن بشود. کدمان را باید کمی تغییر بدهیم. کدهایی که خواهم گفت شاید کمی سطح بالاتری از آموزشی باشد که تا الان داشتیم اما چون به این مرحله رسیدیم سعی میکنم براتون باز کنم این مبحث رو. اول متد زیر را معرفی میکنم که برای crop کردن عکس هست. و خوشبختانه امکان crop در خود اندروید قرار داده شده است.

آموزش برنامه نویسی اندروید قسمت پاتزدهم

 

دوباره خط به خط بررسی کنیم چه عملکردی داریم.

 

مجددا درخواستی داریم از اندروید پس از intent استفاده میکنیم و یکی از intent های خود اندروید را صدا می­زنیم.

در مرحله بعد مانند setType که در جلسه قبل معرفی کردم، متدی داریم به نام setDataAndType. یک ورودی آن مانند setType هست که نمونه­های آن را جلسه قبل نشان دادم. تنها نکته ای که باید بگم و در جلسه قبل فراموش شد این هست که در انواع Type ها که دیدیم مثلا داشتیم image/png یا image/jpg. اینجا نوشتیم image/* که یعنی انواع نوع عکس­ها را بپذیرد. اما setDataAndType ورودی دیگری هم دارد که یک Uri هست. (Uniform resource identifier). که در اصل ورودی متدمان هم می­باشد. این مقدار همان عکسی هست که از گالری دریافت می­کنیم و باید برای crop کردن پاس کنیم.

2  ) ساخت یک صفحه splash

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

به این صفحات splash می­گوییم.

ایده ساخت این صفحات ساده هست. یک صفحه (Activity) را می­سازیم. بعنوان  Activity اصلی آن را با اجرای برنامه run می­کنیم. و دستوری می­نویسیم که این صفحه به مدت معینی در حال اجرا بماند و سپس به صفحه home در برنامه­مان برود.

پس ابتدا باید یه صفحه برای اینکار طراحی کنیم. من یک اکتیویتی به نام SplashActivity و یک layout به نام  splash_layout به برنامه­مان اضافه می­کنم و یک رنگ ساده به زمینه می­دهم که قابل تشخیص باشد.

آموزش برنامه نویسی اندروید قسمت پاتزدهم

برای ایجاد تاخیر در این اکتیویتی و سپس اجرای اکتیویتی اصلی برنامه باید از Handler استفاده کنیم. اما یک توضیح مبتدی در این قسمت می­دهم چون باید بعدا خیلی عمیق تر به این مفاهیم بپردازیم.

 

اندروید جهت اجرای پردازش ناهمگام ,قابلیت استفاده از کلاس Thread را پشتیبانی می کند .به این معنی که وقتی شما قصد انجام کار سنگینی را در برنامه دارید باید بصورت غیرهمگام با برنامه خود این عملیات را انجام دهید تا در روند اجرای برنامه اصلی شما وقفه ای ایجاد نشود. در اصل میتوان گفت برای اجرای یک کار جدا از کاری که در UI یا در اصل کاری که کاربر در حال انجام است، از Thread استفاده میکنیم.

در کنار آن برای ایجاد ارتباط بین Thread و Ui باید از همگام سازها استفاده کنیم.

اندروید برای همگام سازی امکاناتی را عرضه می کند . بطور مثال می توانید برای این منظور از کلاس های  android.os.Handler یا AsyncTasks  کمک بگیرید 

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

این توضیحات در آینده تکمیل خواهند شد

حالا کدمان را می­نویسیم. قرار ما این بود که مثلا 10 ثانیه روی splash بمانیم و سپس شروع کنیم اکتیویتی اصلی را.

پس کد زیر را بنویسید:

آموزش برنامه نویسی اندروید قسمت پاتزدهم

یک Handler نمونه گرفتم، از متدی به نام PostDelayed استفاده کردم که به من امکان ایجاد یک تاخیر را می دهد، ورودی آن یک Runnable هست که کدی هست که میخواهم پس از اجرای وقفه برای من اتفاق بیفتد را داخل متد run اش مینویسم. در انتها مقداری که میخواهیم وقفه طول بکشد را داریم. این مقدار به میلی ثانیه هست. پس 1000 مقدار 10 ثانیه را برای من ایجاد میکند

کافی هست در run کد اجرای اکتیویتی امان را بنویسیم

 

البته باید تغییراتی هم در برنامه بدهیم. این اکتیویتی جدید را در manifest تعریف کنیم و اینکه آن را بعنوان اکتیویتی اصلی بنویسیم

آموزش برنامه نویسی اندروید قسمت پاتزدهم

فایل manifest

آموزش برنامه نویسی اندروید قسمت پاتزدهم

حالا وقتی اجرا کنیم برنامه را ابتدا این صفحه برای 10 ثانیه میماند و سپس خارج میشود.

فقط یک نکته ای  که هست اینکه کاربر با زدن دکمه back از صفحه اصلی به splash برمیگردد و اصلا جالب نیست! برای جلوگیری از اینکار باید splash را در هنگام اجرای صفحه اصلی ببندیم:

آموزش برنامه نویسی اندروید قسمت پاتزدهم

حالا با زدن دکمه back دیگه به splash برنمیگردیم

این بحث تمام شد تا دوباره به بحث Handler و Thread برگردیم.

در بخش بعدی میخواهم یاد بگیریم چطور بین دو اکتیویتی داده ارسال کنیم.

3 ) Put Extras

شما میتوانید هنگامی که یک Intent را تعریف میکنیم با متد putExtra به آن مقداری را اضافه کنیم. این متد دو ورودی دارد، ورودی اول نام مقداری که میخواهید بفرسید که باید بعنوان یک id ثابت باشد و با این id میتوانید در اکتیویتی ای که واردش میشوید مقدار ارسال شده را بگیرید. ورودی دوم هم در اصل داده ی ارسالی هست

برای اینکه این بحث را متوجه شوید بیاید یک کاری انجام دهیم. یک صفحه register به برنامه اضافه میکنیم. در این صفحه کاربر نام خود را وارد میکند و ثبت نام می کند. که بعدها میتوانیم پسورد و... را هم اضافه کنیم.

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

آموزش برنامه نویسی اندروید قسمت پاتزدهم

آموزش برنامه نویسی اندروید قسمت پاتزدهم

و با کد زیر در اکتیویتی میتوانیم مقدار نوشته شده در این editText را بخوانیم

EditText edt = (EditText) findViewById(R.id.txtName);
        String Name = edt.getText().toString();

روش کار را به این ترتیب تغییر میدهیم که از صفحه splash وارد این شویم (تنها با تغییر intent ). در اینجا نیز دکمه ای قرار میدهیم تا با زدن آن ضمن ارسال نام کاربر وارد صفحه اصلی برنامه شویم.

آموزش برنامه نویسی اندروید قسمت پاتزدهم

در اکتیویتی اصلی (صفحه اصلی برنامه) یک TextView قرار میدهم برای نمایش نام کاربر:

آموزش برنامه نویسی اندروید قسمت پاتزدهم

و البته معرفی اکتیویتی رجیستر درmanifest را فراموش نمیکنیم

اجرا کنید و لذت ببرید

بحث کراپ کردن هنوز باقی هست اما با توجه به میزان مطالب که اون هم کلی جای بحث دارد فکر میکنم به جلسات بعد واگذار کنیم بهتر باشد. پس خسته نباشید