2013-02-14 9 views
1

我爲圖片製作了一個簡單的動畫,並在圖片上設置了事件OnClick來製作敬酒。問題是我使圖像開始在onCreate上進行動畫,並且我設置了要點擊的圖像並啓動了烘烤,但問題在於圖像不可點擊,但是如果我按下原始位置圖像,麪包開始(圖像不與動畫移動)如何使動畫在Android中可點擊

THX對您有所幫助

這是動畫文件夾中的動畫代碼(translate.xml)

<?xml version="1.0" encoding="utf-8"?> 
<set xmlns:android="http://schemas.android.com/apk/res/android" 
    android:interpolator="@android:anim/linear_interpolator"> 
    <translate 
     android:fromXDelta="-80%p" 
     android:toXDelta="80%p" 
     android:duration="20000" 
     android:repeatCount="100" 
     android:repeatMode="restart" 



     /> 


</set> 

這是活動分類

package com.example.animatest; 

import android.app.Activity; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.view.animation.Animation; 
import android.view.animation.AnimationUtils; 
import android.widget.ImageView; 
import android.widget.Toast; 

public class MainActivity extends Activity { 

private ImageView image01; 

private long aefe; 
private ImageView image1; 
private ImageView image2; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    image01 = (ImageView) findViewById(R.id.imageView1); 

    final Animation animTranslate1 = AnimationUtils.loadAnimation(this, 
      R.anim.translate); 

    image01.startAnimation(animTranslate1); 

    image01.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View view) { 

      Toast.makeText(MainActivity.this, "hello", Toast.LENGTH_SHORT) 
        .show(); 

     } 
    }); 

} 

} 
+0

你的意思是:'但如果我按下圖像的原始位置,開始吐司(圖像不隨動畫移動)'你能添加一些截圖嗎?它很難理解。 – 2013-02-14 18:29:54

+0

我的意思是,如果點擊圖片的吐司將開始,但如果我點擊圖片時,它正在做動畫什麼都沒有發生 – 2013-02-14 18:32:13

+0

要更清楚你的圖像做動畫從左到右在屏幕我想用戶,如果他點擊圖片時,它正在做動畫吐司將開始 – 2013-02-14 18:34:32

回答

2

在整個動畫過程中,您的視圖將保留在舊的位置(動畫剛啓動時的位置)。它只是在另一個地方繪製。您必須在動畫結束後移動動畫視圖:

將動畫註冊到動畫。 http://developer.android.com/reference/android/view/animation/Animation.AnimationListener.html

在您的onAnimationEnd實現中,修改您的Activity的佈局,使其類似於動畫的最終狀態/佈局。您的評論後

更新:

我看到這樣做的唯一方法是在Java代碼中創建自己的自定義動畫和實現您的自定義動畫的「保護無效applyTransformation(浮動interpolatedTime,變換T)」方法。例如,在我們的應用程序,我們有一個動畫,實際上移動一個查看四周而不是隻是它在不同的位置。例如。下面是增加或減小的視圖的實際高度的動畫的示例:

public class ViewHeightAnimation extends Animation { 
    private final View view; 
    private final float diffHeight; 
    private final int startHeight; 

    public ViewHeightAnimation(View view, float diffHeight, int startHeight) { 
     this.view = view; 
     this.diffHeight = diffHeight; 
     this.startHeight = startHeight; 

     setDuration(200); 
     setInterpolator(new AccelerateDecelerateInterpolator()); 
    } 

    @Override 
    protected void applyTransformation(float interpolatedTime, Transformation t) { 
     android.view.ViewGroup.MarginLayoutParams layoutParams = (android.view.ViewGroup.MarginLayoutParams)view.getLayoutParams(); 
     layoutParams.height = Math.round(startHeight + (diffHeight * interpolatedTime)); 
     view.setLayoutParams(layoutParams); 
    } 

    @Override 
    public boolean willChangeBounds() { 
     return true; 
    } 
} 

你的動畫將是不同的,但是將被使用「getLayoutParams()」和「setLayoutParams()」,以及對修改視圖的(ImageView的)位置並適當地更改layoutParams.topMargin和layoutParams.leftMargin。

如前所述,如果您不關心Android 2.x或更低版本,使用ObjectAnimator(3.0或更高版本)或ViewPropertyAnimator(3.1或更高版本)是更好的解決方案。

讓我知道這是否對你有幫助。

+0

thx但這不是我的意思,我不想onAnimationEnd waht我想要的是當動畫開始我可以點擊動畫 – 2013-02-14 20:21:25

+0

我更新了我的答案上面。希望這會有所幫助:) – 2013-02-14 21:48:31

+0

謝謝你,但我必須在這裏但代碼(類) 我很抱歉,但我沒有任何想法這 謝謝你任何方式 – 2013-02-15 00:23:21

0

嘗試這樣的:

final Animation animTranslate1 = AnimationUtils.loadAnimation(this,R.anim.translate); 
animTranslate1.setFillAfter(true); 
image01.startAnimation(animTranslate1); 

如果不工作,那麼你就必須使用新的屬性動畫框架(其中指出在回答你以前重複的問題)

See here to learn about it

0

您對imageView進行動畫處理的方式只是移動其外觀,所以實際上您的imageView仍處於舊位置。用這種類型的動畫不是一種簡單的方法來做你想做的。您應該考慮使用ObjectAnimators ...

相關問題