2016-03-31 4 views
0

Ich habe versucht, FloatingActionButton animieren, um ein Menü in Android zu bekommen, aber in Geräten mit API erhalten Sie eine Übersetzung und API> = 21 die Übersetzung ist kleiner. ich diesen Code bekam:Wie animiere ich FloatingActionButton auf verschiedenen Geräten und bekomme dasselbe Ergebnis?

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

} 

und nach dieser einfach anrufen Methode übersetzen()

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

Das Problem ist, die Tasten in einigen Geräten eine gegenüber anderen zeigen (Ich habe versucht, in Android 5.0.1) und in anderen Geräten (Android 4.3 und 4.2.2) zeigen die Buttons mit dem richtigen Abstand zwischen ihnen (0.5 * button.getHeight() oder was ist die gleiche Übersetzung = 1.5).

Antwort

0

Kann sein, weil diese Parameter Pixel sind. Versuchen Sie, sie in dp mit dieser Funktion zu konvertieren:

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

Ich versuchte, aber nutzlos. Die Parameter für TranslatedAnimation() Konstruktoren haben Dimensionen auf Pixel (px) oder unabhängige Pixel (dp) ?? View.getheight() gibt Pixel zurück, aber ich weiß nicht, ob der TranslateAnimation-Konstruktor px oder dp für die Animation benötigt. –