ALIGN_PARENT_BOTTOM无法使用android中的移动图标

时间:2016-03-18 23:10:01

标签: android android-canvas

我是android的新手,我无法弄清楚为什么我的这段代码不会让图标画在画布的底部(屏幕)。我在这做错了什么?我试着寻找答案,我也尝试过自己,但不断打破代码或者只是努力工作。谢谢。 这是我的代码:

public class CanvasExample extends Activity {

    private static RectAnim rectAnim;
    private boolean animation;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);


        Display display = getWindowManager().getDefaultDisplay();
        Point size = new Point();
        display.getSize(size);

        RelativeLayout RL = new RelativeLayout(this);
        RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT);
        RL.setLayoutParams(params);
        params.addRule(RL.ALIGN_PARENT_BOTTOM);
        rectAnim = new RectAnim(this, size);
        RL.addView(rectAnim);
        setContentView(RL);

    }

    @Override
    protected void onResume() {
        super.onResume();
        animation = true;

        new Thread(new MissileRunnable()).start();
    }

    @Override
    protected void onPause() {
        super.onPause();
        animation = false;
    }

    class MissileRunnable implements Runnable{

        @Override
        public void run() {
            while(animation){
                try {
                    Thread.sleep(150);
                    rectAnim.go();

                } catch (InterruptedException e) {
                    e.printStackTrace();
                }

            }
        }
    }

    class RectAnim extends ImageView{

        int PIXEL_MOVEMENT_X = 25;
        int PIXEL_MOVEMENT_Y = 0;
        boolean scale = false;

        private Point size;
        private int nextX, nextY;

        public RectAnim(Context context, Point size) {
            super(context);
            setImageResource(R.drawable.red);
            setLayoutParams(new FrameLayout.LayoutParams(100, 100));
            this.size = size;
        }


        public void go(){

            //handle with nextX movement
            if(getX()+ getWidth()>=size.x || getX()<0){
                PIXEL_MOVEMENT_X*=-1;
                scale = true;
            }

            if(getY()+getHeight() >=size.y || getY()<0){
                PIXEL_MOVEMENT_Y*=-1;
                scale = true;
            }


            incX(PIXEL_MOVEMENT_X);
            incY(PIXEL_MOVEMENT_Y);

            postInvalidate();


        }

        @Override
        public void draw(Canvas canvas) {
            super.draw(canvas);

            setX(nextX);
            setY(nextY);

            if(scale){
                scale = false;
                ObjectAnimator translate = new ObjectAnimator().ofPropertyValuesHolder(this,
                        PropertyValuesHolder.ofFloat(View.SCALE_X,2),
                        PropertyValuesHolder.ofFloat(View.SCALE_Y,2));
                translate.setRepeatMode(ObjectAnimator.REVERSE);
                translate.setRepeatCount(1);
                translate.start();
            }

        }




        public void incX(int value){
            nextX +=value;}
        public void incY(int value){
            nextY +=value;}


    }
} 

1 个答案:

答案 0 :(得分:0)

更改

RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT);

到:

ViewGroup.LayoutParams params = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.MATCH_PARENT);

删除params.addRule(RL.ALIGN_PARENT_BOTTOM);,而在RectAnim类构造函数中执行此操作:

RelativeLayout.LayoutParams bottomParams = new RelativeLayout.LayoutParams(100,100); bottomParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM); setLayoutParams(bottomParams);