Android 如何将视图放置在ImageView的顶部,与ImageView';什么是内容大小? 背景

Android 如何将视图放置在ImageView的顶部,与ImageView';什么是内容大小? 背景,android,imageview,Android,Imageview,假设我想用ImageView显示某物的图像,并且我想在其顶部放置新视图(例如,在世界地图图像上显示管脚的动画ImageView,或者在智能手机图像顶部放置开关视图) 这意味着,无论ImageView如何显示图像,视图都应该位于图像中,位于正确的点内,具有与指定相同的大小,或者与ImageView本身相关的大小 问题 与其他视图不同,ImageView可以具有一定的大小,但其内容是其他内容(以保持纵横比) 我试过的 我尝试使用ConstraintLayout,但这并没有真正的帮助,因为ImageV

假设我想用ImageView显示某物的图像,并且我想在其顶部放置新视图(例如,在世界地图图像上显示管脚的动画ImageView,或者在智能手机图像顶部放置开关视图)

这意味着,无论ImageView如何显示图像,视图都应该位于图像中,位于正确的点内,具有与指定相同的大小,或者与ImageView本身相关的大小

问题 与其他视图不同,ImageView可以具有一定的大小,但其内容是其他内容(以保持纵横比)

我试过的 我尝试使用ConstraintLayout,但这并没有真正的帮助,因为ImageView可以更改其大小(例如,在更改方向时),从而破坏了与ImageView相比我给出的视图的位置

我发现一些库可以处理类似的事情(比如),我甚至在()之前问过类似的问题,但所有这些解决方案都是针对ImageView中的静态图像,而我搜索的是在ImageView上添加一个视图

问题 如何将视图正确放置在ImageView内容的顶部

与ImageView内容的大小相比,如何将视图向下/向上缩放


是否可以使用ConstraintLayout根据ImageView的大小更改视图的比例

使用
wrap\u内容制作
FrameLayout
ImageView
。然后您可以在
ImageView
的顶部设置
SwitchView
。您可以将其对齐到中心、边或角,并使用边距获得一些精细的位置


它仍然无法与图像缩放,但您可以获得相当好的结果。如果这不适合您,您可以通过编程获得
ImageView
的宽度/高度,并相应地更改
SwitchView
的位置(或边距)。

是否显示位于ImageView上的开关

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/ll_download"
    android:layout_width="100dp"
    android:layout_height="60dp"
    android:layout_centerInParent="true"
    android:orientation="vertical">

    <ImageView
        android:src="@android:drawable/btn_star_big_on"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
    <Switch
        android:id="@+id/mySwitch"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:text="Switch" />
</RelativeLayout>


使用下面的内容,您可以根据图像视图宽度管理交换机或任何其他视图的宽度

android:layout_alignLeft="@+id/imageView"
android:layout_alignRight="@+id/imageView"



据我所知,您需要图像视图中显示的图像大小,并将其设置为开关视图的最大宽度,对吗

为此,您需要Java和XML

XML文件基本上与视图按需要堆叠在一起

   <RelativeLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">
        <ImageView
            android:src="@drawable/nonet_icon"
            android:id="@+id/iconView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
        <android.support.v7.widget.SwitchCompat
            android:layout_width="wrap_content"
            android:visibility="gone"
            android:layout_centerInParent="true"
            android:layout_height="wrap_content"
            android:id="@+id/switchView"/>
    </RelativeLayout>
Ref:获取ImageView的显示图像大小

参考:

如果你需要详细的解释,请发表评论

例如:

图像缩放视图:

在Java中

        ImageView imgView = (ImageView) findViewById(R.id.imageView);
        imageView.setBackgroundResource(R.drawable.yourDrawable);
        int width = imgView.getDrawable().getIntrinsicWidth();

        Switch switchKey = (Switch) findViewById(R.id.switchKey);
        switchKey.setMinimumWidth(width);

在XML中,将其与alignLeft和alignRight与ImageView对齐。

您可以使用带有相对布局的
MarginLayoutParams
ImageView中设置左侧和顶部位置

    image = (ImageView) findViewById(R.id.imageID);
    MarginLayoutParams marginParams = new MarginLayoutParams(image.getLayoutParams());
    marginParams.setMargins(left_margin, top_margin, right_margin, bottom_margin);
    RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(marginParams);
    image.setLayoutParams(layoutParams);
请在下面的链接中找到此项的完整信息:


试试这个,可能会对你有所帮助

<RelativeLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">

    <ImageView
        android:id="@+id/img_background"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:scaleType="centerCrop"/>

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@color/semi_transparent"
        android:layout_margin="@dimen/spacing_small"
        android:layout_alignTop="@+id/img_background"
        android:layout_alignBottom="@id/img_background">

        //this layout will expand according to your image size

    </RelativeLayout>

</RelativeLayout>

//此布局将根据图像大小展开

设置
开关的布局参数
,它们应该是
android.widget.FrameLayout.LayoutParams
,您将从映射从
getImageMatrix
方法返回的矩阵中获得值我不知道类似的问题,我刚刚为您提供了一个如何布局
开关
视图的解决方案,使其始终覆盖
ImageView
的某个部分,无论它有多大,大小如何uses@pskink很遗憾,我不知道如何使用你的解决方案,由于您的解决方案缺少代码,因此我无法在Internet上找到它。请查看并查找在哪里使用了
mDrawMatrix
,它应该解释什么是“ImageMatrix”for@pskink你错了,把ImageView的源代码放在这里与问题无关。作为一个类比示例,如果我问您如何为RecyclerView设置适配器,您会给我RecyclerView的代码。或者,如果我想询问如何在Linux上显示当前路径的文件列表,您可能会给我Linux的代码(甚至比向我显示“manls”更糟糕)。这种回答是不好的,人们会称之为“拖拉”。如果你不知道答案,最好避免这样写。它不会根据ImageView的内容进行缩放和移动,正如我所写的,因此这不是一个好的解决方案。获取高度和宽度将得到相同的结果。我需要根据ImageView的内容设置开关的大小和位置,而不是ImageView本身的大小。请仔细阅读问题。开关应位于顶部,但也应与ImageView的内容相关。例如,在您的图像中,尝试将开关置于星形的右端,无论星形有多小或多大,并使开关根据星形的大小更改其大小。如果这是相对长度,则这是错误的,因为我所问的是对齐开关(以及可选地调整开关大小)和其他视图与ImageView显示的内容相比(这意味着它取决于ScaleType和对ImageView施加的周围限制),而不仅仅是ImageView的边界框。相对于ImageView的内容,将视图放在ImageView顶部特定位置的部分在哪里?例如,将视图设置为imageView内容大小的20%x25%,并将其放置在与imageView内容相比的30%x35%位置。视图通过XML文件添加到相对布局中。有关详细信息,请检查XML文件。就缩放而言:可以根据需要缩放视图:
//缩放视图
mSwitchCompat.setScaleX(0.2f)
mSwitchCompat.setScaleY(0.25f)
int-imageWidth=mImageView.getDrawable().getIntrinsicWidth()
//在customlocation上设置它
mSwitchCompat.setSwitchMinWidth(Math.round(imageWidth/30))选中编辑,自定义
    image = (ImageView) findViewById(R.id.imageID);
    MarginLayoutParams marginParams = new MarginLayoutParams(image.getLayoutParams());
    marginParams.setMargins(left_margin, top_margin, right_margin, bottom_margin);
    RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(marginParams);
    image.setLayoutParams(layoutParams);
<RelativeLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">

    <ImageView
        android:id="@+id/img_background"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:scaleType="centerCrop"/>

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@color/semi_transparent"
        android:layout_margin="@dimen/spacing_small"
        android:layout_alignTop="@+id/img_background"
        android:layout_alignBottom="@id/img_background">

        //this layout will expand according to your image size

    </RelativeLayout>

</RelativeLayout>