Chức năng chọn hình từ máy

Một phần của tài liệu ứng dụng tô màu cho bé (Trang 64)

Ngoài các hình kèm theo ứng dụng, ta cũng có thể chọn những hình từ máy. Khi bấm vào nút tương ứng với chắc năng này gallery hiển thị ảnh của máy sẽ hiển thị các ảnh để ta chọn . Để thực hiện chức năng này ta cần xây dựng một phương thức ứng, phương thức này sẽ được gọi khi nhấn vào nút chức năng tương ứng. Trong phương thức này ta sẽ tạo mới một intent, intent này sẽ khởi động một activity hiển thị gallery để ta chọn hình. Sau khi chọn hình xong, ta cần nhận lại hình này và hiển thị lên màn hình, vì thế ta cần khởi động activity này bằng phương thức startActivityForResult():

public void Gallery(View v) {

Intent choosePictureIntent = new

Intent(Intent.ACTION_PICK,android.provider.MediaStore.Image s.Media.EXTERNAL_CONTENT_URI);

startActivityForResult(choosePictureIntent, 1); }

Để nhận lại hình ảnh đã chọn, ta cần ghi đè lại phương thức onActivityResult() : protected void onActivityResult(int requestCode, int resultCode, Intent intent) {

// TODO Auto-generated method stub

super.onActivityResult(requestCode, resultCode, intent);

if(resultCode == RESULT_OK) {

Uri imageFileUri = intent.getData(); Display currentDisplay = getWindowManager().getDefaultDisplay(); float dw = display.getWidth(); float dh = display.getHeight(); try {

bmp = BitmapFactory.decodeStream(

getContentResolver().openInputStream(imageFi leUri), null,null);

alteredBitmap =

Bitmap.createScaledBitmap(bmp, (int)dw, (int)dh, true);

mview = new MyView(this,alteredBitmap); display.removeAllViews(); display.addView(mview); } catch (FileNotFoundException e) { Log.v("ERROR",e.toString()); } } }

Trong phương thức trên, kết quả trả về sẽ được truyền qua đối tượng intent. Ta lấy dữ liệu bằng cách gọi hàm getData(), kết quả trả về là một đường dẫn đến dữ liệu (hình ta đã chọn) vì thế ta cần lưu đường dẫn này vào một đối tượng thuộc lớp Uri:

Uri imageFileUri = intent.getData();

Sau đó, ta cần giải mã hình ảnh được lưu trữ trong đường dẫn này vào một đối tượng thuộc lớp Bitmap bằng phương thức decodeStream của lớp BitmapFactory

bmp = BitmapFactory.decodeStream(

getContentResolver().openInputStream(imageFileUri), null,null);

Điều chỉnh kích thước của hình ảnh này bằng phương thức createScaleBitmap()

alteredBitmap = Bitmap.createScaledBitmap(bmp, (int)dw, (int)dh, true);

Khởi tạo lại đối tượng của lớp MyView với tham số truyền vào là hình ảnh đã chọn

mview = new MyView(this,alteredBitmap); Hiển thị lên màn hình :

display.addView(mview);

Ta cần nhớ khai báo thêm quyền truy cập thẻ nhớ trong tập tin AndroidManifest.xml <uses-permission

Một phần của tài liệu ứng dụng tô màu cho bé (Trang 64)