2012-03-17 24 views
5

Bilgisayarımdaki emülatörde scrollBy yöntemini çağırdığımda ancak Android telefonumda yapmayacağımda, ScrollView ile doğru bir kaydırma yapacağım bir Android programım var. İşte Android ScrollView sınıfında smoothScrollBy yöntemini kullanma

kodudur: Ayrıca

public class RecordGameActivity3 extends Activity { 
ScrollView myView; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.recordgame3); 
    myView = (ScrollView)findViewById(R.id.scrollView1); 

} 

public void addPlayer(View v) 
{ 
    //Removed non-related code 

    myView.smoothScrollBy(0, 50); 
} 
} 

, çalışmıyor düzenli scrollBy yöntemi veya scrollTo yöntemi (bu da bilgisayarda çalışmıyor çünkü ben sadece doğru olduğunu kullanmıyor olabilir rağmen). Neyin yanlış olabileceğine dair bir fikri var mı?

DÜZENLEME:

Darrell'ın cevap olarak Sorunum beni ben olmak mümkün olacak kadar büyük kaydırma alanı olur düzeninde değişiklik yaparak bir işlev içinde benim smoothScrollBy yöntemini çağırıyordu olduğunu gösterdi kaydırılan. Görünüşe göre, bu fonksiyonu çağırırken, değişiklikler gerçekte uygulanmadı ve bu yüzden kaydırılamadı.

public class RecordGameActivity3 extends Activity { 
ScrollView myView; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.recordgame3); 
myView = (ScrollView)findViewById(R.id.scrollView1); 

// New code that listens for a change in the scrollView and then calls the scrollBy method. 
ViewTreeObserver vto = myView.getViewTreeObserver(); 
    vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { 
    public void onGlobalLayout() { 
     myView.smoothScrollBy(0, 100); 
    }}); 

} 

public void addPlayer(View v) 
{ 
    //Code that is called on an onClick listener that adds things to the ScrollView making it scrollable. 
} 
} 

cevap

8

Eğer onCreate yönteminden smoothScrollBy diyorsun:

Böylece, aşağıdaki yaptığı tavsiye kullanarak kodu değişti? Görünümler oluşturulduktan sonra, örneğin onResume'den sonra beklemeyi deneyin. (OnCreate'dan yapmaniz gerekiyorsa, bir OnGlobalLayoutListener ile görünümünüze bir ViewTreeObserver kaydedebilir ve oradan kaydırma işlemini yapabilirsiniz.)

+0

Tamam - onCreate yönteminden bunu yapmıyorum, ancak kaydırma yapmasını sağlayan bileşenleri eklerken kullandığım bir yöntemde yapıyorum. ViewTreeObserver'ı nasıl kullanabilirim? –

+0

Boşver - Nasıl olduğunu anladım. Yardımın için çok teşekkürler. –

2

Benim durumumda, bir MotionEvent.ACTION_UP olayı olduğunda ScrollView'u kaydırmam gerekiyor ScrollView'da tam olarak tetiklenir, scrollTo() çalışır, ancak smoothScrollTo() bunu yapmaz. Teşekkürler, ben şimdi anladım, bir süre çalıştıktan sonra görüntüyü düzeltmek için bir işleyici kullanın.

İlgili konular