2014-11-25 3 views
0

Вы знаете этот JoystickView от http://code.google.com/p/mobile-anarchy-widgets/wiki/JoystickView? Ну, я попытался его реализовать. Нет проблем с этим. Я не мог изменить его размер, потому что я добавил его программно. Я как-то узнал, как изменить размер, но теперь он застрял в верхнем левом углу, и все, что я нашел в течение трех часов, вызвало у меня исключение NullPointerException в параметре LayoutParams, который я создал, или был отклонен, потому что он не был лишен или что-то вроде Начать с.Как я могу настроить LayoutParams для просмотра программно?

public class GameActivity extends Activity implements JoystickMovedListener{ 

private GraphicsHolder mGraphicsHolder; 
private String TAG = "GameActivity"; 

/* 
* creates a new GraphicsHolder and sets it its ContentView 
* the GraphicsThread is being included in the GraphicsHolder 
*/ 
@Override 
protected void onCreate(Bundle savedInstanceState){ 
    super.onCreate(savedInstanceState); 
    Log.d(TAG, "created"); 

    FrameLayout gameScreen = new FrameLayout(this); 

    mGraphicsHolder = new GraphicsHolder(this); 

    JoystickView Joystick = new JoystickView(this); 


    // I need to set the Gravity HERE 


    Joystick.setLayoutParams(new RelativeLayout.MarginLayoutParams(500,500)); 

    gameScreen.addView(mGraphicsHolder); 
    gameScreen.addView(Joystick); 

    setContentView(gameScreen); 
} 
} 

Теперь вот мой вопрос: можете ли вы как-то установить Гравитацию этого вида программно?

+0

Вы пытались добавить JoyStickView в XML вместо этого? – Karakuri

+0

Я думаю, что джойстик расширяется. Итак, попробуйте этот способ Joystick.setLayoutParams (новый ViewGroup.LayoutParams (500 500)); вместо RelativeLayout.MarginLayoutParams() –

+0

@ Karakuri Да, я сделал раньше и как-то не смог. Но ... Спасибо за Идею, которую я только что получил, я попробую это после школы. – blueBurningCoder

ответ

0

Ну, я нашел ответ, но это совершенно другой подход, так как ни из вышеизложенного или тех, которые я нашел в другом месте, работал для меня.

я сделал следующие изменения в OnCreate метода:

mGraphicsHolder = new GraphicsHolder(this); 

    LayoutInflater inflate = (LayoutInflater) 
      getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

    setContentView(mGraphicsHolder); 

    getWindow().addContentView(inflate.inflate(
     R.layout.controllayout, null), new ViewGroup.LayoutParams(
     ViewGroup.LayoutParams.FILL_PARENT, 
     ViewGroup.LayoutParams.FILL_PARENT)); 

    Joystick = (JoystickView) getWindow().findViewById(R.id.joystickView1); 
    Joystick.setOnJostickMovedListener(this); 

Теперь я получил свой джойстик на макете XML, но это на самом деле работает (по крайней мере, в моем случае, когда ничего не работало), и это довольно легко вносить изменения в вещи макета и т. д.

0

попытаться установить центр тяжести в FrameLayout и использовать ViewGroup.LayoutParams набор джойстиков LayoutParams:

FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT,FrameLayout.LayoutParams.MATCH_PARENT); 
params.gravity = Gravity.CENTER; 
gameScreen.setLayoutParams(params); 

Joystick.setLayoutParams(new ViewGroup.LayoutParams(500,500)); 
+0

настройка параметров на gameScreen ... это новое, я попробую :) – blueBurningCoder

+0

Это не сработало, но у меня не было NullPointer. Он все еще находится в верхнем левом углу, когда я устанавливаю Gravity BOTTOM. Но спасибо Anyways :) – blueBurningCoder

0

попробовать это.

FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) Joystick.getLayoutParams(); 
params.gravity = Gravity.TOP;// desired gravity 

Joystick.setLayoutParams(params); 

Dont изменить ур код просто добавить это после того, как setContentView(gameScreen); надеюсь, что он работает

+0

Нет Joystick.setGravity (int)! и когда я попробовал верхнюю, прежде чем я получил NullPointer;) – blueBurningCoder

+0

попробуйте снова мой отредактированный ans .. –

+0

Хорошо Спасибо Я попробую, когда вернусь домой :) – blueBurningCoder

1

Вы можете попробовать это

RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(500,500); 
params.addRule(RelativeLayout.CENTER_IN_PARENT, RelativeLayout.TRUE); 

Joystick.setLayoutParams(params); 
+0

Я боюсь сказать это, но это не сработало – blueBurningCoder