Bài đăng

Đang hiển thị bài đăng từ Tháng 3, 2017

Android - Paint Simple - Tạo View vẽ hình đơn giản trên Android Studio

Tạo một lớp SimplePaintView public class SimplePaintView extends View { public int width ; public int height ; private Bitmap mBitmap ; private Canvas mCanvas ; private Path mPath ; private Paint mBitmapPaint ; Context context ; private Paint circlePaint ; private Path circlePath ; private Paint pencil ; public SimplePaintView (Context c , int lineColor) { super (c) ; getPencil(lineColor) ; context = c ; mPath = new Path() ; mBitmapPaint = new Paint(Paint. DITHER_FLAG ) ; circlePaint = new Paint() ; circlePath = new Path() ; circlePaint .setAntiAlias( true ) ; circlePaint .setColor(getResources().getColor(R.color. colorPrimary )) ; circlePaint .setStyle(Paint.Style. STROKE ) ; circlePaint .setStrokeJoin(Paint.Join. MITER ) ; circlePaint .setStrokeWidth( 4f ) ; } private void getPencil ( int lineColor) { penci

Android - Convert View to Image - Chụp ảnh một View trên Android Studio

public Bitmap convertViewToBitmap(View v) { Bitmap b = Bitmap.createBitmap(v.getWidth(), v.getHeight(), Bitmap.Config.ARGB_8888); Canvas c = new Canvas(b); v.layout(v.getLeft(), v.getTop(), v.getRight(), v.getBottom()); v.draw(c); return b; }

Android - Compare Images - So sánh, tìm điểm khác biệt giữa hai ảnh trên Android Studio

private void findDifference(Bitmap firstImage, Bitmap secondImage) { Bitmap bmp = secondImage.copy(secondImage.getConfig(), true); if (firstImage.getWidth() != secondImage.getWidth() || firstImage.getHeight() != secondImage.getHeight()) { return; } for (int i = 0; i < firstImage.getWidth(); i++) { for (int j = 0; j < firstImage.getHeight(); j++) { if (firstImage.getPixel(i, j) != secondImage.getPixel(i, j)) { bmp.setPixel(i, j, Color.YELLOW); } } } imgOutput.setImageBitmap(bmp); }

Android - Resolution - Lấy độ phân giải màn hình trên Android Studio

DisplayMetrics displayMetrics = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(displayMetrics); //chiều cao int height = displayMetrics.heightPixels; // chiều rộng int width = displayMetrics.widthPixels;

Android - Shortcut Key - Phím tắt trên Android Studio

1. Di chuyển giữa các file đang mở:  Ctrl + Tab  trên Windows/Linux ( Cmd + Tab  trên Mac): Cho phép các bạn lựa chọn truy cập vào những file đã và đang mở trong project hiện tại 2. Di chuyển giữa các tab:   Alt + <–  ( Cmd + Shift + [ )  hoặc  Alt + –>  ( CMD + Shift + ] ): Giúp các bạn dịch chuyển cửa sổ soạn thảo sang những file bên trái ( Alt + <– ) hoặc bên phải ( Alt + –> ) file hiện tại trên thanh navigation bar. 3. Đóng tab hiện tại:  Ctrl + F4  ( Cmd+ W ). 4. Tìm vị trí khai báo của biến/hàm:  Ctrl + B  ( Cmd + B ): Thay vì giữ Ctr và dùng chuột click trực tiếp vào biến/hàm, các bạn hãy thử sử dụng shortcut này, rất đơn giản và nhanh chóng. 5. Tìm vị trí thực thi của biến/hàm:  Ctrl + Alt + B  ( Cmd + Option + B ) 6. Truy cập đến class định nghĩa của biến:  Ctrl + Shift + B  ( Cmd + Shift + B ) 7. Trở lại vị trí vừa chỉnh sửa:  Ctrl + Alt + <–  ( Cmd + Option + [ ) hoặc  Ctrl + Alt + –>  ( Cmd + Option + ] ) để tiến đến vị trí vừa chuyển qua. Lưu

Android - Network Utils - Kiểm tra kết nối internet trên Android Studio

1. Thêm permission trong manifest file <uses-permission android :name= "android.permission.INTERNET" /> <uses-permission android :name= "android.permission.ACCESS_NETWORK_STATE" /> 2. Kiểm tra loại kết nối trên điện thoại public static final int NETWORK_TYPE_NO_CONNECTION = - 1 ; public static final int NETWORK_TYPE_UNKNOWN = 0 ; public static final int NETWORK_TYPE_2G = 1 ; public static final int NETWORK_TYPE_3G = 2 ; public static final int NETWORK_TYPE_4G = 3 ; public static final int NETWORK_TYPE_WIFI = 4 ; Hàm sau sẽ thực hiện kiểm tra loại kết nối internet trên điện thoại, trả về TYPE tương ứng: public static int getNetworkType (Context context) { ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context. CONNECTIVITY_SERVICE ) ; NetworkInfo info = cm.getActiveNetworkInfo() ; if (info == null || !info.isConnected()) return NETWORK_TYPE_NO_CONNECTION ; if (info.getType() == Connec

Android - Date Time - Lấy giá trị ngày, giờ theo định dạng tùy biến trong Android Studio

1. Tạo các định dạng private static final String DATE_FORMAT = "dd/MM/yyyy" ; private static final String TIME_FORMAT_12 = "hh:mm:ss a" ; private static final String TIME_FORMAT_24 = "HH:mm:ss" ; 2. Lấy ngày public static String getDateString (Date date) { SimpleDateFormat format = new SimpleDateFormat( DATE_FORMAT ) ; return format.format(date) ; } 3. Lấy giờ (24 giờ) public static String getTime24String (Date date) { SimpleDateFormat format = new SimpleDateFormat( TIME_FORMAT_24 ) ; return format.format(date) ; } 4. Lấy giờ (12 giờ) public static String getTime12String (Date date) { SimpleDateFormat format = new SimpleDateFormat( TIME_FORMAT_12 ) ; return format.format(date) ; } Chú ý: Các giá trị trả về là String

Android - Circle Image - Tạo ảnh bo tròn trong Android Studio

Để tạo ảnh bo tròn, đầu tiên cần có dữ liệu ảnh đầu vào dạng bitmap, sau đó thực hiện hàm sau ảnh sẽ được xử lý và trả về một bitmap: public Bitmap drawCircleImage (Bitmap imageOriginal , int radiusDp , Resources resources) { if (imageOriginal == null ) { return BitmapFactory. decodeResource (resources , R.mipmap. place_hole ) ; } int radiusPx = convertDpToPx (radiusDp , resources) ; Bitmap bitmapResource = Bitmap. createBitmap (radiusPx * 2 , radiusPx * 2 , Bitmap.Config. ARGB_8888 ) ; Canvas canvas = new Canvas(bitmapResource) ; Paint color = new Paint() ; color.setAntiAlias( true ) ; canvas.drawCircle(radiusPx , radiusPx , radiusPx , color) ; // important here for circle image color.setXfermode( new PorterDuffXfermode(PorterDuff.Mode. SRC_IN )) ; canvas.drawBitmap(Bitmap. createScaledBitmap (imageOriginal , radiusPx * 2 , radiusPx * 2 , true ) , 0 , 0 , color) ; return bitmapResource ; } Tránh hiện tượng

Android - Simple RecyclerView, SwipeRefreshLayout - Tạo RecyclerView đơn giản hiển thị một danh sách có thể refresh trong Android Studio

1. Tạo View Thêm thẻ sau trong layout file: <android.support.v4.widget.SwipeRefreshLayout android :id= "@+id/refresh_list" android :layout_width= "match_parent" android :layout_height= "match_parent" android :layout_marginTop= "@dimen/_8sdp" > <android.support.v7.widget.RecyclerView android :id= "@+id/rcv_list" android :layout_width= "match_parent" android :layout_height= "match_parent" /> </android.support.v4.widget.SwipeRefreshLayout> Tạo view cho item trong list: tạo một file xml: item_layout.xml <? xml version= "1.0" encoding= "utf-8" ?> <RelativeLayout xmlns: android = "http://schemas.android.com/apk/res/android" android :layout_width= "match_parent" android :layout_height= "wrap_content" android :layout_marginBottom= "@dimen/_8sdp" android :back

Android - Custom SearchView - Tạo khung tìm kiếm đơn giản trong Android Studio

Tạo SearchView đơn giản ở bất cứ đâu: 1. Tạo View Trong file xml trong thư mục layout thêm thẻ sau: <SearchView android :id= "@+id/search_view" android :layout_width= "match_parent" android :layout_height= "wrap_content" android :background= "@color/background_color" android :foregroundTint= "@color/background_color" android :iconifiedByDefault= "false" android :paddingLeft= "-8dp" android :paddingRight= "-8dp" android :queryBackground= "@android:color/transparent" android :queryHint= "@string/search_hint" /> Chú ý: - android:iconifiedByDefault="false" --> mở rộng search view - android:queryHint : thêm gợi ý 2. Xử lý trong Activity: private SearchView searchView ; searchView = (SearchView) findViewById(R.id. search_view ) ; searchView .setOnQueryTextListener( new SearchView.OnQueryTextListener() {

Android - Image - Take Photo, Choose Photo from Gallery - Xử lý chụp ảnh, lấy ảnh trong Android Studio

Chụp ảnh hay lấy ảnh trong máy sử dụng các thành phần có sẵn trên máy --> sử dụng Intent 1. Chụp ảnh Trong manifest file cần khai báo: <uses-feature android :name= "android.hardware.camera" android :required= "false" /> <uses-feature android :name= "android.hardware.camera2" android :required= "false" /> Trong Activity thực hiện: Intent takePictureIntent = new Intent(MediaStore. ACTION_IMAGE_CAPTURE ) ; if (takePictureIntent.resolveActivity(getPackageManager()) != null ) { startActivityForResult(takePictureIntent , CAMERA_REQUEST ) ; } else { } Chú ý cần tạo request code: private static final int CAMERA_REQUEST = 111 ; Xử lý kết quả sau khi chụp ảnh: @Override protected void onActivityResult ( int requestCode , int resultCode , Intent data) { super .onActivityResult(requestCode , resultCode , data) ; if (requestCode == CAMERA_REQUEST && resultCode == Activity. RESU