不同设备的自定义视图尺寸

用户名

通过扩展View类,我已经创建了一个自定义视图目前,我有一个int定义视图大小的视图。然后,我重写该onMeasure方法并使宽度和高度等于int。

像这样:

private int DEFAULT_SIZE = 80;
public Paint mOuterCirclePaint = new Paint();

@Override
protected void onDraw(Canvas canvas) {

mOuterCirclePaint.setStyle(Style.STROKE);
    mOuterCirclePaint.setStrokeWidth(5.0f);
    mOuterCirclePaint.setDither(true);
    mOuterCirclePaint.setAntiAlias(true);
}

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {

    setMeasuredDimension(
            DEFAULT_SIZE + 5
                    + (int) mOuterCirclePaint.getStrokeWidth() / 2,
            DEFAULT_SIZE + 5
                    + (int) mOuterCirclePaint.getStrokeWidth() / 2);

}


public void setSize(int defaultSize) {
    DEFAULT_SIZE = defaultSize;
    invalidate();

}

但这意味着我的观点在不同分辨率的不同设备上无法很好地扩展。在高分辨率设备上,视图看起来很小,但是在低分辨率设备上,视图很大。

我认为为每个分辨率创建一个新视图不是一个好主意。我已经尝试将视图乘以DEFAULT_SIZE设备的密度(float scale = getResources().getDisplayMetrics().density;)来缩放视图,但这对低分辨率的设备没有影响,但是会使视图占据整个屏幕更多的空间(您看不到它)在高分辨率设备上

那么为不同设备制作自定义视图的最佳方法是什么?我是在正确的路线上吗,还是有另一种方法呢?

约瑟夫·拉什卡(JosefRaška)

您可以使用维度资源并使用

int defaultSize = (int)context.getResources().getDimension(R.dimen.default_size);

在自定义视图的构造函数中,在res / values / dimes.xml中具有以下内容

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <dimen name="default_size">80dp</dimen>
</resources>

现在,将根据设备屏幕的密度来缩放尺寸。

这是测量视图的简单示例:

public class MeasuredView extends View
{
    private int m_defaultSize;

    public MeasuredView(Context context)
    {
        super(context);

        init(context);
    }

    public MeasuredView(Context context, AttributeSet attrs)
    {
        super(context, attrs);

        init(context);
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
    {
        setMeasuredDimension(m_defaultSize, m_defaultSize);
    }

    private void init(Context context)
    {
        m_defaultSize = (int)context.getResources().getDimension(R.dimen.default_value);
    }
}

在xhdpi上大小为160像素,在hdpi上大小为120像素,在mdpi上大小为80像素。

您应该知道setSize(int defaultSize)将参数值作为像素,因此如果要将其设置为dp,则可以编写方法

public void setDefaultSizeDp(int defaultSizeDp)
    {
        int defaultSizePx = (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, defaultSizeDp, getResources().getDisplayMetrics());

        m_defaultSize = defaultSizePx;
        invalidate();
    }

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

调整自定义视图的报告尺寸以包括绘制的图形

来自分类Dev

Xamarin iOS 堆栈视图中来自xib 的自定尺寸自定义视图

来自分类Dev

自定义尺寸数组

来自分类Dev

IOS/Storyboard:适应不同尺寸设备的视图

来自分类Dev

处理自定义视图的不同触摸状态

来自分类Dev

如果onMeasure()选择最小尺寸AT_MOST,则不会绘制自定义视图布局

来自分类Dev

自定义尺寸的线性渐变

来自分类Dev

JavaFX打印自定义纸张尺寸

来自分类Dev

QR码自定义尺寸

来自分类Dev

GA for iOS和自定义尺寸

来自分类Dev

如何自定义绘图尺寸

来自分类Dev

自定义尺寸的线性渐变

来自分类Dev

NSMenuItem的自定义视图

来自分类Dev

自定义网格视图

来自分类Dev

网格视图自定义

来自分类Dev

自定义视图的度量

来自分类Dev

自定义文本视图

来自分类Dev

快速自定义视图

来自分类Dev

自定义树视图

来自分类Dev

自定义视图,以不同的子视图对角拆分布局

来自分类Dev

自定义视图中的ImageView壁纸未在某些设备上显示

来自分类Dev

Android预览不显示自定义视图,但在设备上可见

来自分类Dev

在各个设备上的自定义图像视图上获取位置

来自分类Dev

如何自定义UIInterpolatingMotionEffect以根据设备的方向设置不同的阴影效果?

来自分类Dev

自定义通知Android在不同设备上不会显示相同的内容

来自分类Dev

使用自定义视图创建自定义通知

来自分类Dev

自定义android视图的“自定义类型”属性

来自分类Dev

iOS:设备上的自定义位置

来自分类Dev

如何在Flutter中针对不同屏幕尺寸在自定义类中设置应用栏的高度?