!解决了 !
由于某种原因,API19 编程式的纯 java 动画在使用绝对设置(如 setX() 或 setY())时效果不佳。专家们不妨看看这个。 API19 更喜欢在布局参数侧使用边距。
以下过程适用于android 4.4.2。当然,它适用于其他版本的上下版本,但你必须改变你的思维方式。您必须使用布局参数以编程方式放置图像,因此请更改:
iv.setX(50);
iv.setY(0);
to
lparam.setMargins(50, 0, 0, 0);
iv.setLayoutParams(lparam);
iv.requestLayout();
您还可以使用(对于 API >=17)
lparam.setMarginStart(50); // for x pos
lparam.setMarginEnd(0); // for y pos
您必须调用“requestLayout()”以确保在将视图添加到父级 (fl) 时提交布局上的新更改。
最后,我错误地使用了“LayoutParams”而不是“FrameLayout.LayoutParams”。这与问题无关,也不会影响它,但这是定义它的正确方法,因此请更改:
LayoutParams lparam = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
to
FrameLayout.LayoutParams lparam = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT, FrameLayout.LayoutParams.WRAP_CONTENT);
任何 API 的完整工作代码是:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Common common = new Common(this, this);
FrameLayout fl = new FrameLayout(this);
ImageView iv = new ImageView(this);
FrameLayout.LayoutParams flparam = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT);
FrameLayout.LayoutParams lparam = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT, FrameLayout.LayoutParams.WRAP_CONTENT);
iv.setImageBitmap(common.newImage("100x100.png", ImageFormat.RGB565).getBitmap());
lparam.setMarginStart(50);
lparam.setMarginEnd(0);
iv.setLayoutParams(lparam);
iv.requestLayout();
fl.addView(iv);
this.setContentView(fl, flparam);
AlphaAnimation animation = new AlphaAnimation(0, 1);
animation.setDuration(3000);
iv.setAnimation(animation);
iv.startAnimation(animation);
}