0

У меня есть требование, когда мне нужно поворачивать изображение и складывать 3 изображения друг на друга. enter image description hereКак создать штабелируемые изображения в android?

<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" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    android:id="@+id/rellay" 
    tools:context=".MainActivity" > 

    <com.example.stackableimages.ImageRotatedView 
     android:layout_width="100dp" 
     android:layout_height="100dp" 
     android:src="@drawable/square" 
     android:id="@+id/image" /> 
    <com.example.stackableimages.ImageRotatedView2 
     android:layout_width="100dp" 
     android:layout_height="100dp" 
     android:src="@drawable/square2" 
     android:id="@+id/image1" /> 

</RelativeLayout> 

Примечание: она должна быть уложены случайным образом. Это каждый раз, когда угол поворота отличается. Вращающаяся анимация не является решением. Я использовал относительную компоновку с тремя изображениями. Нужно ли создавать пользовательский просмотр и переопределять метод onDraw

View.setRotation помогает достичь этого, но он доступен после api 11. Мое приложение должно быть совместимо с api 7. Как достичь этого в Android. Используя приведенный выше код, я могу видеть только одно изображение, хотя я использовал относительный макет?

+0

Для этого вам понадобится FrameLayout. Я в настоящее время на мобильном устройстве, поэтому я не могу отправлять код, но Google определенно поможет вам с FrameLayouts. – James

ответ

2

Пользовательский вид:

public class MyImageView extends ImageView{ 

    private int mHeight; 
    private int mWidth; 
    private float mRotate; 

    public MyImageView(Context context) { 
     super(context); 
     initRotate(); 
    } 

    public MyImageView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     initRotate(); 
    } 

    private void initRotate(){ 
     mRotate = (new Random().nextFloat() - 0.5f) * 30; 
    } 

    @Override 
    protected void onLayout(boolean changed, int left, int top, int right, int bottom) { 
     super.onLayout(changed, left, top, right, bottom); 
     mWidth = bottom - top; 
     mHeight = right - left; 
    } 

    @Override 
    protected void onDraw(Canvas canvas) { 
     int borderWidth = 2; 
     canvas.save(); 
     canvas.rotate(mRotate, mWidth/2, mHeight/2); 
     Paint paint = new Paint(); 
     paint.setAntiAlias(true); 
     paint.setColor(0xffffffff); 
     canvas.drawRect(getPaddingLeft() - borderWidth, getPaddingTop() - borderWidth, mWidth - (getPaddingRight() - borderWidth), mHeight - (getPaddingBottom() - borderWidth), paint); 
     super.onDraw(canvas); 
     canvas.restore(); 
    } 
} 

И расположение:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:orientation="vertical" 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent" 
     > 
    <TextView 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:text="Hello World, MyActivity" 
      /> 
    <FrameLayout 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center" 
      android:padding="30dp"> 

     <com.capitan.TestRotation.MyImageView 
       android:id="@+id/image_view1" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:src="@drawable/your_drawable" 
       android:padding="10dp"/> 
     <com.capitan.TestRotation.MyImageView 
       android:id="@+id/image_view2" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:src="@drawable/your_drawable" 
       android:padding="10dp"/> 
     <com.capitan.TestRotation.MyImageView 
       android:id="@+id/image_view3" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:src="@drawable/your_drawable" 
       android:padding="10dp"/> 

    </FrameLayout> 
</LinearLayout> 

Прокладки необходимы ImageViews. Если вы забудете добавить их, ваши снимки будут обрезаны.

+0

Спасибо, отлично работает. Как насчет белой границы? Нужно ли добавлять это на Draw? – Preethi

+0

Я отредактировал onDraw(). Теперь есть белая рамка – Capitan