Разработка Eclipse для Android: диалог пользовательских видов редактора макетов - PullRequest
0 голосов
/ 08 октября 2011

Я пишу игру для Android и хотел бы использовать встроенную систему разметки для разметки на основе размера и формы экрана (что также означает, что он будет динамически менять ориентацию), поэтому я написал интерфейс (называемый "Renderable"), который обернут классом, производным от View (называемым "RenderableView").

Поскольку я использую последнюю версию Eclipse, в разделе Custom & Library Views панели инструментов редактора макетов отображается моего класса, но показаны несколько копий каждого класса, производного от View.

Это ошибка в Eclipse или с моим кодом?

Вот мой Renderable интерфейс:

package games.DigSite;

import android.graphics.*;

public interface Renderable
{
    /**
     * Sets the new position and size for this Renderable.
     * @param bounds THe new bounds for this Renderable.
     */
    public void setBounds(RectF bounds);

    /**
     * Returns the current position and size of this Renderable.
     * @return The bounds this Renderable has.
     */
    public RectF getBounds();

    /**
     * Tells the Renderable to draw itself.
     * @param canvas The Canvas to draw to.
     */
    public void render(Canvas canvas);
}

А вот код для моего класса RenderableView:

package games.DigSite;
import games.DigSite.play.*;
import android.content.*;
import android.graphics.*;
import android.util.*;
import android.view.*;
import android.view.SurfaceHolder.Callback;

public class RenderableView extends SurfaceView implements Callback, PlayConstants
{
    private RectF bounds;
    private Renderable renderable;

    public RenderableView(Context context)
    {
        super(context);
        getHolder().addCallback(this);
    }

    public RenderableView(Context context, AttributeSet attrs)
    {
        super(context, attrs);
        getHolder().addCallback(this);
    }

    public RenderableView(Context context, AttributeSet attrs, int defStyle)
    {
        super(context, attrs, defStyle);
        getHolder().addCallback(this);
    }

    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height)
    {
        bounds = new RectF(0, 0, width, height);
        if (renderable != null)
            renderable.setBounds(bounds);
    }

    public void setRenderable(Renderable render)
    {
        renderable = render;
    }

    public Renderable getRenderable()
    {
        return renderable;
    }

    public void surfaceCreated(SurfaceHolder holder)
    {
        // Dunno if we need this one just yet
    }

    public void surfaceDestroyed(SurfaceHolder holder)
    {
        // Dunno if we need this one just yet
    }

    public void onDraw(Canvas canvas)
    {
        if (renderable != null)
            renderable.render(canvas);
        else
        {
            Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
            paint.setColor(BACKGROUND_COLOUR);
            canvas.drawRect(bounds, paint);
        }
    }
}

Я не уверен, если это место, чтобы спросить это, поэтому, пожалуйста, подвергните цензуре это при необходимости.

1 Ответ

2 голосов
/ 15 октября 2011

Это ошибка в ADT; поисковая система кода Eclipse возвращает один и тот же класс дважды. Я изменил структуру данных, в которой мы накапливаем пользовательские представления, с использования списка и использования набора. Это исправление войдет в ADT 15.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...