如何在RelativeLayout外部或屏幕外显示ImageView?如何在屏幕的左侧显示橡胶

时间:2014-06-09 22:46:41

标签: android android-layout imageview

我已经设置了一个包含所有元素的相对视图(按钮,图像等...)。它是我的Android应用程序的标题页。
现在我想覆盖" LITE"整个布局的横幅,在左上角。

我的问题是" LITE"横幅图像是一种倾斜的红色橡胶,我需要在屏幕上将其topleft点设置为(-45,-45)以仅显示我想要的图像部分(附加的是源图像,这样您就可以了解哪个部分图像应该在屏幕上可见。

the banner

我已尝试使用AbsoluteLayout(RelativeLayout)以编程方式使用SetLeft和SetTop移动它,但不接受负值。

有什么想法吗?

2 个答案:

答案 0 :(得分:8)

您可以使用属性android:clipToPadding="false"的相对布局来获得所需效果。

示例:

    <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout  xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:clipToPadding="false"
android:background="@android:color/white"
android:paddingLeft="50dip"
>

<ImageView
    android:id="@+id/myId"
    android:layout_width="60dip"
    android:layout_height="60dip"
    android:layout_marginLeft="-70dp"
    android:layout_marginTop="-20dp"
    android:clipChildren="false"
    android:src="@drawable/button_normal" />

</RelativeLayout>

<强>结果:

enter image description here

答案 1 :(得分:1)

我想与社区分享我与这件事的经历......

我的想法是在我的应用程序主屏幕的topleft角上显示一个倾斜的“LITE”橡胶。

Rod Algonquin的回答很好。然而,它并没有完全解决我的问题,因为我不得不调整图片的尺寸到屏幕高度...和屏幕方向。恶梦。即使使用相对布局,也几乎不可能,因为图像的隐藏部分从未正确对齐。

所以我必须以不同的方式工作:图片必须向左和向上移动20%。怎么做?

1)在layout.xml文件中:

  • 将ImageView插入RelativeLayout
  • 为相对布局提供ID
  • 配置ImageView以使其适合其容器RelativeLayout的宽度和高度(layout_width =“wrap_content”和layout_height =“wrap_content”)

    <RelativeLayout
        android:id="@+id/accueil_litebannerlayout"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">
        <ImageView
            android:id="@+id/accueil_litebanner"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:scaleType="fitXY"
            android:src="@drawable/lite_banner" />
    </RelativeLayout>
    

2)在您的activity.java类文件中:

    //get screen dimensions
        Display display = getWindowManager().getDefaultDisplay();
        Point size = new Point();
        display.getSize(size);
        int ScreenWidth = size.x;
        int ScreenHeight = size.y;
        //set the desired height of the rubber, based on screen's height    
        int myLayoutWidthAndHeight=ScreenHeight/4;

    //get rubber PNG image dimensions
        BitmapFactory.Options options = new BitmapFactory.Options();
        options.inJustDecodeBounds=true;
        BitmapFactory.decodeResource(getResources(),
                R.drawable.lite_banner,options);
        int imageHeight = options.outHeight;
        int imageWidth = options.outWidth;

    //redux_factor has to be calculated, because if the image is reduced, then the translation has to be adapted
        double redux_factor=1;
        if (myLayoutWidthAndHeight<imageWidth) {
            redux_factor=(double)myLayoutWidthAndHeight/imageWidth;
        }
    //determine by how many pixels left and top (same) the image will have to be translated
        double translation_percents=.22;
        double myCroppedMargin_double=imageWidth*translation_percents*redux_factor;
        int myCroppedMargin=(int) Math.round(myCroppedMargin_double);

    //get the image layout
        RelativeLayout litebannerlayout=(RelativeLayout) this.findViewById(R.id.accueil_litebannerlayout);
    //change its parameters (width, height, leftMargin, topMargin)
        RelativeLayout.LayoutParams params=new RelativeLayout.LayoutParams(myLayoutWidthAndHeight,myLayoutWidthAndHeight);
        params.setMargins(-myCroppedMargin, -myCroppedMargin, 0,0);
        litebannerlayout.setLayoutParams(params);

Arghhh。它有效......

您可以使用此示例代码将imageView移出屏幕,或者基于百分比或像素数。此代码也可以适用于将橡胶/横幅放在顶部,左下角,右下角。

好的,让我们继续讨论其他事情......