20251204_025812_384
This commit is contained in:
@@ -1,8 +1,8 @@
|
||||
#Created by .winboll/winboll_app_build.gradle
|
||||
#Wed Dec 03 16:25:43 GMT 2025
|
||||
#Wed Dec 03 18:54:44 GMT 2025
|
||||
stageCount=13
|
||||
libraryProject=
|
||||
baseVersion=15.11
|
||||
publishVersion=15.11.12
|
||||
buildCount=158
|
||||
buildCount=178
|
||||
baseBetaVersion=15.11.13
|
||||
|
||||
@@ -780,6 +780,7 @@ public class BackgroundSettingsActivity extends WinBoLLActivity implements Backg
|
||||
* 处理裁剪回调(调用工具类获取裁剪文件)
|
||||
*/
|
||||
private void handleCropImageResult(int requestCode, int resultCode, Intent data) {
|
||||
LogUtils.d(TAG, "handleCropImageResult");
|
||||
// 从工具类获取裁剪临时文件(唯一入口)
|
||||
File cropTempFile = new File(mBgSourceUtils.getPreviewBackgroundBean().getBackgroundScaledCompressFilePath());
|
||||
boolean isFileExist = cropTempFile.exists();
|
||||
@@ -788,10 +789,13 @@ public class BackgroundSettingsActivity extends WinBoLLActivity implements Backg
|
||||
// 适配MIUI:仅resultCode=RESULT_OK且文件有效时视为成功
|
||||
boolean isCropSuccess = (resultCode == RESULT_OK) && isFileExist && isFileReadable && fileSize > 100;
|
||||
if (isCropSuccess) {
|
||||
LogUtils.d(TAG, "isCropSuccess == true");
|
||||
BackgroundBean previewBean = mBgSourceUtils.getPreviewBackgroundBean();
|
||||
previewBean.setIsUseBackgroundScaledCompressFile(isCropSuccess);
|
||||
previewBean.setIsUseBackgroundFile(true);
|
||||
previewBean.setIsUseBackgroundScaledCompressFile(true);
|
||||
mBgSourceUtils.saveSettings();
|
||||
doubleRefreshPreview();
|
||||
mBackgroundView.loadBackground(previewBean);
|
||||
LogUtils.d(TAG, "isCropSuccess == true && mBackgroundView.loadBackground");
|
||||
} else {
|
||||
// 其他失败场景
|
||||
handleOperationCancelOrFail();
|
||||
|
||||
@@ -34,8 +34,6 @@ public class BackgroundView extends RelativeLayout {
|
||||
private RelativeLayout mrlMain;
|
||||
// 背景图片显示控件(核心子View)
|
||||
private ImageView mivBackground;
|
||||
// 背景资源工具类(单例实例,避免重复创建)
|
||||
private BackgroundSourceUtils mBackgroundSourceUtils;
|
||||
|
||||
// 图片原始宽高比(控制图片不拉伸的核心参数,宽/高)
|
||||
private float mnImageAspectRatio = 1.0f;
|
||||
@@ -99,24 +97,16 @@ public class BackgroundView extends RelativeLayout {
|
||||
private void initView() {
|
||||
LogUtils.d(TAG, "=== initView(视图初始化)启动 ===");
|
||||
|
||||
//mllMain = inflate(mContext, R.layout.view_background, null);
|
||||
// mllMain.setBackgroundColor(0x00000000); // 全透明背景(ARGB:透明通道+黑色,无视觉影响)
|
||||
// mllMain.setBackground(new ColorDrawable(0x00000000)); // 双重保障:兼容Android低版本,确保背景透明
|
||||
//
|
||||
// 1. 配置当前控件:完全填充父视图 + 全透明背景 + 无内边距
|
||||
// setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
|
||||
// setPadding(0, 0, 0, 0); // 取消自身内边距,避免父容器与控件间出现缝隙
|
||||
// setBackgroundColor(0x00000000); // 全透明背景(ARGB:透明通道+黑色,无视觉影响)
|
||||
// setBackground(new ColorDrawable(0x00000000)); // 双重保障:兼容Android低版本,确保背景透明
|
||||
//
|
||||
// // 2. 初始化背景资源工具类(单例模式,全局唯一实例)
|
||||
// mBackgroundSourceUtils = BackgroundSourceUtils.getInstance(mContext);
|
||||
//
|
||||
// 3. 初始化内部ImageView(背景图片显示核心控件)
|
||||
initBackgroundImageView();
|
||||
// 1. 配置当前控件:完全填充父视图 + 全透明背景 + 无内边距
|
||||
setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
|
||||
setPadding(0, 0, 0, 0); // 取消自身内边距,避免父容器与控件间出现缝隙
|
||||
setBackgroundColor(0x00000000); // 全透明背景(ARGB:透明通道+黑色,无视觉影响)
|
||||
setBackground(new ColorDrawable(0x00000000)); // 双重保障:兼容Android低版本,确保背景透明
|
||||
|
||||
initBackgroundImageView();
|
||||
|
||||
// 4. 初始加载:默认加载正式模式背景
|
||||
setDefaultBackground();
|
||||
setDefaultTransparentBackground();
|
||||
LogUtils.d(TAG, "=== initView(视图初始化)完成 ===");
|
||||
}
|
||||
|
||||
@@ -129,22 +119,7 @@ public class BackgroundView extends RelativeLayout {
|
||||
mrlMain = (RelativeLayout)inflate(mContext, R.layout.view_background, null);
|
||||
mrlMain.setBackgroundColor(0x00000000); // 全透明背景(ARGB:透明通道+黑色,无视觉影响)
|
||||
mrlMain.setBackground(new ColorDrawable(0x00000000)); // 双重保障:兼容Android低版本,确保背景透明
|
||||
|
||||
mivBackground = mrlMain.findViewById(R.id.bg_imageview);
|
||||
//mivBackground = new ImageView(mContext);
|
||||
// 配置ImageView布局参数:宽高自适应 + 居中显示 + 无内边距/外边距
|
||||
// RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(
|
||||
// LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
|
||||
// layoutParams.addRule(RelativeLayout.CENTER_IN_PARENT); // 核心:让ImageView在当前控件中居中
|
||||
// layoutParams.setMargins(0, 0, 0, 0); // 取消外边距,避免ImageView与控件间出现缝隙
|
||||
// mivBackground.setLayoutParams(layoutParams);
|
||||
|
||||
// 配置ImageView显示属性:保持比例 + 全透明背景
|
||||
// mivBackground.setScaleType(ImageView.ScaleType.FIT_CENTER); // 缩放模式:保持比例,完整显示图片
|
||||
// mivBackground.setPadding(0, 0, 0, 0); // 取消内边距,避免图片与ImageView间出现缝隙
|
||||
// mivBackground.setBackgroundColor(0x00000000); // ImageView自身背景全透明
|
||||
// mivBackground.setBackground(new ColorDrawable(0x00000000)); // 低版本兼容,确保透明
|
||||
|
||||
// 将ImageView添加到当前控件(父容器)
|
||||
this.addView(mrlMain);
|
||||
LogUtils.d(TAG, "=== initBackgroundImageView(内部ImageView初始化)完成 ===");
|
||||
@@ -157,31 +132,15 @@ public class BackgroundView extends RelativeLayout {
|
||||
public void loadBackground(BackgroundBean backgroundBean) {
|
||||
LogUtils.d(TAG, "=== loadBackground(加载预览背景)启动 ===");
|
||||
// 校验预览Bean是否为空,为空则直接显示默认背景
|
||||
if (backgroundBean == null || backgroundBean.isUseBackgroundFile()) {
|
||||
if (backgroundBean == null || !backgroundBean.isUseBackgroundFile()) {
|
||||
LogUtils.e(TAG, "【loadBackground】预览Bean为空,正在加载默认图片");
|
||||
setDefaultBackground();
|
||||
return;
|
||||
} else if (backgroundBean.isUseBackgroundFile()) {
|
||||
LogUtils.e(TAG, "【loadBackground】设置为不使用图片,正在加载默认图片");
|
||||
setDefaultBackground();
|
||||
setDefaultTransparentBackground();
|
||||
return;
|
||||
}
|
||||
|
||||
// 加载背景图片路径
|
||||
String szBackgroundPath = backgroundBean.isUseBackgroundScaledCompressFile() ? backgroundBean.getBackgroundScaledCompressFilePath() : backgroundBean.getBackgroundFilePath();
|
||||
loadAndSetImageViewBackground(szBackgroundPath);
|
||||
LogUtils.d(TAG, "=== loadBackground 加载背景完成===");
|
||||
}
|
||||
|
||||
/**
|
||||
* 预览模式兜底:设置默认透明背景(无有效图片时使用,避免显示白色背景)
|
||||
*/
|
||||
public void setDefaultBackground() {
|
||||
LogUtils.d(TAG, "=== setDefaultBackground(设置预览默认透明背景)启动 ===");
|
||||
setBackgroundColor(0x00000000); // 当前控件背景全透明
|
||||
adjustImageViewSize(); // 调整ImageView尺寸,确保居中且不占位异常
|
||||
LogUtils.d(TAG, "【setDefaultBackground】已设置预览默认透明背景");
|
||||
LogUtils.d(TAG, "=== setDefaultBackground(设置预览默认透明背景)完成 ===");
|
||||
loadAndSetImageViewBackground(szBackgroundPath);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -190,12 +149,13 @@ public class BackgroundView extends RelativeLayout {
|
||||
* @param imagePath 图片绝对路径(可为空)
|
||||
*/
|
||||
private void loadAndSetImageViewBackground(String imagePath) {
|
||||
LogUtils.d(TAG, "=== loadAndSetImageViewBackground(加载并设置图片)启动 ===");
|
||||
LogUtils.d(TAG, "=== loadAndSetImageViewBackground(加载并设置图片)启动 ===");
|
||||
LogUtils.d(TAG, String.format("imagePath %s", imagePath));
|
||||
|
||||
// 1. 路径校验:路径为空/空字符串,直接显示默认透明背景
|
||||
if (imagePath == null || imagePath.isEmpty()) {
|
||||
LogUtils.e(TAG, "【loadAndSetImageViewBackground】加载失败:图片路径为空");
|
||||
setDefaultTransparentBackground();
|
||||
LogUtils.d(TAG, "=== loadAndSetImageViewBackground(加载并设置图片)完成(路径为空)===");
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -204,7 +164,6 @@ public class BackgroundView extends RelativeLayout {
|
||||
if (!backgroundFile.exists() || !backgroundFile.isFile()) {
|
||||
LogUtils.e(TAG, "【loadAndSetImageViewBackground】加载失败:文件不存在或无效,路径:" + imagePath);
|
||||
setDefaultTransparentBackground();
|
||||
LogUtils.d(TAG, "=== loadAndSetImageViewBackground(加载并设置图片)完成(文件无效)===");
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -212,7 +171,6 @@ public class BackgroundView extends RelativeLayout {
|
||||
if (!calculateImageAspectRatio(backgroundFile)) {
|
||||
LogUtils.e(TAG, "【loadAndSetImageViewBackground】加载失败:图片宽高比计算失败,路径:" + imagePath);
|
||||
setDefaultTransparentBackground();
|
||||
LogUtils.d(TAG, "=== loadAndSetImageViewBackground(加载并设置图片)完成(宽高比计算失败)===");
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -221,17 +179,13 @@ public class BackgroundView extends RelativeLayout {
|
||||
if (bitmap == null) {
|
||||
LogUtils.e(TAG, "【loadAndSetImageViewBackground】加载失败:图片压缩加载失败,路径:" + imagePath);
|
||||
setDefaultTransparentBackground();
|
||||
LogUtils.d(TAG, "=== loadAndSetImageViewBackground(加载并设置图片)完成(Bitmap加载失败)===");
|
||||
return;
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
// 5. 设置图片到ImageView(兼容低版本系统)
|
||||
Drawable backgroundDrawable = new BitmapDrawable(mContext.getResources(), bitmap);
|
||||
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN) {
|
||||
mivBackground.setBackground(backgroundDrawable); // API 16+ 方法
|
||||
} else {
|
||||
mivBackground.setBackgroundDrawable(backgroundDrawable); // 低版本兼容方法
|
||||
}
|
||||
mivBackground.setImageDrawable(backgroundDrawable);
|
||||
|
||||
// 6. 调整ImageView尺寸(按图片比例扩展到父控件,确保不拉伸)
|
||||
adjustImageViewSize();
|
||||
@@ -262,19 +216,14 @@ public class BackgroundView extends RelativeLayout {
|
||||
// 校验宽高有效性(宽/高必须大于0,否则视为无效图片)
|
||||
if (imageWidth <= 0 || imageHeight <= 0) {
|
||||
LogUtils.e(TAG, "【calculateImageAspectRatio】计算失败:图片尺寸无效,宽:" + imageWidth + ",高:" + imageHeight);
|
||||
LogUtils.d(TAG, "=== calculateImageAspectRatio(计算图片宽高比)完成(尺寸无效)===");
|
||||
return false;
|
||||
return false;
|
||||
}
|
||||
|
||||
// 计算并保存图片原始宽高比(宽/高)
|
||||
mnImageAspectRatio = (float) imageWidth / imageHeight;
|
||||
LogUtils.d(TAG, "【calculateImageAspectRatio】计算成功");
|
||||
LogUtils.d(TAG, "→ 图片原始尺寸:" + imageWidth + "x" + imageHeight);
|
||||
LogUtils.d(TAG, "→ 图片宽高比:" + mnImageAspectRatio);
|
||||
LogUtils.d(TAG, "=== calculateImageAspectRatio(计算图片宽高比)完成(计算成功)===");
|
||||
return true;
|
||||
} catch (Exception e) {
|
||||
LogUtils.e(TAG, "【calculateImageAspectRatio】计算失败:" + e.getMessage(), e);
|
||||
LogUtils.d(TAG, "=== calculateImageAspectRatio(计算图片宽高比)完成(发生异常)===");
|
||||
return false;
|
||||
}
|
||||
@@ -286,17 +235,10 @@ public class BackgroundView extends RelativeLayout {
|
||||
* 适配场景:控件初始化、图片加载后、父容器尺寸变化(如屏幕旋转)
|
||||
*/
|
||||
private void adjustImageViewSize() {
|
||||
LogUtils.d(TAG, "=== adjustImageViewSize(调整ImageView尺寸)启动 ===");
|
||||
// 1. 绑定布局控件(匹配xml中bg_main容器和bg_imageview)
|
||||
if (mrlMain == null || mivBackground == null) {
|
||||
LogUtils.e(TAG, "【调整失败】布局控件绑定失败:bg_main或bg_imageview为空");
|
||||
return;
|
||||
}
|
||||
|
||||
// 2. 获取根容器bg_main尺寸(以bg_main为基准,实现居中平铺)
|
||||
int parentWidth = mrlMain.getWidth();
|
||||
int parentHeight = mrlMain.getHeight();
|
||||
|
||||
|
||||
// 3. bg_main未测量完成(宽/高为0),延迟调整(避免尺寸计算错误)
|
||||
if (parentWidth == 0 || parentHeight == 0) {
|
||||
postDelayed(new Runnable() {
|
||||
@@ -333,19 +275,11 @@ public class BackgroundView extends RelativeLayout {
|
||||
mivBackground.setLayoutParams(layoutParams);
|
||||
|
||||
// 6. 关键:设置缩放模式(匹配xml布局+保持比例+居中平铺)
|
||||
mivBackground.setScaleType(ImageView.ScaleType.FIT_CENTER);
|
||||
mivBackground.setScaleType(ImageView.ScaleType.MATRIX);
|
||||
// 确保ImageView背景透明(避免遮挡,适配布局视觉效果)
|
||||
mivBackground.setBackgroundColor(0x00000000);
|
||||
LogUtils.d(TAG, "【适配布局】设置FIT_CENTER缩放模式+透明背景,匹配xml布局的居中平铺需求");
|
||||
|
||||
// 7. 日志验证(确保比例一致+适配成功)
|
||||
LogUtils.d(TAG, "【adjustImageViewSize】尺寸调整成功(适配bg_main布局,保持原图比例+居中平铺)");
|
||||
LogUtils.d(TAG, "→ bg_main容器尺寸:" + parentWidth + "x" + parentHeight);
|
||||
LogUtils.d(TAG, "→ bg_imageview调整后尺寸:" + imageViewWidth + "x" + imageViewHeight);
|
||||
LogUtils.d(TAG, "→ 原图宽高比:" + mnImageAspectRatio + ",调整后宽高比:" + (float)imageViewWidth/imageViewHeight); // 验证比例无变形
|
||||
LogUtils.d(TAG, "=== adjustImageViewSize(调整ImageView尺寸)完成(调整成功)===");
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 带压缩的Bitmap解码(通用方法)
|
||||
@@ -402,9 +336,6 @@ public class BackgroundView extends RelativeLayout {
|
||||
mivBackground.setBackground(new ColorDrawable(0x00000000)); // ImageView背景全透明
|
||||
mivBackground.setImageBitmap(null); // 清空ImageView的图片
|
||||
mnImageAspectRatio = 1.0f; // 重置宽高比(避免影响下次图片加载)
|
||||
adjustImageViewSize(); // 调整ImageView尺寸,确保居中且不占位异常
|
||||
LogUtils.d(TAG, "【setDefaultTransparentBackground】已设置通用默认透明背景");
|
||||
LogUtils.d(TAG, "=== setDefaultTransparentBackground(设置通用默认透明背景)完成 ===");
|
||||
}
|
||||
|
||||
// ====================================== 重写父类方法 ======================================
|
||||
@@ -419,10 +350,7 @@ public class BackgroundView extends RelativeLayout {
|
||||
@Override
|
||||
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
|
||||
super.onSizeChanged(w, h, oldw, oldh);
|
||||
LogUtils.d(TAG, "=== onSizeChanged(控件尺寸变化)启动 ===");
|
||||
LogUtils.d(TAG, "【onSizeChanged】尺寸变化:旧尺寸=" + oldw + "x" + oldh + ",新尺寸=" + w + "x" + h);
|
||||
adjustImageViewSize(); // 重新调整ImageView尺寸,适配新的控件尺寸
|
||||
LogUtils.d(TAG, "=== onSizeChanged(控件尺寸变化)完成 ===");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user