Bài đăng

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 );     } } ...

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 + Opti...

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...