移动drawable和Imageview布局的问题

时间:2013-12-06 22:56:21

标签: java android xml android-layout

所以我们想制作一款游戏,我们用Android手机的加速计移动气球。使用ImageView可能会产生障碍,导致气球在碰撞时弹出。到目前为止,我们已经移动了ImageView气球,但似乎只能在ImageView气球的布局中看到drawable(称为yellow_balloon)。

java代码:

package com.ec327.ballon;

import android.os.Bundle;
import android.app.Activity;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.util.Log;

public class GameScreen extends Activity implements SensorEventListener {

    private ImageView balloon=null;
    final String tag = "AccLogger";
    SensorManager sensore=null;

    int xa=0;
    int ya=0;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.game_screen);

        sensore = (SensorManager) getSystemService(SENSOR_SERVICE);     

        balloon = (ImageView)findViewById(R.id.balloon);
        balloon.scrollTo(xa, ya);
        //balloon.offsetLeftAndRight(50);
        //balloon.offsetTopAndBottom(50);

        //balloon.setImageResource(R.drawable.yellow_balloon);

    }

    public void onSensorChanged(SensorEvent event){
         Sensor sensor = event.sensor;
         float [] values = event.values;
         synchronized (this) {
                 Log.d(tag, "onSensorChanged: " + sensor + ", x: " +
                                 values[0] + ", y: " + values[1] + ", z: " + values[2]);
         if (sensor.getType() == Sensor.TYPE_ACCELEROMETER ) {

             xa=(int)values[0];// this part of code is only test to see int x and y on Activity
             ya=(int)values[1];

         }
         }
         balloon.scrollBy(xa, ya);
         balloon.invalidate();
      }

    public void onAccuracyChanged(Sensor sensor, int accuracy) {
        Log.d(tag,"onAccuracyChanged: " + sensor + ", accuracy: " + accuracy);
     }

    protected void onResume() {
        super.onResume();
        Sensor Accel = sensore.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
       // register this class as a listener for the orientation and accelerometer sensors
        sensore.registerListener((SensorEventListener) this, Accel,        SensorManager.SENSOR_DELAY_FASTEST);
      }
}

XML代码:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" 
    android:background="@drawable/blank_screen">

    <ImageView
        android:id="@+id/balloon"
        android:layout_width="41dp"
        android:layout_height="142dp"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:adjustViewBounds="true"
        android:src="@drawable/yellow_balloon" />

</RelativeLayout>

在xml文件中,ImageView气球的layout_width = 41dp,layout_height = 142dp。当程序运行时,yellow_balloon会四处移动,但一旦它移出ImageView气球的布局尺寸,就不能再看到它了。

scrollBy()只移动drawable yellow_balloon而不是实际气球布局的位置吗?我们已经尝试过使用它以及layout.setMargins,但两者都没有。我们也尝试过使用setOffsetTopAndBottom和setOffsetLeftAndRight,但这并没有移动气球的ImageView。是什么导致了这个问题,我们该如何解决?

1 个答案:

答案 0 :(得分:0)

我不完全确定使用imageViews是最简单或最有效的方式来做你正在做的事情,特别是如果你想为气球碰撞和弹出创造障碍。

我的建议是你的游戏完全在SurfaceView中完成。从这里你可以添加“Sprites”,这将是你的所有物体(你的气球,你的障碍物),你可以检查精灵碰撞(你的气球弹出的情况)。

图像视图的问题在于,您需要移动整个图像,并且一旦引入多个图像,除非图像周围的框完全填满图片,否则您将开始在图片之前获得图片重叠或碰撞发生实际碰撞。