0

RelativeLayout で、LayoutParams にマージンを設定して ImageView を追加しました。

    RelativeLayout.LayoutParams rlLayoutParams = new RelativeLayout.LayoutParams(
            RelativeLayout.LayoutParams.WRAP_CONTENT,
            RelativeLayout.LayoutParams.WRAP_CONTENT);
    rlLayoutParams.topMargin = (int) convertDpToPixel(kMARGIN_HEADER);
    rlLayoutParams.leftMargin = (int) myMAGIC_MARGIN;

現在、この ImageView は画面の中央にあります。右に数百ピクセルスライドさせてそのままにしたいので、次の TranslateAnimation を適用しました。

private TranslateAnimation getAnimation(ImageView view, int displacement, int duration) {
    int[] view_pos = new int[2];
    view.getLocationOnScreen(view_pos);
    TranslateAnimation slide = new TranslateAnimation(
            view_pos[0], 
            view_pos[0] + displacement,  
            view_pos[1],
            view_pos[1]);
    slide.setFillAfter(true);
    slide.setDuration(duration);
    return slide;
}

このアニメーションを適用した直後に、ビュー全体がなくなります。デバッグ モードで view_pos[] の値を確認しましたが、問題ありません (すべてゼロではありません)。を false にするとsetFillAfter、(明らかな理由で) アニメーションの終了後にビューが戻ってきます。それで、それはどこに行きましたか?

私も次のことを試しました:

    TranslateAnimation slide = new TranslateAnimation(
            view_pos[0], 
            view_pos[0], // don't do the + displacement,  
            view_pos[1],
            view_pos[1]);

この景色がずっと続くと思っていました。しかし、いいえ、 の値に応じて、後で戻ってくる可能性がありますsetFillAfter

ビューが LayoutParams によって RelativeLayout に配置されている場合、TranslateAnimation を適用できないと思い始めます。ビューをスライドさせるという目標を達成するにはどうすればよいですか?

4

1 に答える 1