2011-11-15 47 views
0

在下面的例子中,有一個帶有輸入字段和按鈕的佈局。用戶將輸入一個介於0到10之間的數字,並且鰭狀肢將從屏幕10開始動畫到輸入的數字。你可以循環根據用戶輸入的鰭狀肢動畫嗎?

如果我在onClick上註釋掉(int i = 10; .....; i - ){,則每次單擊該按鈕時屏幕都會滑動。如果我將屏幕中的for循環放入屏幕中,不會滑動每個屏幕。循環速度過快,動畫難以趕上。

是否有可能把它因此,如果您例如輸入2腳蹼會去:

翻轉10

滑蓋動畫出現

擋板9

滑蓋動畫出現

翻轉器8 .....

主要活動:

package com.jk.flippertest; 

import com.jk.flippertest.R; 

import android.app.Activity; 
import android.content.Context; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.view.ViewGroup.LayoutParams; 
import android.view.animation.Animation; 
import android.view.animation.AnimationUtils; 
import android.widget.Button; 
import android.widget.LinearLayout; 
import android.widget.TextView; 
import android.widget.Toast; 
import android.widget.ViewFlipper; 

public class FlipperTestActivity extends Activity { 
/** Called when the activity is first created. */ 
private Animation slideRightIn; 
private Animation slideRightOut; 
private ViewFlipper viewFlipper; 
TextView loopNumber; 
int loopValue; 
Button goBtn; 
ViewFlipper fSpace; 
LayoutInflater inflater; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    loopNumber = (TextView)findViewById(R.id.editText1); 
    goBtn = (Button)findViewById(R.id.button1);  

    fSpace = (ViewFlipper)findViewById(R.id.viewFlipper1); 
    inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

    for (int i=0;i<11;i++){ 
     TextView tvi = new TextView(this); 
     tvi.setText("Flipper "+i); 
     tvi.setTextSize(50); 
     tvi.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT)); 

     LinearLayout lli = new LinearLayout(this); 
     lli = new LinearLayout(this); 
     lli.setOrientation(LinearLayout.VERTICAL); 
     lli.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT)); 
     lli.addView(tvi); 

     fSpace.addView(lli); 
     } 

     viewFlipper = (ViewFlipper)findViewById(R.id.viewFlipper1); 
     slideRightIn = AnimationUtils.loadAnimation(this, R.anim.slide_right_in); 
     slideRightOut = AnimationUtils.loadAnimation(this, R.anim.slide_right_out); 

     goBtn.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View arg0) { 
       // TODO Auto-generated method stub 

       Toast.makeText(getBaseContext(), "Value is "+loopNumber.getText(), Toast.LENGTH_LONG).show(); 
       for(int i=10;i>=Integer.parseInt(loopNumber.getText().toString());i--){ 
       viewFlipper.setInAnimation(slideRightIn); 
       viewFlipper.setOutAnimation(slideRightOut);      
       viewFlipper.showPrevious(); 
       } 
      } 
     }); 

} 

}

主要佈局:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" > 
    <EditText 
     android:id="@+id/editText1" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" android:hint="Enter numb between 0 to 10."> 
     <requestFocus /> 
    </EditText> 

    <Button 
     android:id="@+id/button1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Go" /> 

    <ViewFlipper 
     android:id="@+id/viewFlipper1" 
     android:layout_width="match_parent" 
     android:layout_height="fill_parent" > 
    </ViewFlipper> 

</LinearLayout> 

slide_right_in.xml

<?xml version="1.0" encoding="utf-8"?> 
<set xmlns:android="http://schemas.android.com/apk/res/android"> 
    <translate android:fromXDelta="-100%p" android:toXDelta="0" android:duration="800"/> 
</set> 

slide_right_out.xml

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

<set xmlns:android="http://schemas.android.com/apk/res/android"> 
    <translate android:fromXDelta="0" android:toXDelta="100%p" android:duration="800"/> 
</set> 

+0

你可以發佈slide_right_out.xml的代碼嗎? – joshhendo

回答

0

爲什麼你玩循環,只需使用計時器,並放置一段時間(1秒..),並在那只是改變你的意見(幻燈片)。

編輯:

CountDownTimer

Updating the UI from a Timer

+0

謝謝dmon,但我不確定計時器是如何工作的。我會嘗試找到一些定時器和翻轉視圖的例子。如果有人可以附上一些示例代碼,讓我開始,將不勝感激。 – John

+0

看看我編輯的答案,你可以找到如何使用計時器的鏈接。 – user370305

0

感謝您的鏈接,但我看不出如何使用定時器。我在處理程序中找到了一些例子並使用它。下面的代碼似乎工作,但不知道如果我得到它100%正確。

  @Override 
      public void onClick(View arg0) { 
       // TODO Auto-generated method stub 
       loopToNumber(); 
      } 
     }); 
} 
protected void loopToNumber() { 
    // TODO Auto-generated method stub 
    new Thread() { 
     public void run() { 
      for(int i=10;i>=Integer.parseInt(loopNumber.getText().toString());i--){ 
      try { 
       Thread.sleep(1600); 
       } catch (InterruptedException e) { 
       } 
      delayHandler.sendEmptyMessage(0); 
      } 
     } 
    }.start(); 
} 
private Handler delayHandler = new Handler() { 
    public void handleMessage(Message msg) { 
     super.handleMessage(msg); 
     viewFlipper.setInAnimation(slideRightIn); 
     viewFlipper.setOutAnimation(slideRightOut);      
     viewFlipper.showPrevious(); 
    } 
}; 

相關問題