程序员人生 网站导航

小功能整理

栏目:综合技术时间:2016-07-11 15:25:43

1.intent相干

发送短信

Intent intent=new Intent(); intent.setAction(Intent.ACTION_SEND); intent.setType("text/plain"); intent.putExtra(Intent.EXTRA_TEXT,"I am a boy"); startActivity(intent);

打开相册

Intent intent=new Intent(); intent.setAction(Intent.ACTION_GET_CONTENT); intent.setType("image/*"); startActivity(intent);

打开阅读器

Intent intent=new Intent(); intent.setAction(Intent.ACTION_VIEW); Uri uri=Uri.parse("www.baidu.com"); intent.setData(uri); startActivity(intent);

打电话

//进入拨号页面(不需要CALL_PHONE权限) Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse("tel:" + 10086)); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); //用intent启动拨打电话,直接拨打(需要CALL_PHONE权限) Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:" + 10086)); startActivity(intent);

安装apk

// 新的APK的文件名 String str = "newUpdate.apk"; // 新APK在存储卡上的位置 String fileName = Environment.getExternalStorageDirectory() + str; // 通过启动1个Intent让系统来帮你安装新的APK Intent intent = new Intent(Intent.ACTION_VIEW); intent.setDataAndType(Uri.fromFile(new File(fileName)), "application/vnd.android.package-archive"); startActivity(intent);

打开系统日历

public static void calendar(Context context) { try { Intent i = new Intent(); ComponentName cn = null; if (Integer.parseInt(Build.VERSION.SDK) >= 8) { cn = new ComponentName("com.android.calendar", "com.android.calendar.LaunchActivity"); } else { cn = new ComponentName("com.google.android.calendar", "com.android.calendar.LaunchActivity"); } i.setComponent(cn); context.startActivity(i); } catch (ActivityNotFoundException e) { // TODO: handle exception Logg.e("ActivityNotFoundException", e.toString()); } }

显示利用选择器

Intent cIntent = new Intent(Intent.ACTION_VIEW); Intent chooser = Intent.createChooser(cIntent, "选择打开方式"); startActivity(chooser);

确认是不是存在接收意向的利用

Intent mIntent = new Intent(); ComponentName mComp = new ComponentName("com.juxin.jfcc", "com.juxin.jfcc.activity.login.RegisterActivity");//注意AcitivityName(目标利用程序)要完全的,带包名的PackageName的 mIntent.setComponent(mComp); PackageManager packageManager = getPackageManager(); List activities = packageManager.queryIntentActivities(mIntent, PackageManager.MATCH_DEFAULT_ONLY); boolean isIntentSafe = activities.size() > 0; showBigToast(activities.size() + "==");

打开其他利用的activity

// android:exported="true"所要调剂的activity必须有这个属性 try { Intent mIntent = new Intent(); ComponentName mComp = new ComponentName("com.juxin.jfcc", "com.juxin.jfcc.activity.login.RegisterActivity");//注意AcitivityName(目标利用程序)要完全的,带包名的PackageName的 mIntent.setComponent(mComp); startActivity(mIntent); } catch (Exception e) { showBigToast("未找到可用利用程序!"); }

意图过滤

mimeType : 种别
提供另外1种表征处理意向的Activity的方法,通常与用户手势或Activity开始的位置有关。 系统支持多种不同的种别,但大多数都很少使用。 但是,所有隐含义向默许使用 CATEGORY_DEFAULT 进行定义。
用 元素在乎向过滤器中指定此内容。
android:mimeType 属性声明您的Activity处理的数据类型,比如 text/plain 或 image/jpeg。

<activity android:name="ShareActivity"> <intent-filter> <action android:name="android.intent.action.SEND"/> <category android:name="android.intent.category.DEFAULT"/> <data android:mimeType="text/plain"/> <data android:mimeType="image/*"/> intent-filter> activity>

2.跟View相干

将布局文件保存成图片文件

/** * 将布局文件保存成图片文件 */ public static void saveLayout2File(View view, final SaveFileListener saveFileListener) { handler = new Handler(Looper.getMainLooper()); final Bitmap bmp = Bitmap.createBitmap(view.getWidth(), view.getHeight(), Bitmap.Config.ARGB_8888); view.draw(new Canvas(bmp)); File dir = new File(imagePath); if (!dir.exists()) { dir.mkdirs(); } final String photoUrl = imagePath + System.currentTimeMillis() + ".png";//换成自己的图片保存路径 final File file = new File(photoUrl); new Thread() { @Override public void run() { try { final boolean bitMapOk = bmp.compress(Bitmap.CompressFormat.PNG, 100, new FileOutputStream(file)); handler.post(new Runnable() { @Override public void run() { if (saveFileListener != null) { saveFileListener.onSaveFile(bitMapOk, photoUrl); } } }); } catch (FileNotFoundException e) { e.printStackTrace(); } } }.start(); }

3.SD卡相干

SD卡是不是存在

/** * @return SD卡是不是存在 */ public static boolean existSDCard() { return (android.os.Environment.getExternalStorageState().equals( android.os.Environment.MEDIA_MOUNTED)); }

SD卡容量信息

/** * 单位类型 */ public interface Unit { int BYTE = 0, KBYTE = 1, MBYTE = 2; } /** * @param unit 单位类型:0:Byte,1:KB,other:MB * @return SD卡剩余空间 */ public static long getSDFreeSize(int unit) { //获得SD卡文件路径 File path = Environment.getExternalStorageDirectory(); StatFs sf = new StatFs(path.getPath()); //获得单个数据块的大小(Byte) long blockSize = sf.getBlockSize(); //空闲的数据块的数量 long freeBlocks = sf.getAvailableBlocks(); //返回SD卡空闲大小 if (unit == 0) { return freeBlocks * blockSize; //单位Byte } else if (unit == 1) { return (freeBlocks * blockSize) / 1024; //单位KB } else { return (freeBlocks * blockSize) / 1024 / 1024; //单位MB } } /** * @return SD卡总容量 */ public static long getSDAllSize() { //获得SD卡文件路径 File path = Environment.getExternalStorageDirectory(); StatFs sf = new StatFs(path.getPath()); //获得单个数据块的大小(Byte) long blockSize = sf.getBlockSize(); //获得所有数据块数 long allBlocks = sf.getBlockCount(); //返回SD卡大小 //return allBlocks * blockSize; //单位Byte //return (allBlocks * blockSize)/1024; //单位KB return (allBlocks * blockSize) / 1024 / 1024; //单位MB }

4.Bitmap相干

图象的放大缩小方法

/** * 图象的放大缩小方法 * * @param src 源位图对象 * @param scaleX 宽度比例系数 * @param scaleY 高度比例系数 * @return 返回位图对象 */ public static Bitmap zoomBitmap(Bitmap src, float scaleX, float scaleY) { Matrix matrix = new Matrix(); matrix.setScale(scaleX, scaleY); return Bitmap.createBitmap(src, 0, 0, src.getWidth(), src.getHeight(), matrix, true); }

图象放大缩小--根据宽度和高度

/** * 图象放大缩小--根据宽度和高度 * * @param src * @param width * @param height * @return */ public static Bitmap zoomBimtap(Bitmap src, int width, int height) { return Bitmap.createScaledBitmap(src, width, height, true); }

Bitmap转byte[]

/** * Bitmap转byte[] * * @param bitmap * @return */ public static byte[] bitmapToByte(Bitmap bitmap) { ByteArrayOutputStream out = new ByteArrayOutputStream(); bitmap.compress(Bitmap.CompressFormat.PNG, 100, out); return out.toByteArray(); }

byte[]转Bitmap

/** * byte[]转Bitmap * * @param data * @return */ public static Bitmap byteToBitmap(byte[] data) { if (data.length != 0) { return BitmapFactory.decodeByteArray(data, 0, data.length); } return null; }

绘制带圆角的图象

/** * 绘制带圆角的图象 * * @param src * @param radius * @return */ public static Bitmap createRoundedCornerBitmap(Bitmap src, int radius) { final int w = src.getWidth(); final int h = src.getHeight(); // 高清量32位图 Bitmap bitmap = Bitmap.createBitmap(w, h, Config.ARGB_8888); Paint paint = new Paint(); Canvas canvas = new Canvas(bitmap); canvas.drawARGB(0, 0, 0, 0); paint.setColor(0xff424242); // 避免边沿的锯齿 paint.setFilterBitmap(true); Rect rect = new Rect(0, 0, w, h); RectF rectf = new RectF(rect); // 绘制带圆角的矩形 canvas.drawRoundRect(rectf, radius, radius, paint); // 取两层绘制交集,显示上层 paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); // 绘制图象 canvas.drawBitmap(src, rect, rect, paint); return bitmap; }

创建选中带提示图片

/** * 创建选中带提示图片 * * @param context * @param srcId * @param tipId * @return */ public static Drawable createSelectedTip(Context context, int srcId, int tipId) { Bitmap src = BitmapFactory.decodeResource(context.getResources(), srcId); Bitmap tip = BitmapFactory.decodeResource(context.getResources(), tipId); final int w = src.getWidth(); final int h = src.getHeight(); Bitmap bitmap = Bitmap.createBitmap(w, h, Config.ARGB_8888); Paint paint = new Paint(); Canvas canvas = new Canvas(bitmap); //绘制原图 canvas.drawBitmap(src, 0, 0, paint); //绘制提示图片 canvas.drawBitmap(tip, (w - tip.getWidth()), 0, paint); return bitmapToDrawable(bitmap); }

带倒影的图象

/** * 带倒影的图象 * * @param src * @return */ public static Bitmap createReflectionBitmap(Bitmap src) { // 两个图象间的空隙 final int spacing = 4; final int w = src.getWidth(); final int h = src.getHeight(); // 绘制高质量32位图 Bitmap bitmap = Bitmap.createBitmap(w, h + h / 2 + spacing, Config.ARGB_8888); // 创建燕X轴的倒影图象 Matrix m = new Matrix(); m.setScale(1, -1); Bitmap t_bitmap = Bitmap.createBitmap(src, 0, h / 2, w, h / 2, m, true); Canvas canvas = new Canvas(bitmap); Paint paint = new Paint(); // 绘制原图象 canvas.drawBitmap(src, 0, 0, paint); // 绘制倒影图象 canvas.drawBitmap(t_bitmap, 0, h + spacing, paint); // 线性渲染-沿Y轴高到低渲染 Shader shader = new LinearGradient(0, h + spacing, 0, h + spacing + h / 2, 0x70ffffff, 0x00ffffff, Shader.TileMode.MIRROR); paint.setShader(shader); // 取两层绘制交集,显示下层。 paint.setXfermode(new PorterDuffXfermode(Mode.DST_IN)); // 绘制渲染倒影的矩形 canvas.drawRect(0, h + spacing, w, h + h / 2 + spacing, paint); return bitmap; }

独立的倒影图象

/** * 独立的倒影图象 * * @param src * @return */ public static Bitmap createReflectionBitmapForSingle(Bitmap src) { final int w = src.getWidth(); final int h = src.getHeight(); // 绘制高质量32位图 Bitmap bitmap = Bitmap.createBitmap(w, h / 2, Config.ARGB_8888); // 创建沿X轴的倒影图象 Matrix m = new Matrix(); m.setScale(1, -1); Bitmap t_bitmap = Bitmap.createBitmap(src, 0, h / 2, w, h / 2, m, true); Canvas canvas = new Canvas(bitmap); Paint paint = new Paint(); // 绘制倒影图象 canvas.drawBitmap(t_bitmap, 0, 0, paint); // 线性渲染-沿Y轴高到低渲染 Shader shader = new LinearGradient(0, 0, 0, h / 2, 0x70ffffff, 0x00ffffff, Shader.TileMode.MIRROR); paint.setShader(shader); // 取两层绘制交集。显示下层。 paint.setXfermode(new PorterDuffXfermode(Mode.DST_IN)); // 绘制渲染倒影的矩形 canvas.drawRect(0, 0, w, h / 2, paint); return bitmap; }

灰色图象

/** *灰色图象 */ public static Bitmap createGreyBitmap(Bitmap src) { final int w = src.getWidth(); final int h = src.getHeight(); Bitmap bitmap = Bitmap.createBitmap(w, h, Config.ARGB_8888); Canvas canvas = new Canvas(bitmap); Paint paint = new Paint(); // 色彩变换的矩阵 ColorMatrix matrix = new ColorMatrix(); // saturation 饱和度值,最小可设为0,此时对应的是灰度图;为1表示饱和度不变,设置大于1,就显示过饱和 matrix.setSaturation(0); ColorMatrixColorFilter filter = new ColorMatrixColorFilter(matrix); paint.setColorFilter(filter); canvas.drawBitmap(src, 0, 0, paint); return bitmap; }

保存图片

/** * 保存图片 * * @param src * @param filepath * @param format:[Bitmap.CompressFormat.PNG,Bitmap.CompressFormat.JPEG] * @return */ public static boolean saveImage(Bitmap src, String filepath, CompressFormat format) { boolean rs = false; File file = new File(filepath); try { FileOutputStream out = new FileOutputStream(file); if (src.compress(format, 100, out)) { out.flush(); //写入流 } out.close(); rs = true; } catch (Exception e) { e.printStackTrace(); } return rs; }

添加水印效果

/** * 添加水印效果 * * @param src 源位图 * @param watermark 水印 * @param direction 方向 * @param spacing 间距 * @return */ public static Bitmap createWatermark(Bitmap src, Bitmap watermark, int direction, int spacing) { final int w = src.getWidth(); final int h = src.getHeight(); Bitmap bitmap = Bitmap.createBitmap(w, h, Config.ARGB_8888); Canvas canvas = new Canvas(bitmap); canvas.drawBitmap(src, 0, 0, null); if (direction == LEFT_TOP) { canvas.drawBitmap(watermark, spacing, spacing, null); } else if (direction == LEFT_BOTTOM) { canvas.drawBitmap(watermark, spacing, h - watermark.getHeight() - spacing, null); } else if (direction == RIGHT_TOP) { canvas.drawBitmap(watermark, w - watermark.getWidth() - spacing, spacing, null); } else if (direction == RIGHT_BOTTOM) { canvas.drawBitmap(watermark, w - watermark.getWidth() - spacing, h - watermark.getHeight() - spacing, null); } return bitmap; }

合成图象

/** * 合成图象 * * @param direction * @param bitmaps * @return */ public static Bitmap composeBitmap(int direction, Bitmap... bitmaps) { if (bitmaps.length < 2) { return null; } Bitmap firstBitmap = bitmaps[0]; for (Bitmap bitmap : bitmaps) { firstBitmap = composeBitmap(firstBitmap, bitmap, direction); } return firstBitmap; } /** * 合成两张图象 * * @param firstBitmap * @param secondBitmap * @param direction * @return */ private static Bitmap composeBitmap(Bitmap firstBitmap, Bitmap secondBitmap, int direction) { if (firstBitmap == null) { return null; } if (secondBitmap == null) { return firstBitmap; } final int fw = firstBitmap.getWidth(); final int fh = firstBitmap.getHeight(); final int sw = secondBitmap.getWidth(); final int sh = secondBitmap.getHeight(); Bitmap bitmap = null; Canvas canvas = null; if (direction == TOP) { bitmap = Bitmap.createBitmap(sw > fw ? sw : fw, fh + sh, Config.ARGB_8888); canvas = new Canvas(bitmap); canvas.drawBitmap(secondBitmap, 0, 0, null); canvas.drawBitmap(firstBitmap, 0, sh, null); } else if (direction == BOTTOM) { bitmap = Bitmap.createBitmap(fw > sw ? fw : sw, fh + sh, Config.ARGB_8888); canvas = new Canvas(bitmap); canvas.drawBitmap(firstBitmap, 0, 0, null); canvas.drawBitmap(secondBitmap, 0, fh, null); } else if (direction == LEFT) { bitmap = Bitmap.createBitmap(fw + sw, sh > fh ? sh : fh, Config.ARGB_8888); canvas = new Canvas(bitmap); canvas.drawBitmap(secondBitmap, 0, 0, null); canvas.drawBitmap(firstBitmap, sw, 0, null); } else if (direction == RIGHT) { bitmap = Bitmap.createBitmap(fw + sw, fh > sh ? fh : sh, Config.ARGB_8888); canvas = new Canvas(bitmap); canvas.drawBitmap(firstBitmap, 0, 0, null); canvas.drawBitmap(secondBitmap, fw, 0, null); } return bitmap; }

简单的截图(View获得bitmap,保存文件)

/** * 简单的截图(View获得bitmap,保存文件) * * @param view 需要转成图片的View * @param filePath 存储路径 * @return 返复生成的bitmap */ public static Bitmap screenShot(View view, String filePath) { long start = System.currentTimeMillis(); // 获得屏幕 view.setDrawingCacheEnabled(true);//开启cache view.buildDrawingCache(); Bitmap bmp = view.getDrawingCache(); Logg.i("===========bmp============" + bmp); if (bmp != null) { try { // 图片文件路径 filePath = TextUtils.isEmpty(filePath) ? FilePath.imagePath + File.separator + System.currentTimeMillis() + "screenshot.png" : filePath; File fileF = new File(FilePath.imagePath); if (!fileF.exists()) { fileF.mkdirs(); } File file = new File(filePath); FileOutputStream os = new FileOutputStream(file); bmp.compress(Bitmap.CompressFormat.PNG, 100, os); os.flush(); os.close(); } catch (Exception e) { } } long end = System.currentTimeMillis(); Logg.i("===========截图需要的时间============" + (end - start)); return bmp; }

5.工具类

调用文件选择软件来选择文件

/** * 调用文件选择软件来选择文件 **/ public static void showFileChooser(Activity activity, int requestCode, String name) { Intent intent = new Intent(Intent.ACTION_GET_CONTENT); intent.setType(name + "/*"); intent.addCategory(Intent.CATEGORY_OPENABLE); try { activity.startActivityForResult(Intent.createChooser(intent, "请选择1个要上传的文件"), requestCode); } catch (android.content.ActivityNotFoundException ex) { // Potentially direct the user to the Market with a Dialog Toast.makeText(activity, "请安装文件管理器", Toast.LENGTH_SHORT) .show(); } } /** * 调用文件选择软件来选择文件 **/ public static void showForderChooser(Activity activity, int requestCode) { Intent intent = new Intent(Intent.ACTION_GET_CONTENT); intent.setType("forder/*"); intent.addCategory(Intent.CATEGORY_OPENABLE); try { activity.startActivityForResult(Intent.createChooser(intent, "请选择1个要上传的文件"), requestCode); } catch (android.content.ActivityNotFoundException ex) { // Potentially direct the user to the Market with a Dialog Toast.makeText(activity, "请安装文件管理器", Toast.LENGTH_SHORT) .show(); } }

MD5处理字符串

/** * MD5处理字符串 */ public class MD5 { public static String md5(String string) { byte[] hash; try { hash = MessageDigest.getInstance("MD5").digest(string.getBytes("UTF⑻")); } catch (NoSuchAlgorithmException e) { throw new RuntimeException("Huh, MD5 should be supported?", e); } catch (UnsupportedEncodingException e) { throw new RuntimeException("Huh, UTF⑻ should be supported?", e); } StringBuilder hex = new StringBuilder(hash.length * 2); for (byte b : hash) { if ((b & 0xFF) < 0x10) hex.append("0"); hex.append(Integer.toHexString(b & 0xFF)); } return hex.toString(); } }

检查网络是不是开启

/** * 检查网络是不是开启 */ public static boolean isNetworkAvailable(Context context) { // 取得网络系统连接服务 ConnectivityManager manager = (ConnectivityManager) context .getSystemService(Context.CONNECTIVITY_SERVICE); if (manager == null) { return false; } NetworkInfo networkinfo = manager.getActiveNetworkInfo(); return !(networkinfo == null || !networkinfo.isAvailable()); }

2维码生成工具类

/** * 2维码生成工具类 */ public class QRCodeUtil { private static Handler handler; /** * 生成2维码Bitmap * * @param content 内容 * @param widthPix 图片宽度 * @param heightPix 图片高度 * @param logoBm 2维码中心的Logo图标(可以为null) * @param filePath 用于存储2维码图片的文件路径 * @return 生成2维码及保存文件是不是成功 */ public static boolean createQRImage(String content, int widthPix, int heightPix, Bitmap logoBm, String filePath) { try { if (content == null || "".equals(content)) { return false; } //配置参数 Map hints = new HashMap<>(); hints.put(EncodeHintType.CHARACTER_SET, "utf⑻"); //容错级别 hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H); //设置空白边距的宽度 hints.put(EncodeHintType.MARGIN, 1); //default is 4 // 图象数据转换,使用了矩阵转换 BitMatrix bitMatrix = new QRCodeWriter().encode(content, BarcodeFormat.QR_CODE, widthPix, heightPix, hints); int[] pixels = new int[widthPix * heightPix]; // 下面这里依照2维码的算法,逐一生成2维码的图片, // 两个for循环是图片横列扫描的结果 for (int y = 0; y < heightPix; y++) { for (int x = 0; x < widthPix; x++) { if (bitMatrix.get(x, y)) { pixels[y * widthPix + x] = 0xff000000; } else { pixels[y * widthPix + x] = 0xffffffff; } } } // 生成2维码图片的格式,使用ARGB_8888 Bitmap bitmap = Bitmap.createBitmap(widthPix, heightPix, Bitmap.Config.ARGB_8888); bitmap.setPixels(pixels, 0, widthPix, 0, 0, widthPix, heightPix); if (logoBm != null) { bitmap = addLogo(bitmap, logoBm); } //必须使用compress方法将bitmap保存到文件中再进行读取。直接返回的bitmap是没有任何紧缩的,内存消耗巨大! return bitmap != null && bitmap.compress(Bitmap.CompressFormat.JPEG, 100, new FileOutputStream(filePath)); } catch (WriterException | IOException e) { e.printStackTrace(); } return false; } /** * 在2维码中间添加Logo图案 */ private static Bitmap addLogo(Bitmap src, Bitmap logo) { if (src == null) { return null; } if (logo == null) { return src; } //获得图片的宽高 int srcWidth = src.getWidth(); int srcHeight = src.getHeight(); int logoWidth = logo.getWidth(); int logoHeight = logo.getHeight(); if (srcWidth == 0 || srcHeight == 0) { return null; } if (logoWidth == 0 || logoHeight == 0) { return src; } //logo大小为2维码整体大小的1/7 float scaleFactor = srcWidth * 1.0f / 7 / logoWidth; Bitmap bitmap = Bitmap.createBitmap(srcWidth, srcHeight, Bitmap.Config.ARGB_8888); try { Canvas canvas = new Canvas(bitmap); canvas.drawBitmap(src, 0, 0, null); canvas.scale(scaleFactor, scaleFactor, srcWidth / 2, srcHeight / 2); canvas.drawBitmap(logo, (srcWidth - logoWidth) / 2, (srcHeight - logoHeight) / 2, null); canvas.save(Canvas.ALL_SAVE_FLAG); canvas.restore(); } catch (Exception e) { bitmap = null; e.getStackTrace(); } return bitmap; } public interface QRCodeListener { void onQRCode(boolean isSuccess, Bitmap qrBitmap, String filePath); } private static boolean success = false; public static void createQRcode(Context context, String filePath, final String text, final Bitmap logoBm, final QRCodeListener qrCodeListener) { handler = new Handler(Looper.getMainLooper()); if (TextUtils.isEmpty(filePath)) { filePath = FilePath.imagePath + "qr_" + MyApplication.userId + ".jpg"; } final String path = filePath; //2维码图片较大时,生成图片、保存文件的时间可能较长,因此放在新线程中 new Thread(new Runnable() { @Override public void run() { success = QRCodeUtil.createQRImage(text, 800, 800, logoBm, path); handler.post(new Runnable() { @Override public void run() { if (qrCodeListener != null) { qrCodeListener.onQRCode(success, BitmapFactory.decodeFile(path), path); } } }); } }).start(); } public static void createQRcode(Context context, String filePath, String text, int logoResId, QRCodeListener qrCodeListener) { File file = new File(filePath); if (file.exists()) { if (qrCodeListener != null) { qrCodeListener.onQRCode(true, BitmapFactory.decodeFile(filePath), filePath); } } else { createQRcode(context, filePath, text, BitmapFactory.decodeResource(context.getResources(), logoResId), qrCodeListener); } } }
/** * dip转换px */ public static int dip2px(Context context, int dip) { final float scale = context.getResources().getDisplayMetrics().density; return (int) (dip * scale + 0.5f); } /** * px转换dip */ public static int px2dip(Context context,int px) { final float scale = context.getResources().getDisplayMetrics().density; return (int) (px / scale + 0.5f); } /** * 从主线程looper里面移除runnable */ public static void removeCallbacks(Runnable runnable) { getHandler().removeCallbacks(runnable); }

获得状态栏高度

/** * 获得状态栏高度 */ public static int getStatusBarHeight(Context context) { int result = 0; int resourceId = context.getResources().getIdentifier("status_bar_height", "dimen", "android"); if (resourceId > 0) { result = context.getResources().getDimensionPixelSize(resourceId); } return result; }

通知父容器,占用的宽,高;

/** * 通知父容器,占用的宽,高; * * @param child */ public static void measureView(View child) { ViewGroup.LayoutParams p = child.getLayoutParams(); if (p == null) { p = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); } int childWidthSpec = ViewGroup.getChildMeasureSpec(0, 0, p.width); int lpHeight = p.height; int childHeightSpec; if (lpHeight > 0) { childHeightSpec = View.MeasureSpec.makeMeasureSpec(lpHeight, View.MeasureSpec.EXACTLY); } else { childHeightSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED); } child.measure(childWidthSpec, childHeightSpec); }

取图片上的色彩

private void getBitmapColor() { Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.background_menu_head); //取图片上的色彩 Palette.generateAsync(bitmap, new Palette.PaletteAsyncListener() { @Override public void onGenerated(Palette palette) { Palette.Swatch swatch = palette.getVibrantSwatch(); //充满活力的色板 if (swatch != null) { int rgb = swatch.getRgb(); int titleTextColor = swatch.getTitleTextColor(); int bodyTextColor = swatch.getBodyTextColor(); //HSL色采模式 // hsl[0] is Hue [0 .. 360)色相 //hsl[1] is Saturation [0...1]饱和度 //hsl[2] is Lightness [0...1]明度 float[] hsl = swatch.getHsl(); colorBurn(rgb); colorBurn(titleTextColor); colorBurn(bodyTextColor); Logg.d(hsl[0] + "==" + hsl[1] + "==" + hsl[2]); } } }); } private int colorBurn(int RGBValues) { </
------分隔线----------------------------
------分隔线----------------------------

最新技术推荐