在另一个imageView上添加imageView会导致底部调整大小。如何防止?

时间:2012-05-18 08:01:46

标签: android layout imageview

我有以下问题: 在我的布局xml我有相对布局,其中放置了一个ImageView(从app / res文件夹中绘制,绘制)。

我需要以编程方式将另一个ImageView(与app资源中的另一个drawable)完全添加到与初始相同的位置并在其上执行动画。

我几乎成功了,添加了一个带有新drawable的新ImageView和从初始ImageView中获取的布局参数,并在其上执行动画,但最初的ImageView(新增加的吼叫)变得越来越小 - 自己调整大小理由(其他孩子都可以)。

如何防止这种情况?两个图像的宽度和高度完全相同,我需要保持不变... 提前谢谢。

P.S。更新问题。

> <RelativeLayout> .... ... ... <ImageView deck1 > centerverticaly and
> leftof(other UI component) - this is the initial imageview and
> represents deck full of cards.... ... <ImageView deck2>
> centerverticaly and rightof(other UI component) - this is the second
> deck where the cards should be opened.... ... </RelativeLayout>

现在我需要从deck1拿一张卡片并使用动画将它放在deck2上。 所以我做了以下几点:

if(animatingView==null){
ImageView animatingview = new ImageView(this.context);
animatingView.setImageBitmap(R.drawable.backofthecard);
animatinView.setLayoutParams(deck1.getLayoutParams);
RelativeLayout.add(animatingView);
}else{
animatingView.setVisible(visible);
}
animatingView.startAnimation(deckTranslateAnimation);

.
.
..
OnAnimationEnd{animatingView.setVisible(invisible)}

所有drawables都是相同的(宽度和高度),所以我希望不会出现任何问题,但是当animatingView添加到Layout中时 - deck1变得更小,自行调整大小,它仍然可以点击并显示但是更小(并且因为它变小了所有依赖它的其他孩子,改变他们的位置......)

抱歉,我没有使用真正的代码和xml,但是现在我不在他们面前......

编辑:Solved.Here是代码:

if(animatingView==null){
                animatingView = new ImageView(context);
                animatingView.setImageResource(R.drawable.back);
                RelativeLayout.LayoutParams params = new LayoutParams(animatingView.getDrawable().getMinimumWidth(), animatingView.getDrawable().getMinimumHeight());
                params.addRule(RelativeLayout.ALIGN_LEFT, this.getDeckView().getCardView().getId());
                params.addRule(RelativeLayout.ALIGN_TOP, this.getDeckView().getCardView().getId());
                animatingView.setLayoutParams(params);

2 个答案:

答案 0 :(得分:2)

你能展示你正在使用的代码吗? 无论如何,我认为最好使用FrameLayout来显示可能相互重叠的视图。我没有看到代码的第一个想法是用FrameLayout包装现有的ImageView。然后,当您想以编程方式添加新的ImageView时,可以通过将其添加为FrameLayout的子项来实现。 FrameLayout在不同的图层中呈现视图,因此当您使用新添加的视图执行某些操作时,旧视图不应受到影响。

[更新]

我只是尝试将imageview放在另一个imageview上。无论如何,我似乎没有解决重叠图像的大小问题。这是我的实施。请尝试这个,看看它是否有效。你可能不得不改变一些变量。

的.java

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.animation.Animation;
import android.view.animation.Animation.AnimationListener;
import android.view.animation.AnimationUtils;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.RelativeLayout;

public class ImageStackActivity extends Activity {

    Context context;
    RelativeLayout relativeLayout;
    ImageView deck1;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        context = this.getApplicationContext();
        deck1 = (ImageView)findViewById(R.id.deck1);
        Button button = (Button)findViewById(R.id.button);
        Button button2 = (Button)findViewById(R.id.button2);
        relativeLayout = (RelativeLayout)findViewById(R.id.relative_layout);

        button.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                ImageView img = new ImageView(context);
                img.setBackgroundResource(R.drawable.photo3);
                img.setLayoutParams(deck1.getLayoutParams());
                relativeLayout.addView(img);
                Animation anim = AnimationUtils.loadAnimation(context, android.R.anim.fade_in);
                img.startAnimation(anim);
            }
        });
        button2.setOnClickListener(new OnClickListener() {          
            @Override
            public void onClick(View v) {
                if(relativeLayout.getChildCount()>2){
                    relativeLayout.removeViewAt(2);
                }
            }
        });
    }
}

main.xml中

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/relative_layout"
    >
    <ImageView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content" 
      android:id="@+id/deck1"
      android:src="@drawable/photo2"
    />
    <ImageView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content" 
      android:id="@+id/deck2"
      android:src="@drawable/photo3"
      android:layout_toRightOf="@id/deck1"
    />
</RelativeLayout>
<Button 
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" 
    android:id="@+id/button"
    android:text="add image"
    />
<Button 
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" 
    android:id="@+id/button2"
    android:text="clear"
    />
</LinearLayout>

答案 1 :(得分:0)

我遇到了同样的问题,我通过缩放其他图片解决了这个问题,这会对你有帮助,告诉我你是否在这段代码中找到了任何好处:)

public Bitmap decodeFile(String path, Integer size){
        File f = new File(path);
     try {
         //Decode image size
         BitmapFactory.Options o = new BitmapFactory.Options();
         o.inJustDecodeBounds = true;
         BitmapFactory.decodeStream(new FileInputStream(f),null,o);

         //The new size we want to scale to
         if(size == 0)
          size = 70;

         //Find the correct scale value. It should be the power of 2.
         int scale=1;
         while(o.outWidth/scale/2>=size && o.outHeight/scale/2>=size)
             scale*=2;

         //Decode with inSampleSize
         BitmapFactory.Options o2 = new BitmapFactory.Options();
         o2.inSampleSize=scale;
         return BitmapFactory.decodeStream(new FileInputStream(f), null, o2);
     } catch (FileNotFoundException e) {}
     return null;
       }