如何使线性布局坚持到 Android 中的 ImageView?

Posted

技术标签:

【中文标题】如何使线性布局坚持到 Android 中的 ImageView?【英文标题】:How to make a linear layout stick to an ImageView in android? 【发布时间】:2020-11-22 10:47:23 【问题描述】:

我有一张吉他指板图像,上面有一些点。不幸的是,当我滚动图像时,点不会随之移动。抱歉这么久。这是我弄清楚如何在图像上实现点的唯一方法。如果有人对更好的图像制作方法有任何想法,我会全力以赴。

<?xml version="1.0" encoding="utf-8"?>

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_
android:layout_>

<ImageView
    android:id="@+id/fretboardView"
    android:layout_
    android:layout_
    android:layout_gravity="center_vertical"
    android:src="@drawable/fretboard" />

<LinearLayout
    android:layout_
    android:layout_
    android:layout_gravity="center_vertical"
    android:orientation="horizontal">

    <LinearLayout
        android:layout_
        android:layout_
        android:orientation="vertical">

        <Space
            android:layout_
            android:layout_
            android:layout_marginLeft="44dp" />

        <ImageView
            android:id="@+id/dot1e"
            android:layout_
            android:layout_
            android:layout_marginLeft="44dp"
            android:src="@drawable/dot" />

        <Space
            android:layout_
            android:layout_
            android:layout_marginLeft="44dp" />

        <ImageView
            android:id="@+id/dot1B"
            android:layout_
            android:layout_
            android:layout_marginLeft="44dp"
            android:src="@drawable/dot" />

        <Space
            android:layout_
            android:layout_
            android:layout_marginLeft="44dp" />

        <ImageView
            android:id="@+id/dot1G"
            android:layout_
            android:layout_
            android:layout_marginLeft="44dp"
            android:src="@drawable/dot" />

        <Space
            android:layout_
            android:layout_
            android:layout_marginLeft="44dp" />

        <ImageView
            android:id="@+id/dot1D"
            android:layout_
            android:layout_
            android:layout_marginLeft="44dp"
            android:src="@drawable/dot" />

        <Space
            android:layout_
            android:layout_
            android:layout_marginLeft="44dp" />


        <ImageView
            android:id="@+id/dot1A"
            android:layout_
            android:layout_
            android:layout_marginLeft="44dp"
            android:src="@drawable/dot" />

        <Space
            android:layout_
            android:layout_
            android:layout_marginLeft="44dp" />

        <ImageView
            android:id="@+id/dot1E"
            android:layout_
            android:layout_
            android:layout_marginLeft="44dp"
            android:src="@drawable/dot" />


    </LinearLayout>


    <LinearLayout
        android:layout_
        android:layout_
        android:orientation="vertical">

        <Space
            android:layout_
            android:layout_
            android:layout_marginLeft="3dp" />


        <ImageView
            android:id="@+id/dot2e"
            android:layout_
            android:layout_
            android:layout_marginLeft="3dp"
            android:src="@drawable/dot" />

        <Space
            android:layout_
            android:layout_
            android:layout_marginLeft="3dp" />

        <ImageView
            android:id="@+id/dot2B"
            android:layout_
            android:layout_
            android:layout_marginLeft="3dp"
            android:src="@drawable/dot" />

        <Space
            android:layout_
            android:layout_
            android:layout_marginLeft="3dp" />

        <ImageView
            android:id="@+id/dot2G"
            android:layout_
            android:layout_
            android:layout_marginLeft="3dp"
            android:src="@drawable/dot" />

        <Space
            android:layout_
            android:layout_
            android:layout_marginLeft="3dp" />

        <ImageView
            android:id="@+id/dot2D"
            android:layout_
            android:layout_
            android:layout_marginLeft="3dp"
            android:src="@drawable/dot" />

        <Space
            android:layout_
            android:layout_
            android:layout_marginLeft="3dp" />

        <ImageView
            android:id="@+id/dot2A"
            android:layout_
            android:layout_
            android:layout_marginLeft="3dp"
            android:src="@drawable/dot" />

        <Space
            android:layout_
            android:layout_
            android:layout_marginLeft="3dp" />

        <ImageView
            android:id="@+id/dot2E"
            android:layout_
            android:layout_
            android:layout_marginLeft="3dp"
            android:src="@drawable/dot" />


    </LinearLayout>

    <LinearLayout
        android:layout_
        android:layout_
        android:orientation="vertical">

        <Space
            android:layout_
            android:layout_
            android:layout_marginLeft="3dp" />


        <ImageView
            android:id="@+id/dot3e"
            android:layout_
            android:layout_
            android:layout_marginLeft="3dp"
            android:src="@drawable/dot" />

        <Space
            android:layout_
            android:layout_
            android:layout_marginLeft="3dp" />

        <ImageView
            android:id="@+id/dot3B"
            android:layout_
            android:layout_
            android:layout_marginLeft="3dp"
            android:src="@drawable/dot" />

        <Space
            android:layout_
            android:layout_
            android:layout_marginLeft="3dp" />

        <ImageView
            android:id="@+id/dot3G"
            android:layout_
            android:layout_
            android:layout_marginLeft="3dp"
            android:src="@drawable/dot" />

        <Space
            android:layout_
            android:layout_
            android:layout_marginLeft="3dp" />

        <ImageView
            android:id="@+id/dot3D"
            android:layout_
            android:layout_
            android:layout_marginLeft="3dp"
            android:src="@drawable/dot" />

        <Space
            android:layout_
            android:layout_
            android:layout_marginLeft="3dp" />

        <ImageView
            android:id="@+id/dot3A"
            android:layout_
            android:layout_
            android:layout_marginLeft="3dp"
            android:src="@drawable/dot" />

        <Space
            android:layout_
            android:layout_
            android:layout_marginLeft="3dp" />

        <ImageView
            android:id="@+id/dot3E"
            android:layout_
            android:layout_
            android:layout_marginLeft="3dp"
            android:src="@drawable/dot" />


    </LinearLayout>

    <LinearLayout
        android:layout_
        android:layout_
        android:orientation="vertical">

        <Space
            android:layout_
            android:layout_
            android:layout_marginLeft="3dp" />


        <ImageView
            android:id="@+id/dot4e"
            android:layout_
            android:layout_
            android:layout_marginLeft="3dp"
            android:src="@drawable/dot" />

        <Space
            android:layout_
            android:layout_
            android:layout_marginLeft="3dp" />

        <ImageView
            android:id="@+id/dot4B"
            android:layout_
            android:layout_
            android:layout_marginLeft="3dp"
            android:src="@drawable/dot" />

        <Space
            android:layout_
            android:layout_
            android:layout_marginLeft="3dp" />

        <ImageView
            android:id="@+id/dot4G"
            android:layout_
            android:layout_
            android:layout_marginLeft="3dp"
            android:src="@drawable/dot" />

        <Space
            android:layout_
            android:layout_
            android:layout_marginLeft="3dp" />

        <ImageView
            android:id="@+id/dot4D"
            android:layout_
            android:layout_
            android:layout_marginLeft="3dp"
            android:src="@drawable/dot" />

        <Space
            android:layout_
            android:layout_
            android:layout_marginLeft="3dp" />

        <ImageView
            android:id="@+id/dot4A"
            android:layout_
            android:layout_
            android:layout_marginLeft="3dp"
            android:src="@drawable/dot" />

        <Space
            android:layout_
            android:layout_
            android:layout_marginLeft="3dp" />

        <ImageView
            android:id="@+id/dot4E"
            android:layout_
            android:layout_
            android:layout_marginLeft="3dp"
            android:src="@drawable/dot" />


    </LinearLayout>


    <LinearLayout
        android:layout_
        android:layout_
        android:orientation="vertical">

        <Space
            android:layout_
            android:layout_
            android:layout_marginLeft="3dp" />


        <ImageView
            android:id="@+id/dot5e"
            android:layout_
            android:layout_
            android:layout_marginLeft="3dp"
            android:src="@drawable/dot" />

        <Space
            android:layout_
            android:layout_
            android:layout_marginLeft="3dp" />

        <ImageView
            android:id="@+id/dot5B"
            android:layout_
            android:layout_
            android:layout_marginLeft="3dp"
            android:src="@drawable/dot" />

        <Space
            android:layout_
            android:layout_
            android:layout_marginLeft="3dp" />

        <ImageView
            android:id="@+id/dot5G"
            android:layout_
            android:layout_
            android:layout_marginLeft="3dp"
            android:src="@drawable/dot" />

        <Space
            android:layout_
            android:layout_
            android:layout_marginLeft="3dp" />

        <ImageView
            android:id="@+id/dot5D"
            android:layout_
            android:layout_
            android:layout_marginLeft="3dp"
            android:src="@drawable/dot" />

        <Space
            android:layout_
            android:layout_
            android:layout_marginLeft="3dp" />

        <ImageView
            android:id="@+id/dot5A"
            android:layout_
            android:layout_
            android:layout_marginLeft="3dp"
            android:src="@drawable/dot" />

        <Space
            android:layout_
            android:layout_
            android:layout_marginLeft="3dp" />

        <ImageView
            android:id="@+id/dot5E"
            android:layout_
            android:layout_
            android:layout_marginLeft="3dp"
            android:src="@drawable/dot" />


    </LinearLayout>

    <LinearLayout
        android:layout_
        android:layout_
        android:orientation="vertical">

        <Space
            android:layout_
            android:layout_
            android:layout_marginLeft="3dp" />


        <ImageView
            android:id="@+id/dot6e"
            android:layout_
            android:layout_
            android:layout_marginLeft="3dp"
            android:src="@drawable/dot" />

        <Space
            android:layout_
            android:layout_
            android:layout_marginLeft="3dp" />

        <ImageView
            android:id="@+id/dot6B"
            android:layout_
            android:layout_
            android:layout_marginLeft="3dp"
            android:src="@drawable/dot" />

        <Space
            android:layout_
            android:layout_
            android:layout_marginLeft="3dp" />

        <ImageView
            android:id="@+id/dot6G"
            android:layout_
            android:layout_
            android:layout_marginLeft="3dp"
            android:src="@drawable/dot" />

        <Space
            android:layout_
            android:layout_
            android:layout_marginLeft="3dp" />

        <ImageView
            android:id="@+id/dot6D"
            android:layout_
            android:layout_
            android:layout_marginLeft="3dp"
            android:src="@drawable/dot" />

        <Space
            android:layout_
            android:layout_
            android:layout_marginLeft="3dp" />

        <ImageView
            android:id="@+id/dot6A"
            android:layout_
            android:layout_
            android:layout_marginLeft="3dp"
            android:src="@drawable/dot" />

        <Space
            android:layout_
            android:layout_
            android:layout_marginLeft="3dp" />

        <ImageView
            android:id="@+id/dot6E"
            android:layout_
            android:layout_
            android:layout_marginLeft="3dp"
            android:src="@drawable/dot" />


    </LinearLayout>

    <LinearLayout
        android:layout_
        android:layout_
        android:orientation="vertical">

        <Space
            android:layout_
            android:layout_
            android:layout_marginLeft="3dp" />


        <ImageView
            android:id="@+id/dot7e"
            android:layout_
            android:layout_
            android:layout_marginLeft="3dp"
            android:src="@drawable/dot" />

        <Space
            android:layout_
            android:layout_
            android:layout_marginLeft="3dp" />

        <ImageView
            android:id="@+id/dot7B"
            android:layout_
            android:layout_
            android:layout_marginLeft="3dp"
            android:src="@drawable/dot" />

        <Space
            android:layout_
            android:layout_
            android:layout_marginLeft="3dp" />

        <ImageView
            android:id="@+id/dot7G"
            android:layout_
            android:layout_
            android:layout_marginLeft="3dp"
            android:src="@drawable/dot" />

        <Space
            android:layout_
            android:layout_
            android:layout_marginLeft="3dp" />

        <ImageView
            android:id="@+id/dot7D"
            android:layout_
            android:layout_
            android:layout_marginLeft="3dp"
            android:src="@drawable/dot" />

        <Space
            android:layout_
            android:layout_
            android:layout_marginLeft="3dp" />

        <ImageView
            android:id="@+id/dot7A"
            android:layout_
            android:layout_
            android:layout_marginLeft="3dp"
            android:src="@drawable/dot" />

        <Space
            android:layout_
            android:layout_
            android:layout_marginLeft="3dp" />

        <ImageView
            android:id="@+id/dot7E"
            android:layout_
            android:layout_
            android:layout_marginLeft="3dp"
            android:src="@drawable/dot" />


    </LinearLayout>

    <LinearLayout
        android:layout_
        android:layout_
        android:orientation="vertical">

        <Space
            android:layout_
            android:layout_
            android:layout_marginLeft="3dp" />


        <ImageView
            android:id="@+id/dot8e"
            android:layout_
            android:layout_
            android:layout_marginLeft="3dp"
            android:src="@drawable/dot" />

        <Space
            android:layout_
            android:layout_
            android:layout_marginLeft="3dp" />

        <ImageView
            android:id="@+id/dot8B"
            android:layout_
            android:layout_
            android:layout_marginLeft="3dp"
            android:src="@drawable/dot" />

        <Space
            android:layout_
            android:layout_
            android:layout_marginLeft="3dp" />

        <ImageView
            android:id="@+id/dot8G"
            android:layout_
            android:layout_
            android:layout_marginLeft="3dp"
            android:src="@drawable/dot" />

        <Space
            android:layout_
            android:layout_
            android:layout_marginLeft="3dp" />

        <ImageView
            android:id="@+id/dot8D"
            android:layout_
            android:layout_
            android:layout_marginLeft="3dp"
            android:src="@drawable/dot" />

        <Space
            android:layout_
            android:layout_
            android:layout_marginLeft="3dp" />

        <ImageView
            android:id="@+id/dot8A"
            android:layout_
            android:layout_
            android:layout_marginLeft="3dp"
            android:src="@drawable/dot" />

        <Space
            android:layout_
            android:layout_
            android:layout_marginLeft="3dp" />

        <ImageView
            android:id="@+id/dot8E"
            android:layout_
            android:layout_
            android:layout_marginLeft="3dp"
            android:src="@drawable/dot" />


    </LinearLayout>

    <LinearLayout
        android:layout_
        android:layout_
        android:orientation="vertical">

        <Space
            android:layout_
            android:layout_
            android:layout_marginLeft="3dp" />


        <ImageView
            android:id="@+id/dot9e"
            android:layout_
            android:layout_
            android:layout_marginLeft="3dp"
            android:src="@drawable/dot" />

        <Space
            android:layout_
            android:layout_
            android:layout_marginLeft="3dp" />

        <ImageView
            android:id="@+id/dot9B"
            android:layout_
            android:layout_
            android:layout_marginLeft="3dp"
            android:src="@drawable/dot" />

        <Space
            android:layout_
            android:layout_
            android:layout_marginLeft="3dp" />

        <ImageView
            android:id="@+id/dot9G"
            android:layout_
            android:layout_
            android:layout_marginLeft="3dp"
            android:src="@drawable/dot" />

        <Space
            android:layout_
            android:layout_
            android:layout_marginLeft="3dp" />

        <ImageView
            android:id="@+id/dot9D"
            android:layout_
            android:layout_
            android:layout_marginLeft="3dp"
            android:src="@drawable/dot" />

        <Space
            android:layout_
            android:layout_
            android:layout_marginLeft="3dp" />

        <ImageView
            android:id="@+id/dot9A"
            android:layout_
            android:layout_
            android:layout_marginLeft="3dp"
            android:src="@drawable/dot" />

        <Space
            android:layout_
            android:layout_
            android:layout_marginLeft="3dp" />

        <ImageView
            android:id="@+id/dot9E"
            android:layout_
            android:layout_
            android:layout_marginLeft="3dp"
            android:src="@drawable/dot" />


    </LinearLayout>

    <LinearLayout
        android:layout_
        android:layout_
        android:orientation="vertical">

        <Space
            android:layout_
            android:layout_
            android:layout_marginLeft="3dp" />


        <ImageView
            android:id="@+id/dot10e"
            android:layout_
            android:layout_
            android:layout_marginLeft="2dp"
            android:src="@drawable/dot" />

        <Space
            android:layout_
            android:layout_
            android:layout_marginLeft="1dp" />

        <ImageView
            android:id="@+id/dot10B"
            android:layout_
            android:layout_
            android:layout_marginLeft="2dp"
            android:src="@drawable/dot" />

        <Space
            android:layout_
            android:layout_
            android:layout_marginLeft="3dp" />

        <ImageView
            android:id="@+id/dot10G"
            android:layout_
            android:layout_
            android:layout_marginLeft="2dp"
            android:src="@drawable/dot" />

        <Space
            android:layout_
            android:layout_
            android:layout_marginLeft="3dp" />

        <ImageView
            android:id="@+id/dot10D"
            android:layout_
            android:layout_
            android:layout_marginLeft="2dp"
            android:src="@drawable/dot" />

        <Space
            android:layout_
            android:layout_
            android:layout_marginLeft="3dp" />

        <ImageView
            android:id="@+id/dot10A"
            android:layout_
            android:layout_
            android:layout_marginLeft="2dp"
            android:src="@drawable/dot" />

        <Space
            android:layout_
            android:layout_
            android:layout_marginLeft="3dp" />

        <ImageView
            android:id="@+id/dot10E"
            android:layout_
            android:layout_
            android:layout_marginLeft="2dp"
            android:src="@drawable/dot" />


    </LinearLayout>


   </LinearLayout>


   </FrameLayout>

【问题讨论】:

你有 2 个嵌套视图到 FrameLayout;他们应该只有一个 我不知道这是什么意思,你能进一步解释一下吗? 嗨 Jack,你的布局中的根元素是 FrameLayout,它有两个直接嵌套的子元素,ImageViewLinearLayout,根据 documentation,@987654327 @ 应该只有一个直接嵌套(子)View 好的。感谢您的澄清,但我如何保持我的形象? 【参考方案1】:

如果我是你,我会把所有的按钮放在布局中,然后放到一个 ScrollView 中。 这样,您可以为片段提供背景图像,并将所有内容一起滚动。

像这样:

<ScrollView>
    <LinearLayout
        android:id="@+id/linearlayout1"
        android:layout_
        android:layout_
        android:layout_weight="1"
        android:background="@drawable/your_image" <!-- place that image in the drawables folder -->
        android:orientation="vertical">
    </LinearLayout>
</ScrollView>

(请注意,您还必须将滚动视图放在某个布局中,例如约束布局)

您还可以通过以下方式以编程方式设置背景图像:

LinearLayout mLayout = (LinearLayout) findViewById(R.id.linearlayout1);
mLayout.setBackground(Image);

【讨论】:

【参考方案2】:
 I also found this works too.

 public LinearLayout mainLayout;
 mainLayout = root.findViewById(R.id.fretboardLayout);



   @Override
public void onSensorChanged(SensorEvent event)


    if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER)
    
        getAccelerometer(event);
    




  private void getAccelerometer(SensorEvent event)

    float[] values = event.values;
    // Movement
    float x = values[0];
    float y = values[1];
    float z = values[2];

    final int acceleration = maxX / bitmapWidth * 2;


    float accelerationSquareRoot = (x * x + y * y + z * z)
            / (SensorManager.GRAVITY_EARTH * SensorManager.GRAVITY_EARTH);
    long actualTime = event.timestamp;

    /*
    if( Math.abs(scrollIndex) > 2) // if scroll amount is too much override it and set it to 0
    
        x = 0;
    

     */

    scrollIndex += x;

  

    fretboardView.scrollBy( (int) x * (int) accelerationSquareRoot * acceleration, 0);

 
    if (accelerationSquareRoot >= 2) 
    
        if (actualTime - lastUpdate < 200) 
        
            return;
        
        lastUpdate = actualTime;

    
    





 

【讨论】:

以上是关于如何使线性布局坚持到 Android 中的 ImageView?的主要内容,如果未能解决你的问题,请参考以下文章

android:如何平均划分线性布局元素

线性布局的权重究竟是怎么一回事

如何在android中的地图片段内中心线性布局?

Android开发点滴 - 如何使按钮水平垂直居中且始终占据屏幕宽度一半

如何在 Android 上使图像透明?

线性布局android中的重叠视图