6

Sto tentando di utilizzare un TranslateAnimation su un ImageView, ma lo ImageView non si muove affatto. Non succede nulla quando eseguo il progetto. Ecco il mio codice:TranslateAnimazione su un ImageView non funziona

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(); 
    } 
} 

Ed ecco il mio codice di 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> 

Che cosa sto facendo di sbagliato?

risposta

2

Non è necessario avviare l'animazione da un altro thread. Quindi basta avviarlo dopo che è stato inizializzato

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

non ha fatto alcuna differenza: /, ha usato per lavorare senza filo, ma ho avuto " "Salta 30/31/32 frame" errore. Ecco perché ho provato ad avviare l'animazione da un altro thread – Eae

+0

Quindi può essere tuo valori troppo piccolo .. Prova questo: 'pengesat = new TranslateAnimation (0.0f, 100.0f, 0.0f, 100.0f);' – mohax

+0

Sì, ha funzionato senza? filo. Ma i frame saltano. Ho provato ad avviare l'animazione dal thread con i nuovi valori, il 'ImageView' non si è mosso per niente – Eae

0

enter image description here

È possibile utilizzare gestore per fare si lavora

+0

L'ho provato, ha funzionato. Ma sembra che i frame saltino, anche se nel mio logo non dice che i frame saltano:/quale potrebbe essere il problema? Non è un'animazione fluida come questa – Eae

+0

Forse puoi provare ad avviare l'animazione nel metodo suWindowFocusChanged(). Il metodo funzionerà quando l'attività è attiva sebbene il motivo di origine sia lo stato della finestra modificato. – caowenhua

+0

E lo fai più grande di api 13. Puoi anche usare view.animate() .... (quale animazione vuoi suonare) .setDuration (5000) .start(); – caowenhua

Problemi correlati