2016-03-20 23 views
0

Ben şantiye yard infix2postfix yöntemi kullanarak Android için bir hesap makinesi uygulaması yazıyorum (en azından java için nispeten yeni, bu tür bir tür). Temel klavye ve işlev klavyesi arasında geçiş yapmak için bir ViewPager setim var. Her iki klavye de basit düğmeler içeren parçalardır. Stack, uyguladığım özel bir Object Stack sınıftır. Klavyeleri ilk kez kaydırarak mükemmel bir şekilde kaydırın, ancak ilk yeni hesaplamalardan sonra, ViewPager biraz gecikmeye başlar ve gerçekten nedenini anlamıyorum. Herhangi bir öneri var mı?Android ViewPager ilk tokatlama sonra animasyon labirent

public class MainActivity extends AppCompatActivity { 

private static final int NUM_PAGES = 2; 
private Fragment[] keypads = new Fragment[NUM_PAGES]; 
private ViewPager pager; 
private PagerAdapter pageradapter; 
... 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    ... 

    pager = (ViewPager) findViewById(R.id.keypadview); 
    pageradapter = new KeypadSliderAdapter(getSupportFragmentManager()); 
    pager.setAdapter(pageradapter); 
    keypads[0] = new NumericKeypad(); 
    keypads[1] = new FunctionKeypad(); 
    } 
private class KeypadSliderAdapter extends FragmentStatePagerAdapter 
{ 
    public KeypadSliderAdapter(FragmentManager fm) 
    { 
     super(fm); 
    } 
    @Override 
    public Fragment getItem(int position) 
    { 
     return keypads[position]; 
    } 
    @Override 
    public int getCount() 
    { 
     return NUM_PAGES; 
    } 
} 

baz klavye::

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" android:layout_width="match_parent" 
android:layout_height="match_parent"> 

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal" 
    > 
    <Button android:layout_height="match_parent" 
     android:layout_width="0dp" 
     android:layout_weight="1" 
     android:text="1" 
     android:onClick="keyPressed"/> 
    <Button android:layout_height="match_parent" 
     android:layout_width="0dp" 
     android:layout_weight="1" 
     android:text="2" 
     android:onClick="keyPressed"/> 
    <Button android:layout_height="match_parent" 
     android:layout_width="0dp" 
     android:layout_weight="1" 
     android:text="3" 
     android:onClick="keyPressed"/> 
    <Button android:layout_height="match_parent" 
     android:layout_width="0dp" 
     android:layout_weight="1" 
     android:text="+" 
     android:onClick="keyPressed"/> 
</LinearLayout> 
<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal" 
    > 
    <Button android:layout_height="match_parent" 
     android:layout_width="0dp" 
     android:layout_weight="1" 
     android:text="4" 
     android:onClick="keyPressed"/> 
    <Button android:layout_height="match_parent" 
     android:layout_width="0dp" 
     android:layout_weight="1" 
     android:text="5" 
     android:onClick="keyPressed"/> 
    <Button android:layout_height="match_parent" 
     android:layout_width="0dp" 
     android:layout_weight="1" 
     android:text="6" 
     android:onClick="keyPressed"/> 
    <Button android:layout_height="match_parent" 
     android:layout_width="0dp" 
     android:layout_weight="1" 
     android:text="-" 
     android:onClick="keyPressed" 
     /> 
</LinearLayout> 
<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal" 
    > 
    <Button android:layout_height="match_parent" 
     android:layout_width="0dp" 
     android:layout_weight="1" 
     android:text="7" 
     android:onClick="keyPressed"/> 
    <Button android:layout_height="match_parent" 
     android:layout_width="0dp" 
     android:layout_weight="1" 
     android:text="8" 
     android:onClick="keyPressed"/> 
    <Button android:layout_height="match_parent" 
     android:layout_width="0dp" 
     android:layout_weight="1" 
     android:text="9" 
     android:onClick="keyPressed"/> 
    <Button android:layout_height="match_parent" 
     android:layout_width="0dp" 
     android:layout_weight="1" 
     android:text="*" 
     android:onClick="keyPressed"/> 
</LinearLayout> 
<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal" 
    > 
    <Button android:layout_height="match_parent" 
     android:layout_width="0dp" 
     android:layout_weight="1" 
     android:text="." 
     android:onClick="keyPressed"/> 
    <Button android:layout_height="match_parent" 
     android:layout_width="0dp" 
     android:layout_weight="1" 
     android:text="0" 
     android:onClick="keyPressed"/> 
    <Button android:layout_height="match_parent" 
     android:layout_weight="1" 
     android:layout_width="0dp" 
     android:text="=" 
     android:onClick="equalsKeyPressed"/> 
    <Button android:layout_width="0dp" 
     android:layout_height="match_parent" 
     android:layout_weight="1" 
     android:text="/" 
     android:onClick="keyPressed"/> 
</LinearLayout> 

package com.soloinfor.calculator; 

import android.os.Bundle; 
import android.view.View; 
import android.support.v4.app.Fragment; 
import android.view.LayoutInflater; 
import android.view.ViewGroup; 

public class NumericKeypad extends Fragment 
{ 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
    { 
     View view = inflater.inflate(R.layout.numeric_keypad, container, false); 
     return view; 
    } 
} 

fonksiyon klavyesi:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" android:layout_width="match_parent" 
android:layout_height="match_parent"> 
<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"> 
    <Button android:text="sin()" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:textAllCaps="false" 
     android:onClick="functionKeyPressed" 
     android:tag="sin("/> 
    <Button android:text="cos()" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:textAllCaps="false" 
     android:onClick="functionKeyPressed" 
     android:tag="cos("/> 
    <Button android:text="tan()" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:textAllCaps="false" 
     android:onClick="functionKeyPressed" 
     android:tag="tan("/> 
    <Button android:text="π" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:textAllCaps="false" 
     android:onClick="functionKeyPressed" 
     android:tag="π" 
     /> 
</LinearLayout> 
<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"> 
    <Button android:text="ln()" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:textAllCaps="false" 
     android:onClick="functionKeyPressed" 
     android:tag="ln("/> 
    <Button android:text="log\u2081\u2080()" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:textAllCaps="false" 
     android:onClick="functionKeyPressed" 
     android:tag="log\u2081\u2080("/> 
</LinearLayout> 
İşte

ViewPager kodudur

package com.soloinfor.calculator; 

import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.view.View; 
import android.view.ViewGroup; 
import android.view.LayoutInflater; 

public class FunctionKeypad extends Fragment 
{ 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
    { 
     return inflater.inflate(R.layout.function_keypad, container, false); 
    } 
} 

cevap

0

Kişisel görünüm hiyerarşisi çok büyük. Bir şekilde yuvalanmış LinearLayout s'den kaçınarak ve bunun yerine RelativeLayout'u kullanarak düzleştirmelisiniz. Ağır operasyonlarınız olmasa da, karşılaştığınız gecikme enflasyon, düzen ve görüşlerden kaynaklanıyor.

Hiyerarşi Görüntüleyiciyi kullanın ve LINT denetimi çalıştırın. LINT, paftaları düzleştirmenin tüm olası yollarını size söyleyecektir.

+0

Bu noktada GridLayout'ın da ne yapacağını görüyorum? Bu şekilde sadece bir GridLayout root öğesi ve içine yerleştirilmiş tüm düğmelerim olur. –