Bài đăng

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

Android - Make firework animation - Library

Step 1: Add this in build.gradle --> dependencies: compile 'com.plattysoft.leonids:LeonidsLib:1.3.2' Step 2: Use in Activity: private void fireworkAnimation(View v){ new ParticleSystem(this, 30, R.mipmap.your_image, 1500) .setSpeedRange(0.1f, 0.25f).setFadeOut(300) .setScaleRange(0,1) .setStartTime(0) .oneShot(v, 30); } Have fun! More: https://github.com/plattysoft/Leonids

Android - Make dotter line - Drawable

Create drawable file: dotter_line.xml <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="line"> <stroke android:width="1dp" android:color="#BDBDBD" android:dashGap="8dp" android:dashWidth="7dp" /> </shape> Want rotate? create another drawable file: <rotate android:fromDegrees="90" android:toDegrees="90" android:drawable="@drawable/dotter_line"/> Use in View: maybe need this : android:layerType="software"

Android - Make background with shadow - Drawable

Create drawable file: <?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:height="30dp" android:gravity="bottom" > <shape android:shape="rectangle"> <gradient android:angle="90" android:startColor="@android:color/transparent" android:endColor="#000000"> </gradient> <corners android:radius="5dp"/> </shape> </item> <item android:left="0dp" android:right="0dp" android:top="0dp" android:bottom="3dp"> <shape android:shape="rectangle"> <solid android:color="#FFFFFF"/> <corners android:radius="2dp"/> </shape> </item> </layer-list>

Android - Auto detect network connection change event - Java

Step 1: Create a Receiver - Create class NetworkChangeReceiver: public class NetworkChangeReceiver extends BroadcastReceiver { private NetworkListener networkListener; public void setNetworkListener(NetworkListener networkListener) { this.networkListener = networkListener; } public NetworkChangeReceiver() { } @Override public void onReceive(Context context, Intent intent) { if(networkListener!=null) networkListener.onConnectionChange(); } public interface NetworkListener { void onConnectionChange(); } } - In AndroidManifest.xml add in tag application: <receiver android:name=".yourPath.NetworkChangeReceiver" android:label="NetworkChangeReceiver" > <intent-filter> <action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> </intent-filter> </receiver> - Add permission in AndroidManifest.xml: <uses-permission android:name="android.permission.INTERNET" /> <uses-permission andr

Android - DatePicker

B1: Tạo DatePicker với DatePickerDialog import java.util.Calendar; DatePickerDialog datePicker=new DatePickerDialog(this, new DatePickerDialog.OnDateSetListener() { @Override public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) { } }, Calendar.getInstance().get(Calendar.YEAR), Calendar.getInstance().get(Calendar.MONTH), Calendar.getInstance().get(Calendar.DAY_OF_MONTH)); Bước 2: Tùy biến - Ẩn khung chọn ngày: int dayId = getResources().getIdentifier("android:id/day", null, null); if(dayId != 0) { View dayPicker = datePicker.getDatePicker().findViewById(dayId); if (dayPicker != null) { dayPicker.setVisibility(View.GONE); } } - Ẩn khung chọn tháng: "android:id/month" - Ẩn khung chọn năm: "android:id/year" --> Chỉ chọn ngày hoặc tháng hoặc năm B3: Sử dụng datePicker.show();

Android - Lambda Expression

Bước 1:Cài đặt JDK Để sử dụng trước tiên cần phải cài đặt JDK8 cho Java (Nếu đã cài đặt thì không cần) http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html Bước 2: Cấu hình trong build.gradle(app) defaultConfig { ... jackOptions { enabled true } } compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } Bước 3: Coding (VD) // bình thường button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Log.e("DO_WORK","1"); Log.e("DO_WORK","2"); } }); //lambda button.setOnClickListener(v -> { Log.e("DO_WORK","1"); Log.e("DO_WORK","2"); }); //bình thường button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Log.e("DO_WORK","1"); } }); //lambda button.setOnClickListener(v -> Log.e("DO_W

Android - QR Code reader - Quét QR Code trên Android Studio

Bước 1: Thêm dependency trong Build.Gradle compile 'com.journeyapps:zxing-android-embedded:3.5.0' Bước 2: Trong AndroidManifest.xml Thêm permission: <uses-permission android:name="android.permission.CAMERA"/> Trong thẻ application thêm đoạn sau để đặt chế độ thẳng đứng poitrait cho màn hình <activity android:name="com.journeyapps.barcodescanner.CaptureActivity" android:screenOrientation="portrait" tools:replace="screenOrientation" /> --> thêm xmlns:tools="http://schemas.android.com/tools" trong thẻ manifest Bước 3: Trong Activity // mở activity quét qrcode của thư viện private void openScannerActivity() { IntentIntegrator integrator = new IntentIntegrator(this); integrator.setPrompt("Quét mã QR");// hướng dẫn integrator.setOrientationLocked(false); integrator.setTimeout(30000);//giới hạn thời gian quét integrator.initiateScan(); } // xử lý kết quả trả về @Over

Android - Animation in Code - Một số Animation - hiệu ứng trong Android Studio

// mở rộng một view public static void expand(final View v) { v.measure(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); final int targetHeight = v.getMeasuredHeight(); // Older versions of android (pre API 21) cancel animations for views with a height of 0. v.getLayoutParams().height = 1; v.setVisibility(View.VISIBLE); Animation a = new Animation() { @Override protected void applyTransformation(float interpolatedTime, Transformation t) { v.getLayoutParams().height = interpolatedTime == 1 ? ViewGroup.LayoutParams.WRAP_CONTENT : (int) (targetHeight * interpolatedTime); v.requestLayout(); } @Override public boolean willChangeBounds() { return true; } }; // 1dp/ms a.setDuration((int) (targetHeight / v.getContext().getResources().getDisplayMetrics().density)); v.startAnimation(a); } // thu nhỏ lại public static void collapse(final View v) { final int initialHeight = v.getMeasuredHeight(); Animation a = new Animation() { @Override prote

Android - Remove Focus - Loại bỏ việc Edittext tự động hiện bàn phím

Thêm 2 thuộc tính vào viewgroup - layout chứa edittext: android:descendantFocusability="beforeDescendants" android:focusableInTouchMode="true"

Android - Language Lấy ngôn ngữ, địa điểm hiện tại của thiết bị

Sử dụng Locale: String locale = getResources().getConfiguration().locale.getCountry(); hoặc: String localeDis = getResources().getConfiguration().locale.getDisplayCountry(); hoặc: String displayLanguage=Locale.getDefault().getDisplayLanguage(); Sử dụng thông tin cung cấp từ SIM: TelephonyManager teleMgr = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); if (teleMgr != null) {  String countryISOCode = teleMgr.getSimCountryIso(); }

Android - Các Implicit Intent thường được sử dụng trên Android Studio

1. Gửi Email (Contact trong các App) public void composeEmail ( String [] addresses , String subject ) {     Intent intent = new Intent ( Intent . ACTION_SENDTO );     intent . setData ( Uri . parse ( "mailto:" )); // only email apps should handle this     intent . putExtra ( Intent . EXTRA_EMAIL , addresses );     intent . putExtra ( Intent . EXTRA_SUBJECT , subject );     if ( intent . resolveActivity ( getPackageManager ()) != null ) {         startActivity ( intent );     } } 2. Gọi điện thoại - (Contact trong các App) public void dialPhoneNumber ( String phoneNumber ) {     Intent intent = new Intent ( Intent . ACTION_DIAL );     intent . setData ( Uri . parse ( "tel:" + phoneNumber ));     if ( intent . resolveActivity ( getPackageManager ()) != null ) {         startActivity ( intent );     } } 3. Mở cài đặt cần thiết cho App (wifi,location,....) public void openWifiSettings () {     Intent intent = new

Android - Custom font - Viết chữ thư pháp trên Android Studio

Bước 1: Tạo resource Đầu tiên tải font về để sử dụng: http://fontchu.com/font/categories/VNI/VNI-Thuphap1.ttf Trong thư mục của project tìm đến app-->src--> main, trong main ta tạo một thư mục tên assets. Trong assets tạo thêm một thư mục fonts, copy font vào thư mục fonts Bước 2: Sử dụng font trong activity Typeface custom_font = Typeface.createFromAsset(getAssets(), "fonts/your_font_name.ttf"); Ví dụ sử dụng font cho textView: tv.setTypeface(custom_font ); http://stackoverflow.com/questions/27588965/how-to-use-custom-font-in-android-studio

Android - Copy Parse Text - Sao chép text đơn giản trên Android Studio

private ClipboardManager myClipboard;  private ClipData myClip; myClipboard = (ClipboardManager)getSystemService(CLIPBOARD_SERVICE); // Sao chép String copyText="your_text"; myClip = ClipData.newPlainText("text", copyText);  myClipboard.setPrimaryClip(myClip); // dán  ClipData clipData = myClipboard.getPrimaryClip();   ClipData.Item item = clipData .getItemAt(0);   String parseText = item.getText().toString();

Android - Battery Chagre - Kiểm tra trạng thái pin của thiết bị trên Android Studio

IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);  Intent batteryStatus = registerReceiver(null, ifilter);  int status = batteryStatus.getIntExtra(BatteryManager.EXTRA_STATUS, -1); // điện thoại có đang cắm sạc hay không boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING || status == BatteryManager.BATTERY_STATUS_FULL; // Kiểm tra kết nối sạc int chargePlug = batteryStatus.getIntExtra(BatteryManager.EXTRA_PLUGGED,-1);  // đang sạc bằng kết nối USB boolean usbCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_USB;  // đang sạc bằng củ sạc boolean acCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_AC;

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