package com.example.musicplayer.util; import android.annotation.SuppressLint; import android.app.Activity; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Color; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.os.Build; import android.support.annotation.Nullable; import android.text.Html; import android.view.View; import android.view.inputmethod.InputMethodManager; import android.widget.EditText; import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; import com.bumptech.glide.Glide; import com.bumptech.glide.request.RequestOptions; import com.bumptech.glide.request.target.SimpleTarget; import com.bumptech.glide.request.target.Target; import com.bumptech.glide.request.transition.Transition; import com.example.musicplayer.R; import com.example.musicplayer.app.Api; import com.example.musicplayer.app.App; /** * Created by 残渊 on 2018/10/26. * 通用的工具类,包含多个实用方法,可在整个应用中使用 */ public class CommonUtil { // 存储 Toast 实例,避免重复创建 private static Toast toast; // 控制活动的状态栏显示或隐藏 public static void hideStatusBar(Activity activity, boolean isHide) { // 获取活动的根视图 View decorView = activity.getWindow().getDecorView(); if (isHide) { if (Build.VERSION.SDK_INT >= 22) { // 隐藏状态栏并使布局扩展到状态栏区域,状态栏透明 decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE); activity.getWindow().setStatusBarColor(Color.TRANSPARENT); } } else { // 显示状态栏并设置状态栏颜色 decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE); activity.getWindow().setStatusBarColor(App.getContext().getResources().getColor(R.color.actionBarColor)); } } // 显示 Toast 消息 @SuppressLint("ShowToast") public static void showToast(Context context, String message) { if (toast == null) { // 创建一个新的 Toast 实例 toast = Toast.makeText(context, message, Toast.LENGTH_SHORT); } else { // 更新 Toast 的消息内容 toast.setText(message); } // 显示 Toast toast.show(); } // 获取屏幕的宽度 public static int getScreenWidth(Context context) { if (null == context) { return 0; } // 获取屏幕的宽度像素值 return context.getResources().getDisplayMetrics().widthPixels; } // 获取屏幕的高度 public static int getScreenHeight(Context context) { if (null == context) { return 0; } // 获取屏幕的高度像素值 return context.getResources().getDisplayMetrics().heightPixels; } // 使 EditText 获取焦点并显示软键盘 public static void showKeyboard(EditText editText, Context context) { if (editText!= null) { // 使 EditText 可获得焦点 editText.setFocusable(true); editText.setFocusableInTouchMode(true); // 请求获得焦点 editText.requestFocus(); // 获取输入法管理器 InputMethodManager inputManager = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE); // 显示软键盘 inputManager.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS); } } // 关闭软键盘 public static void closeKeybord(EditText mEditText, Context context) { // 清除 EditText 的焦点 mEditText.clearFocus(); // 获取输入法管理器 InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE); // 隐藏软键盘 imm.hideSoftInputFromWindow(mEditText.getWindowToken(), 0); } // 使指定字符串在 TextView 中显示不同颜色 public static void showStringColor(String appointStr, String originalStr, TextView textView) { // 将原始字符串中的指定字符串替换为带有颜色标记的 HTML 字符串 originalStr = originalStr.replaceAll(appointStr, "" + appointStr + ""); // 使用 Html.fromHtml 将 HTML 字符串转换为 Spanned 并设置到 TextView 中 textView.setText(Html.fromHtml(originalStr)); } // 获取状态栏的高度 public static int getStatusHeightPx(Activity act) { int height = 0; // 获取状态栏高度资源的标识符 int resourceId = act.getResources().getIdentifier("status_bar_height", "dimen", "android"); if (resourceId > 0) { // 获取状态栏的高度像素值 height = act.getResources().getDimensionPixelSize(resourceId); } return height; } // 生成前景模糊的 Drawable public static Drawable getForegroundDrawable(Bitmap bitmap) { // 计算屏幕宽高比 final float widthHeightSize = (float) (DisplayUtil.getScreenWidth(App.getContext()) * 1.0 / DisplayUtil.getScreenHeight(App.getContext()) * 1.0); // 计算裁剪图片的宽度 int cropBitmapWidth = (int) (widthHeightSize * bitmap.getHeight()); int cropBitmapWidthX = (int) ((bitmap.getWidth() - cropBitmapWidth) / 2.0); // 裁剪部分图片 Bitmap cropBitmap = Bitmap.createBitmap(bitmap, cropBitmapWidthX, 0, cropBitmapWidth, bitmap.getHeight()); // 缩小图片 Bitmap scaleBitmap = Bitmap.createScaledBitmap(cropBitmap, bitmap.getWidth() / 50, bitmap .getHeight() / 50, false); // 对缩小后的图片进行模糊处理 final Bitmap blurBitmap = FastBlurUtil.doBlur(scaleBitmap, 3, true); // 创建模糊后的 Drawable final Drawable foregroundDrawable = new BitmapDrawable(blurBitmap); // 可添加灰色遮罩层(未实现) return foregroundDrawable; } // 使用 Glide 加载图片并获取其 Bitmap public static Bitmap getImgBitmap(Context context, String imgUrl) { SimpleTarget target = new SimpleTarget(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL) { @Override public void onResourceReady(@Nullable Drawable resource, Transition transition) { // 当资源加载完成时,将 Drawable 转换为 Bitmap Bitmap bitmap = ((BitmapDrawable) resource).getBitmap(); } }; // 使用 Glide 加载图片,设置占位符和错误图片 Glide.with(context) .load(imgUrl) .apply(RequestOptions.placeholderOf(R.drawable.welcome)) .apply(RequestOptions.errorOf(R.drawable.welcome)) .into(target); // 此方法始终返回 null,可能需要修改 return null; } // 使用 Glide 加载图片到 ImageView public static void setImgWithGlide(Context context, String imgUrl, ImageView view) { // 使用 Glide 加载图片,设置占位符和错误图片 Glide.with(context) .load(imgUrl) .apply(RequestOptions.placeholderOf(R.drawable.welcome)) .apply(RequestOptions.errorOf(R.drawable.love)) .into(view); } // 根据歌手信息加载歌手图片到 ImageView public static void setSingerImg(Context context, String singer, ImageView view) { if (singer.contains("/")) { // 处理歌手名字中包含斜杠的情况 String[] s = singer.split("/"); singer = s[0]; } singer = singer.trim(); // 构建歌手图片的 URL String imgUrl = Api.STORAGE_IMG_FILE + singer + ".jpg"; // 使用 Glide 加载图片,设置占位符和错误图片 Glide.with(context) .load(imgUrl) .apply(RequestOptions.placeholderOf(R.drawable.welcome)) .apply(RequestOptions.errorOf(R.drawable.welcome)) .into(view); } }