package com.wyp.materialqqlite; import java.io.ByteArrayOutputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.UnsupportedEncodingException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Locale; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Bitmap.Config; import android.graphics.Canvas; import android.graphics.Matrix; import android.graphics.Paint; import android.graphics.PixelFormat; import android.graphics.PorterDuff.Mode; import android.graphics.PorterDuffXfermode; import android.graphics.Rect; import android.graphics.RectF; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.graphics.drawable.NinePatchDrawable; import android.text.Spannable; import android.text.SpannableString; import android.text.Spanned; import android.text.style.ClickableSpan; import android.text.style.ImageSpan; import android.view.MotionEvent; import android.view.View; import android.view.inputmethod.InputMethodManager; import android.widget.EditText; public class Utils { public static byte[] InputStreamToByte(InputStream is) throws IOException { ByteArrayOutputStream out = new ByteArrayOutputStream(); int ch; byte[] buf = new byte[1024 * 4]; while ((ch = is.read(buf)) != -1) { out.write(buf, 0, ch); } byte data[] = out.toByteArray(); out.close(); return data; } /* public static String GetBetweenString(String str, String strStart, String strEnd) { int nPos1 = str.indexOf(strStart); if (nPos1 != -1) { int nPos2 = str.indexOf(strEnd, nPos1+1); if (nPos2 != -1) { return str.substring(nPos1+1, nPos2); } } return str; } */ public static String GetBetweenString(String str, String strStart, String strEnd) { int nPos1 = str.indexOf(strStart); if (nPos1 != -1) { nPos1 += strStart.length(); int nPos2 = str.indexOf(strEnd, nPos1); if (nPos2 != -1) { return str.substring(nPos1, nPos2); } } return str; } // 合并两个byte数组 public static byte[] byteMerger(byte[] byte_1, byte[] byte_2){ byte[] byte_3 = new byte[byte_1.length+byte_2.length]; System.arraycopy(byte_1, 0, byte_3, 0, byte_1.length); System.arraycopy(byte_2, 0, byte_3, byte_1.length, byte_2.length); return byte_3; } public static int addBytes(byte[] array, int pos, byte[] add) { System.arraycopy(add, 0, array, pos, add.length); return pos+add.length; } public static int addString(byte[] array, int pos, String add) throws UnsupportedEncodingException { return addString(array, pos, add, "UTF-8"); } public static int addString(byte[] array, int pos, String add, String charsetName) throws UnsupportedEncodingException { return addBytes(array, pos, add.getBytes(charsetName)); } // 写数据 public static void writeFile(String fileName, byte[] bytData) { try { FileOutputStream fos = new FileOutputStream(fileName); fos.write(bytData); fos.close(); } catch (Exception e) { e.printStackTrace(); } } public static boolean isEmptyStr(String str) { if (null == str || str.length() <= 0) return true; else return false; } public static String unicodeToHexStr(String str, boolean bDblSlash) { String strRet = ""; String strSlash = (bDblSlash ? "\\\\u" : "\\u"); for (int i = 0; i < str.length(); i++) { char ch = str.charAt(i); if (ch > 255) strRet += strSlash + Integer.toHexString(ch); else strRet += ch; } return strRet; } public static int HexStrToRGB(String str, int nDefColor) { try { if (isEmptyStr(str)) return nDefColor; if (str.length() >= 2 && str.substring(0, 2).equalsIgnoreCase("0x")) { str = str.substring(2); if (isEmptyStr(str)) return nDefColor; } return (int)Long.parseLong(str, 16); // Java大端字节序 } catch (Exception e) { e.printStackTrace(); } return nDefColor; } public static int HexStrToRGB(String str) { return HexStrToRGB(str, 0); } public static String RGBToHexStr(int color) { return Integer.toHexString(color); } public static int HexStrToARGB(String str, int nDefColor) { try { if (Utils.isEmptyStr(str)) return nDefColor; if (str.length() >= 2 && str.substring(0, 2).equalsIgnoreCase("0x")) { str = str.substring(2); if (Utils.isEmptyStr(str)) return nDefColor; } return (int)Long.parseLong(str, 16); } catch (Exception e) { e.printStackTrace(); } return nDefColor; } public static int HexStrToARGB(String str) { return HexStrToARGB(str); } public static String getBetweenString(String str, int nPos, String strStart, String strEnd) { if (isEmptyStr(str) || isEmptyStr(strStart) || isEmptyStr(strEnd)) return ""; int nStart = str.indexOf(strStart, nPos); if (nStart != -1) { nStart += strStart.length(); int nEnd = str.indexOf(strEnd, nStart); if (nEnd != -1) { return str.substring(nStart, nEnd); } } return ""; } public static int getBetweenInt(String str, int nPos, String strStart, String strEnd, int nDefValue) { String strText = getBetweenString(str, nPos, strStart, strEnd); if (!isEmptyStr(strText)) return (int)Long.parseLong(strText); else return nDefValue; } public static int getUByte(byte data) { return data & 0x0FF; } public static int getUShort(short data){ return data & 0x0FFFF; } public static long getUInt(int data) { return data & 0xFFFFFFFFL; } // 判断两个时间是否同一年 public static boolean isSameYear(Calendar c1, Calendar c2) { return c1.get(Calendar.YEAR) == c2.get(Calendar.YEAR); } // 判断两个时间是否同一天 public static boolean isSameDay(Calendar c1, Calendar c2) { return ((c1.get(Calendar.DAY_OF_MONTH) == c2.get(Calendar.DAY_OF_MONTH)) && (c1.get(Calendar.MONTH) == c2.get(Calendar.MONTH)) && (c1.get(Calendar.YEAR) == c2.get(Calendar.YEAR))); } // 判断时间是否是今年 public static boolean isThisYear(int nTime) { Calendar c1 = Calendar.getInstance(); c1.setTimeInMillis(getUInt(nTime)*1000); Calendar c2 = Calendar.getInstance(); return isSameYear(c1, c2); } // 判断时间是否是今天 public static boolean isToday(int nTime) { Calendar c1 = Calendar.getInstance(); c1.setTimeInMillis(getUInt(nTime)*1000); Calendar c2 = Calendar.getInstance(); return isSameDay(c1, c2); } // 判断时间是否是昨天 public static boolean isYesterday(int nTime) { Calendar c1 = Calendar.getInstance(); c1.setTimeInMillis(getUInt(nTime)*1000); Calendar c2 = Calendar.getInstance(); c2.add(Calendar.DATE, -1); return isSameDay(c1, c2); } // 格式化时间 public static String formatTime(int nTime) { if (0 == nTime) return ""; if (isToday(nTime)) { // 今天 Calendar time = Calendar.getInstance(); time.setTimeInMillis(getUInt(nTime)*1000); SimpleDateFormat dateFmt = new SimpleDateFormat("HH:mm", Locale.getDefault()); return dateFmt.format(time.getTime()); } else if (isYesterday(nTime)) { // 昨天 return "昨天"; } else { Calendar time = Calendar.getInstance(); time.setTimeInMillis(getUInt(nTime)*1000); SimpleDateFormat dateFmt = new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault()); return dateFmt.format(time.getTime()); } } public static boolean isShouldHideInput(View v, MotionEvent event) { if (v != null && (v instanceof EditText)) { int[] leftTop = { 0, 0 }; v.getLocationInWindow(leftTop); int left = leftTop[0], top = leftTop[1], bottom = top + v.getHeight(), right = left + v.getWidth(); if (event.getX() > left && event.getX() < right && event.getY() > top && event.getY() < bottom) { // 保留点击EditText的事件 return false; } else { return true; } } return false; } public static Boolean hideInputMethod(Context context, View v) { InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE); if (imm != null) { return imm.hideSoftInputFromWindow(v.getWindowToken(), 0); } return false; } public static SpannableString getSysFace(Context context, FaceInfo faceInfo, int cx, int cy) { if (null == context || null == faceInfo) return null; if (faceInfo.m_nId < 0 || 0 == faceInfo.m_nResId) return new SpannableString(faceInfo.m_strTip); String str = "/f[\""; str += faceInfo.m_nId; str += "\"]"; Drawable drawable = context.getResources().getDrawable(faceInfo.m_nResId); drawable.setBounds(0, 0, cx, cy); ImageSpan imgSpan = new ImageSpan(drawable, ImageSpan.ALIGN_BASELINE); SpannableString spanStr = new SpannableString(str); spanStr.setSpan(imgSpan, 0, str.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); return spanStr; } public static SpannableString getCustomFace(Context context, int nResId, String strFileName) { if (null == context || 0 == nResId || isEmptyStr(strFileName)) return null; String str = "/c[\""; str += strFileName; str += "\"]"; ImageSpan imgSpan = new ImageSpan(context, nResId, ImageSpan.ALIGN_BASELINE); SpannableString spanStr = new SpannableString(str); spanStr.setSpan(imgSpan, 0, str.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); return spanStr; } public static SpannableString getCustomFace(final Context context, Bitmap bmp, String strFileName, ClickableSpan clickSpan) { if (null == context || null == bmp || isEmptyStr(strFileName)) return null; String str = "/c[\""; str += strFileName; str += "\"]"; // int cx = bmp.getWidth(); // int cy = bmp.getHeight(); // // Drawable drawable = new BitmapDrawable(bmp); // drawable.setBounds(0, 0, cx, cy); // ImageSpan imgSpan = new ImageSpan(drawable, ImageSpan.ALIGN_BASELINE); ImageSpan imgSpan = new ImageSpan(context, bmp, ImageSpan.ALIGN_BASELINE); SpannableString spanStr = new SpannableString(str); spanStr.setSpan(imgSpan, 0, str.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); if (clickSpan != null) { // ClickableSpan[] click_spans = spanStr.getSpans(0, str.length(), ClickableSpan.class); // if (click_spans.length != 0) { // for(ClickableSpan c_span : click_spans) { // spanStr.removeSpan(c_span); // } // } spanStr.setSpan(clickSpan, 0, str.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); } return spanStr; } public static boolean ptInView(View view, int x, int y) { int[] location = new int[2]; view.getLocationInWindow(location); if (x > location[0] && x < location[0] + view.getWidth() && y > location[1] && y < location[1] + view.getHeight()) return true; else return false; } public static Bitmap getRoundedCornerBitmap(Bitmap bmp, float roundPx){ if (null == bmp || roundPx <= 0) return bmp; Bitmap output = Bitmap.createBitmap(bmp.getWidth(), bmp.getHeight(), Config.ARGB_8888); Canvas canvas = new Canvas(output); final int color = 0xff424242; final Paint paint = new Paint(); final Rect rect = new Rect(0, 0, bmp.getWidth(), bmp.getHeight()); final RectF rectF = new RectF(rect); paint.setAntiAlias(true); canvas.drawARGB(0, 0, 0, 0); paint.setColor(color); canvas.drawRoundRect(rectF, roundPx, roundPx, paint); paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN)); canvas.drawBitmap(bmp, rect, rect, paint); return output; } public static Bitmap zoomImg(Bitmap bmp, int cx ,int cy) { if (null == bmp || cx <= 0 || cy <= 0) return null; int nWidth = bmp.getWidth(); int nHeight = bmp.getHeight(); if (cx == nWidth && cy == nHeight) return bmp; float scaleWidth = ((float)cx) / nWidth; float scaleHeight = ((float)cy) / nHeight; Matrix matrix = new Matrix(); matrix.postScale(scaleWidth, scaleHeight); Bitmap newBmp = Bitmap.createBitmap(bmp, 0, 0, nWidth, nHeight, matrix, true); return newBmp; } public static Drawable bitmap2Drawable(Bitmap bitmap) { return new BitmapDrawable(bitmap); } public static Bitmap drawable2Bitmap(Drawable drawable) { if (drawable instanceof BitmapDrawable){ return ((BitmapDrawable)drawable).getBitmap(); } else if(drawable instanceof NinePatchDrawable) { Bitmap bitmap = Bitmap.createBitmap( drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888 : Bitmap.Config.RGB_565); Canvas canvas = new Canvas(bitmap); drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight()); drawable.draw(canvas); return bitmap; } else { return null; } } }