6

Próbuję użyć TranslateAnimation na ImageView, ale ImageView nie porusza się w ogóle. Nic się nie dzieje, gdy prowadzę projekt. Oto mój kod:Tłumaczenie Animacja na ImageView nie działa

import android.app.Activity; 
import android.os.*; 
import android.view.animation.AccelerateInterpolator; 
import android.view.animation.TranslateAnimation; 
import android.widget.ImageView; 

public class MainActivity extends Activity { 
ImageView a; 
TranslateAnimation pengesat; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    a = (ImageView) findViewById(R.id.imageView3); 
    pengesat = new TranslateAnimation(0.0f, 1.0f, 0.0f, 0.0f); 
    pengesat.setDuration(5000); 
    pengesat.setRepeatCount(1); 
    pengesat.setInterpolator(new AccelerateInterpolator()); 
    Thread myThread= new Thread(new Runnable(){ 
     @Override 
     public void run() { 
      a.post(new Runnable() { 
       @Override 
       public void run() { 
        a.startAnimation(pengesat); 
       } 
      }); 
     } 
    }); 
    myThread.start(); 
    } 
} 

I tu jest mój kodu xml:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:id="@string/layout" 
android:paddingBottom="@dimen/activity_vertical_margin" 
android:paddingLeft="@dimen/activity_horizontal_margin" 
android:paddingRight="@dimen/activity_horizontal_margin" 
android:paddingTop="@dimen/activity_vertical_margin" 
tools:context="com.ennio.lojaprove.MainActivity"> 

<ImageView 
    android:id="@+id/img" 
    android:src="@drawable/bg" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:adjustViewBounds="true" 
    android:scaleType="centerCrop" 
    android:layout_alignParentBottom="true" 
    android:layout_alignParentTop="true" 
    android:layout_alignParentRight="true" 
    android:layout_alignParentEnd="true" /> 
    <ImageView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/imageView" 
    android:src="@drawable/border" 
    android:scaleType="centerCrop" 
    android:layout_alignTop="@+id/img" 
    android:layout_centerHorizontal="true" /> 
    <ImageView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/imageView2" 
    android:src="@drawable/border" 
    android:scaleType="centerCrop" 
    android:layout_alignBottom="@+id/img" 
    android:layout_centerHorizontal="true" /> 
    <ImageView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/imageView3" 
    android:src="@drawable/pengesa" 
    android:layout_above="@+id/imageView2" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentStart="true" /> 

    </RelativeLayout> 

Co robię źle?

Odpowiedz

2

Nie trzeba uruchamiać animacji z innego wątku. Więc po prostu go uruchomić po to zainicjowany

a = (ImageView) findViewById(R.id.imageView3); 
pengesat = new TranslateAnimation(0.0f, 1.0f, 0.0f, 0.0f); 
pengesat.setDuration(5000); 
pengesat.setRepeatCount(1); 
pengesat.setInterpolator(new AccelerateInterpolator()); 
a.startAnimation(pengesat); 
+0

Nie robi żadnej różnicy: /, to używane do pracy bez wątku, ale miałem " pominięty błąd 30/31/32 klatek. Dlatego próbowałem uruchomić animację z innego wątku: – Eae

+0

Więc twoje wartości są za małe? Spróbuj tego: 'pengesat = new TranslateAnimation (0.0f, 100.0f, 0.0f, 100.0f);' – mohax

+0

Tak, działało bez wątek. Ale ramki pomijają. Próbowałem uruchamiać animację z wątku z nowymi wartościami, "ImageView" w ogóle się nie poruszał – Eae

0

enter image description here

Można użyć obsługi robić pracować

+0

Próbowałem, zadziałało. Wygląda jednak na to, że ramki pomijają, chociaż w moim logo nie ma mowy o pomijaniu ramek:/co może być problemem? To nie jest płynna animacja, taka jak ta – Eae

+0

Może możesz spróbować uruchomić animację w metodzie onWindowFocusChanged(). Metoda będzie działać, gdy aktywność jest aktywna, chociaż przyczyna początkowa statusu okna zmieniła się. – caowenhua

+0

I robisz to większe niż api 13. Możesz również użyć view.animate() .... (animacja, którą chcesz zagrać) .setDuration (5000) .start(); – caowenhua