gpt4 book ai didi

android - 在右下角裁剪重要部分的图像

转载 作者:搜寻专家 更新时间:2023-11-01 08:02:38 25 4
gpt4 key购买 nike

我正在设计一个必须在所有 Android 设备上看起来都不错的应用程序。在一项 Activity 中,我想设置背景。我要使用的图像右下角有一个重要人物我想要的是:- 保持纵横比- 原始图像的右下角必须可见- 全屏- 必须处理纵向和横向

我已经尝试了所有的 scaletype 选项,fit 选项没有填满整个屏幕,而且 centercrop 裁剪了所有边(所以它切掉了右下角的一部分)。

最佳答案

首先为您的可绘制对象创建一个 imageView 并通过更改 <ImageView> 对其进行自定义至 <com.packagename.CenterCropShiftsUp> , 并将 scaleType 设置为 centerCrop。在我刚才提到的包中创建 CenterCropShiftsUp.java,并使用此代码将可绘制对象向上移动:

package nl.mijnverzekering.views;

import android.content.Context;
import android.util.AttributeSet;
import android.widget.ImageView;

public class CenterCropShiftsUp extends ImageView
{
public CenterCropShiftsUp(Context context, AttributeSet attrs)
{
super(context, attrs);
}

@Override
protected boolean setFrame(int l, int t, int r, int b)
{
int drawableWidth = getDrawable().getIntrinsicWidth();
int drawableHeight = getDrawable().getIntrinsicHeight();

int viewWidth = r - getPaddingLeft() - getPaddingRight();
int viewHeight = b - getPaddingTop() - getPaddingBottom();

float heightRatio = 1 / ((float) drawableHeight / (float) viewHeight);
float widthRatio = 1 / ((float) drawableWidth / (float) viewWidth);

// Choose the biggest ratio as scaleFactor
// (centerCrop does the same: the drawable never scales down to leave part of the screen empty)
float scale = heightRatio > widthRatio ? heightRatio : widthRatio;

int newDrawableHeight = (int) (scale * (float) drawableHeight);

// Shifts the t (top) of the imageFrame up (t -=)
// This calculation aligns the bottom of the drawable to the bottom of the screen
t -= (newDrawableHeight - b);

return super.setFrame(l, t, r, b);
}
}

它首先计算图像的 scaleFactor,然后使用这个比例计算新的 drawableHeight(就像 centerCrop 会做的那样)。使用此高度,您可以计算 ImageView 的框架应向上移动多远(使用 setFrame() 使可绘制对象的底部与屏幕底部对齐)。

你也要求的右边的对齐方式,由于centerCrop本身的属性,当然会自动固定。

关于android - 在右下角裁剪重要部分的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18914221/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com