2016-03-31 2 views
0

Я пробовал анимировать floatActionButton, чтобы получить меню в Android, но в устройствах с API < 21 получить перевод и API> = 21 перевод меньше. Я получил этот код:Как анимировать FloatingActionButton на разных устройствах и получить тот же результат?

private void translate(View view, float factor, int time){ 

    TranslateAnimation translate = new TranslateAnimation(0, 0, factor * view.getHeight(), 0); 
    translate.setDuration(time); 

    view.startAnimation(translate); 

} 

и после этого метода просто называют перевод()

FloatingActionButton fab_mini = (FloatingActionButton) getActivity().findViewById(R.id.fab_3); 
translate(fab_mini, 1.5f, 400); 

fab_mini.setTranslationY(-fab_mini.getHeight() * 1.5f); 
fab_mini.setVisibility(View.VISIBLE); 
fab_mini.setClickable(true); 

Проблема заключается в том, что кнопки показывают друг над другом в некоторых устройствах (я пробовал в Android 5.0.1) а в других устройствах (Android 4.3 и 4.2.2) кнопки отображаются с правильным пространством между ними (0.5 * button.getHeight() или тем же переводом = 1.5).

ответ

0

Возможно, это потому, что эти параметры являются пикселями. Попробуйте преобразовать их в dp с помощью этой функции:

public static float convertPixelsToDp(float px, Context context){ 
    Resources resources = context.getResources(); 
    DisplayMetrics metrics = resources.getDisplayMetrics(); 
    float dp = px/((float)metrics.densityDpi/DisplayMetrics.DENSITY_DEFAULT); 
    return dp; 
} 
+0

Я пробовал, но бесполезно. Параметры для конструкторов TranslateAnimation() имеют размеры на пиксель (px) или независимый пиксель (dp) ?? View.getheight() возвращает пиксели, но я не знаю, нужны ли конструктору TranslateAnimation для px или dp для анимации. –

Смежные вопросы