2016-03-20 5 views
0

Я пишу приложение калькулятора для Android, используя метод infix2postfix маневрового ящика (ну, по крайней мере, это своего рода, так как я относительно новичок в java). У меня установлен ViewPager для переключения между базовой клавиатурой и функциональной клавиатурой. Обе клавиатуры - это фрагменты, содержащие простые кнопки. Стек представляет собой класс Object Stack, который я реализовал. В первый раз, когда клавиатура скользит отлично, но после первых вычислений зрения, ViewPager начинает немного отставать, и я действительно не понимаю, почему. Есть ли у кого-нибудь предложения?Задержка анимации Android ViewPager после первого прокрутки

Вот код для ViewPager:

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

основание клавиатуры:

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

функция клавиатуры:

<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> 

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

ответ

0

Ваше мнение иерархия огромен. Вы должны как-то сгладить его, избегая вложенных LinearLayout s и используя вместо этого RelativeLayout. Хотя у вас нет тяжелых операций, отставание, которое вы испытываете, связано с инфляцией, компоновкой и рисованием просмотров.

Используйте средство просмотра иерархии и запустите проверку LINT. LINT расскажет вам все возможные способы сглаживания макетов.

+0

Я вижу, что GridLayout тоже будет делать? Таким образом, у меня будет только один корневой элемент GridLayout и все кнопки, вложенные в него. –