我已经设置了一个包含所有元素的相对视图(按钮,图像等...)。它是我的Android应用程序的标题页。
现在我想覆盖" LITE"整个布局的横幅,在左上角。
我的问题是" LITE"横幅图像是一种倾斜的红色橡胶,我需要在屏幕上将其topleft点设置为(-45,-45)以仅显示我想要的图像部分(附加的是源图像,这样您就可以了解哪个部分图像应该在屏幕上可见。
我已尝试使用AbsoluteLayout(RelativeLayout)以编程方式使用SetLeft和SetTop移动它,但不接受负值。
有什么想法吗?
答案 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>
<强>结果:强>
答案 1 :(得分:1)
我想与社区分享我与这件事的经历......
我的想法是在我的应用程序主屏幕的topleft角上显示一个倾斜的“LITE”橡胶。
Rod Algonquin的回答很好。然而,它并没有完全解决我的问题,因为我不得不调整图片的尺寸到屏幕高度...和屏幕方向。恶梦。即使使用相对布局,也几乎不可能,因为图像的隐藏部分从未正确对齐。
所以我必须以不同的方式工作:图片必须向左和向上移动20%。怎么做?
1)在layout.xml文件中:
配置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移出屏幕,或者基于百分比或像素数。此代码也可以适用于将橡胶/横幅放在顶部,左下角,右下角。
好的,让我们继续讨论其他事情......