public class Game_collecting_view extends View
{
Button image_boy;
private static final int BOY_DIAMETER = 200; // initial spot size
int boy_width =0;
int boy_height =0;
public void setGame_collecting(Game_collecting mGame_collecting)
{
this.mGame_collecting = mGame_collecting;
}
// constructs a new View
public Game_collecting_view(Context context, RelativeLayout parentLayout)
{
super(context);
resources = context.getResources(); // save Resources for loading external values
layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
// get references to various GUI components
relativeLayout = parentLayout;
spotHandler = new Handler(); // used to add spots when game starts
}
@Override
protected void onSizeChanged(int width, int height, int oldw, int oldh)
{
viewWidth = width; // save the new width
viewHeight = height; // save the new height
}
public void set_boy()
{
final Button boy = (Button) layoutInflater.inflate(R.layout.untouched, null);
boy.setX(viewWidth /2);
boy.setY(viewHeight - BOY_DIAMETER);
boy.setPadding(0,0,0,0);
boy.setBackgroundResource(R.drawable.blue);
boy.setLayoutParams(new RelativeLayout.LayoutParams(BOY_DIAMETER, BOY_DIAMETER));
relativeLayout.addView(boy); // add spot to the screen
Toast.makeText(getContext(), "set_boy\nviewWidth=" +viewHeight +"\nviewHeight=" +viewHeight, Toast.LENGTH_SHORT).show();
boy.setOnClickListener
(
new OnClickListener()
{
public void onClick(View v)
{
touchedSpot(boy);
}
}
);
}
public void resume(Context context)
{
resetGame();
}
public void resetGame()
{
for (int i = 1; i <= INITIAL_SPOTS; ++i)
{
spotHandler.postDelayed(addSpotRunnable, i * SPOT_DELAY);
generate_text();
}
set_boy();
}
private Runnable addSpotRunnable = new Runnable()
{
public void run()
{
addNewSpot(); // add a new spot to the game
}
};
Цель:
Я хотел бы установить значок мальчика в нижней средней части экрана. значок мальчик установлен на этом пути для последующего динамического интерфейса (проведите пальцем по экрану справа значок мальчик будет двигаться вправо, наоборот)андроид: установка кнопки программно с помощью Setx и SetY
наблюдения:
тоста отчеты как viewWidth и viewHeight = 0, а значок мальчика - 0,0 (левый верхний угол). Если я установил setY (viewHeight + BOY_DIAMETER), значок мальчика будет расположен в (0, 200).
Вопрос:
Я хотел бы спросить, почему viewWidth и viewHeight как сообщают 0. Как мог onSizeChanged
назвать сразу, так что мальчик Icone может быть установлен в центре нижней части экрана?
Спасибо!
http://stackoverflow.com/questions/19932253/get-positions-of-views-in-a-dialog-relativ-to-their-parent/ 19933242 # 19933242 проверьте мой ответ здесь – Naddy
, вы задаете размер слишком рано, прежде чем элементы будут выложены на экране. – njzk2
@ njzk2: правильно вы правы, теперь я использую 'getViewTreeObserver()' для получения 'ViewWidth' и' ViewHeight' перед тем, как пройти через 'setX' и' setY'. Тем не менее, иконка мальчика все еще находится в точке (0,0). Я попытался использовать 'setX (720/2)' и 'setY (1134-200)', вероятно, он расположен в нужном месте. Это означает, что 'viewWidth' и' viewHeight' еще не получены до установки значка мальчика ... таким образом, как я мог отложить позиционирование значка мальчика? с помощью 'Handler'. Как я узнаю, когда измерение будет получено? – pearmak