3

Imageviewの余白を設定したい。私が達成したかったのは、1 つの画像をある程度の距離まで移動することです。画面のコンテンツは RelativeLayout で、左側に ImageView があり、右側にボタンが配置されています。ボタンを100回クリックすると、画像とボタンの間のギャップ内で画像を左から右に移動したいと思います。私がフォローしているコードは次のとおりです。

private static int count= 1 ;

public void onClick(View view) {


    RelativeLayout lay = (RelativeLayout)findViewById(R.id.layout1);
    ImageView i1= (ImageView)findViewById(R.id.img1);
    ImageButton btn= (ImageButton)findViewById(R.id.iBtn);

    int i1Width = i1.getWidth();
    int btnWidth = btn.getWidth();
    int totalMragine = lay.getWidth() - i1Width - btnWidth ; //the total margine image will move.
    int stepSize =  (lay.getWidth() - i1Width - btnWidth ) / 100;   
    int step = stepSize * count++;  

    Log.i("i1Width ", ""+i1Width );
    Log.i("btnWidth ", ""+btnWidth );
    Log.i("lay.getWidth()", ""+lay.getWidth());     
    Log.i("stepSize", ""+stepSize);     
    Log.i("count", ""+count);

    LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
    lp.setMargins(step, 0, 0, 0);
    i1.setLayoutParams(lp);     

    LinearLayout.LayoutParams lp1 = (LinearLayout.LayoutParams) horse.getLayoutParams();
    Log.i("currentMargine", ""+lp1.leftMargin);

    if(lp1.leftMargin >= totalMragine ){
        Log.i("Result", "maringe over");
    }
}

設定しているマージンは整数ですが、ステップの値はフロートであることを知りたかったのです。では、LayoutParams でマージンフロートを設定する方法は? またはこれを行う他の方法はありますか?

4

1 に答える 1

0

移動するときのように、毎回移動する距離を計算することができます

移動する距離 = 残りの長さ/残りのクリック数

の最終ステップ (100 番目のステップ) で、エラー < で終了します5px と. 5px では小さすぎます )

のように

1st click  distance_to_move = 370/100;   as round off come 4 

2nd click  distance_to_move = 366/99;    as round off come 4 

3rd click  distance_to_move = 362/98;    as round off come 4 

したがって、移動は px 44444...3444...3444..3444... のようになります。

于 2012-06-22T06:02:56.320 に答える