0

我有一个活动,这是它的布局

<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

可绘制-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 度。但这是我的结果:

垂直方向(这个没有问题):

垂直方向

水平方向(这是我的问题):

水平方向

我想要什么(没有任何调整大小):

我想要的是

我怎样才能做到这一点 ?

4

2 回答 2

0

也许使用两个布局文件夹(layout-land、layout-port)并简单地添加

android:rotation="90"

到您的 -land 版本的布局(实际上,到使用图像作为资源的视图)

您可能还必须使用 layout-width 和 layout-height 条目。

或者,您可以使用视图方法 .rotatef() 和 .scalef() 以编程方式执行此操作;

于 2014-02-05T11:33:48.867 回答
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;
    }
}
于 2014-02-05T11:52:49.780 回答