2012-07-13 70 views
1

我需要将翻译动画应用于ImageView,此ImageView定位在某个地方,我需要将它设置为屏幕中心的动画。这是我的translate xml代码,但它不会将ImageView设置为中心。Android TranslateAnimation到中心

<?xml version="1.0" encoding="utf-8"?> 
<set xmlns:android="http://schemas.android.com/apk/res/android" > 

    <translate 
     android:duration="500" 
     android:fromXDelta="0%p" 
     android:fromYDelta="0%p" 
     android:toXDelta="50%p" 
     android:toYDelta="50%p" /> 
</set> 

这是XML,其中ImageView的是:

<?xml version="1.0" encoding="utf-8"?> 

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/WelcomeLayout" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:background="@drawable/welcome_background" 
android:orientation="vertical" > 

<ImageView 
    android:id="@+id/welcome_innovaLogo" 
    android:layout_width="300dp" 
    android:layout_height="150dp" 
    android:layout_marginLeft="5dp" 
    android:layout_marginRight="1dp" 
    android:layout_marginTop="5dp" 
    android:contentDescription="@string/welcome_innovaLogoString" 
    android:scaleType="fitXY" 
    android:src="@drawable/innova_logo" > 
</ImageView> 

<TextView 
    android:id="@+id/welcome_innovaInfo" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignTop="@+id/welcome_innovaLogo" 
    android:layout_marginTop="20dp" 
    android:layout_toRightOf="@+id/welcome_innovaLogo" 
    android:text="@string/welcome_innovaInfoString" 
    android:textColor="#9acd32" 
    android:textStyle="bold" /> 

<TextView 
    android:id="@+id/welcome_innovaHeader" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentRight="true" 
    android:layout_alignTop="@+id/welcome_innovaInfo" 
    android:layout_marginRight="20dp" 
    android:text="@string/welcome_innovaHeaderString" 
    android:textColor="#9acd32" 
    android:textSize="20sp" 
    android:textStyle="italic" /> 

<ListView 
    android:id="@+id/welcome_commandsListView" 
    android:layout_width="200dp" 
    android:layout_height="wrap_content" 
    android:layout_below="@+id/welcome_innovaLogo" 
    android:layout_marginTop="40dp" 
    android:cacheColorHint="#00000000" /> 

<LinearLayout 
    android:id="@+id/welcome_loadingLayout" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_centerHorizontal="true" 
    android:layout_marginTop="450dp" 
    android:orientation="horizontal" 
    android:visibility="invisible" > 

    <ProgressBar 
     style="?android:attr/progressBarStyleSmall" 
     android:layout_width="50dp" 
     android:layout_height="50dp" 
     android:indeterminateDrawable="@drawable/progress_large" /> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="50dp" 
     android:layout_marginLeft="10dp" 
     android:gravity="center_vertical" 
     android:text="Loading Data..." 
     android:textColor="@color/green_color" 
     android:textSize="19sp" > 
    </TextView> 
</LinearLayout> 

<!-- 
    <fragment 
    android:id="@+id/welcome_facebookFragment" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_below="@+id/welcome_innovaLogo" 
    android:layout_marginLeft="20dp" 
    android:layout_marginTop="?android:attr/actionBarSize" 
    android:layout_toRightOf="@+id/welcome_commandsListView" 
    class="innovaEgypt.com.Welcome.FacebookFragment" > 
</fragment> 
--> 

+0

“但它不会将ImageView设置为中心动画。”它做什么呢? – FoamyGuy 2012-07-13 18:33:41

+0

这也是动画,但不是中心! – 2012-07-13 18:35:53

+1

请发布ImageView所在的布局xml文件。 – 2012-07-13 18:52:07

回答

3

看一看this问题。我给出了类似的答案,但动画不是来自xml,而是来自代码。希望能帮助到你。


编辑:

你的问题是,动画没有考虑到图像的尺寸。动画以您的ImageView的原点坐标为中心。

我仍然建议我的解决方案。

我试了我链接的答案,它的工作原理中的代码。只需复制此功能:

private void moveViewToScreenCenter(View view) 
{ 
    RelativeLayout root = (RelativeLayout) findViewById(R.id.WelcomeLayout); 
    DisplayMetrics dm = new DisplayMetrics(); 
    this.getWindowManager().getDefaultDisplay().getMetrics(dm); 
    int statusBarOffset = dm.heightPixels - root.getMeasuredHeight(); 

    int originalPos[] = new int[2]; 
    view.getLocationOnScreen(originalPos); 

    int xDest = dm.widthPixels/2; 
    xDest -= (view.getMeasuredWidth()/2); 
    int yDest = dm.heightPixels/2 - (view.getMeasuredHeight()/2) - statusBarOffset; 

    TranslateAnimation anim = new TranslateAnimation(0, xDest - originalPos[0] , 0, yDest - originalPos[1]); 
    anim.setDuration(1000); 
    anim.setFillAfter(true); 
    view.startAnimation(anim); 
} 

,并把它传递您的视图参数:

ImageView img1 = (ImageView) findViewById(R.id.welcome_innovaLogo); 
    moveViewToScreenCenter(img1); 

如果图像仍然消失了,也许是因为它是你的其他部件的后面,像ListView。如果是这样的话,重新构建您的xml布局,定义ImageView最后,在Listview之后(只需剪切并粘贴ImageView)。

+0

它没有工作:(,当动画开始时ImageView消失。 – 2012-07-13 18:46:50

+0

看到更新。 – 2012-07-13 19:14:03

1

尝试在此代码中添加延迟。

new android.os.Handler().postDelayed(
        new Runnable() { 
         public void run() { 
          moveViewToScreenCenter(view); 
         } 
        }, 
       1000); 
0

对于未来的更新...

应用视图属性动画移动部件的位置。这种情况下的图像视图

int layoutWidth = parentLayout.getWidth(); 

layoutWidth = ((int) layoutWidth/2) - (imageView.getWidth()) ; 

Log.d(TAG, " position - " + layoutWidth); 

imageView.animate() 
    .translationX(-layoutWidth) 
    .translationY(0) 
    .setDuration(500) 
    .setInterpolator(new LinearInterpolator()) 
    .start();