我是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;}
}
}
答案 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);