我有一个活动,这是它的布局
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
android:background="@drawable/main_background" >
</RelativeLayout>
main_background是一个旋转xml。每个方向都有两个main_background xml
drawable-hdpi / main_background.xml:
<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@drawable/sss" >
</rotate>
drawable-land-hdpi / main_background.xml:
<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromDegrees="90"
android:toDegrees="90"
android:drawable="@drawable/sss" >
</rotate>
所以我想使用相同的.jpg文件,但水平和垂直方向的旋转不同。例如,当方向更改为水平时,我想将可绘制的90度旋转。但这是我的结果:
垂直方向(这没有问题):
水平方向(这是我的问题):
我想要什么(没有任何调整大小):
我该怎么做?
答案 0 :(得分:0)
也许使用两个布局文件夹(layout-land,layout-port)并简单地添加
android:rotation="90"
到您的版本的布局(实际上,使用图像作为资源的视图)
您可能还需要使用layout-width和layout-height条目。
或者,您可以使用视图方法.rotatef()和.scalef();
以编程方式执行此操作。答案 1 :(得分:0)
afaik你不能在xml中做到这一点,唯一的方法是创建一个自定义类来扩展Drawable,它会对orientarion的变化作出反应,例如:
class D extends Drawable {
private Bitmap mBitmap;
private Matrix mMatrix;
private boolean mIsLandscape;
public D(Resources res, Bitmap b) {
mBitmap = b;
mMatrix = new Matrix();
mIsLandscape = res.getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE;
}
@Override
protected void onBoundsChange(Rect bounds) {
RectF src = new RectF(0, 0, mBitmap.getWidth(), mBitmap.getHeight());
RectF dst = new RectF();
if (!mIsLandscape) {
dst.set(0, 0, bounds.width(), bounds.height());
} else {
dst.set(0, 0, bounds.height(), bounds.width());
}
mMatrix.setRectToRect(src, dst, ScaleToFit.FILL);
if (mIsLandscape) {
mMatrix.postRotate(-90);
mMatrix.postTranslate(0, bounds.height());
}
}
@Override
public void draw(Canvas canvas) {
canvas.drawBitmap(mBitmap, mMatrix, null);
}
@Override
public void setAlpha(int alpha) {
}
@Override
public void setColorFilter(ColorFilter cf) {
}
@Override
public int getOpacity() {
return PixelFormat.TRANSLUCENT;
}
}