我有以下问题: 在我的布局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);
答案 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;
}