2016-03-31 4 views
0

私はfloatingActionButtonをアニメーション化してアンドロイドのメニューを取得しようとしましたが、APIを持つデバイスでは<があります。21翻訳とAPI> = 21の翻訳は小さくなります。 私はこのコードを持って:異なるデバイスでFloatingActionButtonをアニメーション化して同じ結果を得る方法はありますか?

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

問題はボタンが一部のデバイスでは、他の上の1つを示している)

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

} 

を、これだけで呼び出すメソッドの後に(翻訳(私は、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を必要とするかどうかはわかりません。 –

関連する問題