7

私はたくさん検索してきましたが、私の問題の解決策を得ることができません。android:rotationこのアプリをAndroid APIのバージョン11以下に対応させたいので使えません。私の問題はこれに似たものです: Androidでビューを回転させる

私はこれをやった:

@Override
public void draw(Canvas canvas) {
    canvas.save();
    Drawable d = getDrawable();
    canvas.rotate(-10, d.getIntrinsicWidth() / 2, d.getIntrinsicHeight() / 2);
    super.draw(canvas);
    canvas.restore();
}

ImageView は、画像とテキストを配置する RelativeLayout の一部です。

しかし、画像は端が切り取られています。どうすればそれを回避できますか?

4

2 に答える 2

8

以下を追加するだけです。

android:clipChildren="false"

親にViewGroup

例えば:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
    android:layout_width="300dp"
    android:layout_height="300dp"
    android:clipChildren="false">
    <com.yourcompany.views.RotateImageView
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:background="@android:color/white"
        android:src="@drawable/ic_launcher" />
</FrameLayout>

RotateImageView:

public class RotateImageView extends ImageView {
    @Override
    public void draw(Canvas canvas) {
         canvas.save();
         int height = canvas.getHeight();
         int width = canvas.getWidth();
         canvas.rotate(45, height / 2, width / 2);
         super.draw(canvas);
         canvas.restore();
    }
}

API レベル 11 より前のクリーンなソリューションを提供するもの

于 2014-07-27T21:26:35.703 に答える
0

ImageView を FrameLayout の子ビューとして追加し、FrameLayouts の幅と高さを ImageView と同じに設定してみてください。ここで私の同様の回答をご覧ください。元の回答は、Pavlo Viazovskyy の投稿から中継されまし。お役に立てれば!

于 2013-05-09T15:34:07.513 に答える