从左侧屏幕外部移动图像到右侧屏幕外部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的标签。