从左侧屏幕外部移动图像到右侧屏幕外部Android
问题描述:
我有一个cutstom DialogFragment
向用户显示加载消息。对于加载消息图像,我创建了一个从屏幕左侧(从屏幕外部开始)到屏幕右侧(在屏幕之外完成)的动画。要做到这一点,我想开始对y=-imageWith
和完成的动画y=imageWith+dialogWith
的:从左侧屏幕外部移动图像到右侧屏幕外部Android
public class MensajeDialogFragment extends DialogFragment {
TextView mTvMensaje;
TextView mTvTitulo;
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
LayoutInflater inflater = getActivity().getLayoutInflater();
ImageView loadingImage = (ImageView) dialogView.findViewById(R.id.ivBus);
View dialogView = inflater.inflate(R.layout.layout_mensaje_dialog, null);
TextView mTvTitulo = (TextView) dialogView.findViewById(R.id.tvTitulo);
TextView mTvMensaje = (TextView) dialogView.findViewById(R.id.tvMensaje);
mTvTitulo.setText(getArguments().getString(getString(R.string.bundle_titulo), ""));
mTvMensaje.setText(getArguments().getString(getString(R.string.bundle_mensaje), ""));
builder.setView(dialogView);
TranslateAnimation izqADerAnimacion = new TranslateAnimation(-loadingImage.getWidth(), dialogView.getWidth()+loadingImage.getWidth(), 0, 0);
izqADerAnimacion.setDuration(3500);
izqADerAnimacion.setRepeatCount(Animation.INFINITE);
loadingImage.startAnimation(izqADerAnimacion);
return builder.create();
}
}
但由于某些原因,loadingImage.getWidth()
和dialogView.getWidth()
正在返回0
。我可以做什么来解决这个问题,而不用硬编码的开始和结束位置?
答
loadingImage.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
if (Build.VERSION.SDK_INT > 16)
loadingImage.getViewTreeObserver().removeOnGlobalLayoutListener(this);
else
loadingImage.getViewTreeObserver().removeGlobalOnLayoutListener(this);
//do animation
}
});
希望这个作品
答
TranslateAnimation izqADerAnimacion =
new TranslateAnimation(-loadingImage.getWidth(),
dialogView.getWidth()+loadingImage.getWidth(), 0, 0);
在你的代码中提到上面可以直接给予一定的价值像
TranslateAnimation animation = new TranslateAnimation(-970.0f, 2000.0f, 0.0f, 0.0f);
它可以很好地在Nexus 9的标签。