2012-05-20 26 views
1

我想要做一個動畫,一個從右向左移動的波形。 我做了一個波的圖像,其中它的起點與終點重合在android中循環顯示一幀圖像

enter image description here

我想要做一個動畫在波的舉動,與animationlist我將需要超過400幀和大小的應用程序將長大...

我需要一種方法來移動這個唯一的框架從右到左,任何幫助?

回答

0

您可以創建自己的Drawable實現Animatable,並讓圖像從右向左移動。這實際上是一件非常有用的事情。但是,您將無法從XML中指定它,您必須構建它並以編程方式進行設置。

+0

沒有他想要的東西k-ballo –

+0

請堅持英語。你可以通過創建一個擴展'Drawable'的類來創建自己的自定義drawable,並實現'Animatable'。然後,您將自己完成繪圖,每次都處於不同的位置,以從單個輸入圖像生成選取框動畫。 –

+0

當我移動圖像的位置時,我該如何做到這一點,它開始在另一邊? –

0

首先,你必須加倍你的圖像src的大小,有2個波沒有一個。 接下來,你必須玩你的imageview的邊框,你必須適合只有一個波。這是線索。

注意你的圖像尺寸,特別是寬度。

的動畫,使用:

<?xml version="1.0" encoding="utf-8"?> 
<translate 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:fromXDelta="0%" 
    android:toXDelta="-50%" 
    android:fromYDelta="0%" 
    android:toYDelta="0%" 
    android:duration="500" 
    android:repeatCount="1000" 
    android:interpolator="@android:anim/linear_interpolator" 
    android:zAdjustment="top" /> 

比如,你可以將其命名爲RES /動畫/ wave.xml

類(活動):

... 
    Animation anim = AnimationUtils.loadAnimation(this, R.anim.wave); 
    anim.setRepeatMode(Animation.Infinite); 
    animatedIm = (ImageView) findviewbyid(<your-id>) 
    animatedIm.setAnimation(anim); 

你可能需要玩imageview的大小,有一個連續的波動

0

你甚至可以創建一個GIF和玩這個GIF: 下面是代碼:

類MainActivity:

import android.app.Activity; 
import android.os.Bundle; 

public class MainActivity extends Activity { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 

     setContentView(new MYGIFView(MainActivity.this)); 
    } 

} 

類MYGIFView:

import java.io.InputStream; 

import android.content.Context; 
import android.graphics.Canvas; 
import android.graphics.Color; 
import android.graphics.Movie; 
import android.view.View; 

class MYGIFView extends View { 

    Movie movie, movie1; 
    InputStream is = null, is1 = null; 
    long moviestart; 

    public MYGIFView(Context context) { 
     super(context); 

     // Provide your own gif animation file 

     is = context.getResources().openRawResource(R.drawable.animation); 
     movie = Movie.decodeStream(is); 

    } 

    @Override 
    protected void onDraw(Canvas canvas) { 

     canvas.drawColor(Color.WHITE); 
     super.onDraw(canvas); 
     long now = android.os.SystemClock.uptimeMillis(); 
     System.out.println("now=" + now); 
     if (moviestart == 0) { // first time 
      moviestart = now; 

     } 
     System.out.println("\tmoviestart=" + moviestart); 
     int relTime = (int) ((now - moviestart) % movie.duration()); 
     System.out.println("time=" + relTime + "\treltime=" + movie.duration()); 
     movie.setTime(relTime); 
     movie.draw(canvas, this.getWidth()/2 - 20, this.getHeight()/2 - 40); 
     this.invalidate(); 
    } 
} 

裏面的文件夾繪製的將是你的GIF圖片。