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 android:name="android.permission.…

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_WORK","1"));

--> Android Stud…

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ề @Override
protected void onActivityResult(int reque…

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
protected void applyTransformation(f…

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)

publicvoid composeEmail(String[] addresses,String subject){Intent intent =newIntent(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)

publicvoid dialPhoneNumber(String phoneNumber){Intent intent =newIntent(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,....)
publicvoid openWifiSettings(){Intent intent =newIntent(Settings.ACTION_WIFI_SETTINGS);i

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) { pencil = new Paint();pencil.setAntiAlias(true);pencil.setDither(true);pencil.setColor(lineColor);pencil.setStyle(Paint.Style.STROKE);pencil.setStrokeJoin(Paint.Join.ROUND);pencil.setStrokeCap(Paint.Cap.ROUND);pencil.setStr…

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 ý: bạn cũng có thể dùng tổ hợp phím Ctrl + Shift +…

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() == ConnectivityManager.TYPE_WIFI) return NETWORK_TYPE_WI…

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 imagecolor.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 ảnh tạo ra có kích thước khác nhau trên các thiết bị có độ phân giải khác nhau, sử dụng thêm hàm chuyển đổi g…

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.SwipeRefreshLayoutandroid:id="@+id/refresh_list"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_marginTop="@dimen/_8sdp"> <android.support.v7.widget.RecyclerViewandroid: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:background="@color/background_color"android:padding="@dimen/_8sdp"> <TextViewandroid:id="@+i…