Как отобразить часть холста вида в Android? - PullRequest
0 голосов
/ 31 декабря 2011

Я работаю над кодом, в котором мы используем canvas для обнаружения касания на экране. На данный момент холст рисуется напрямую. Как добавить его как часть представления, состоящего из других элементов в xml.код

public class Tutorial2D extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(new Panel(this));
    }
}

Вот другая его часть

public class Panel extends SurfaceView implements SurfaceHolder.Callback {

private ViewThread mThread;
private ArrayList<Element> mElements = new ArrayList<Element>();

public Panel(Context context) {
    super(context);
    getHolder().addCallback(this);
    mThread = new ViewThread(this);
}

public void doDraw(Canvas canvas) {
    canvas.drawColor(Color.TRANSPARENT);
    synchronized (mElements) {
        for (Element element : mElements) {
            element.doDraw(canvas);
        }
    }
}

@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
    // TODO Auto-generated method stub
}

@Override
public void surfaceCreated(SurfaceHolder holder) {
    if (!mThread.isAlive()) {
        mThread = new ViewThread(this);
        mThread.setRunning(true);
        mThread.start();
    }
}

@Override
public void surfaceDestroyed(SurfaceHolder holder) {
    if (mThread.isAlive()) {
        mThread.setRunning(false);
    }
}

@Override
public boolean onTouchEvent(MotionEvent event) {
    synchronized (mElements) {
        mElements.add(new Element(getResources(), (int) event.getX(), (int) event.getY()));
    }
    return super.onTouchEvent(event);
}

}

Как добавить этот холст в основной XML и отображаться поверх изображения,любой фрагмент этого или как я должен изменить работу над этим кодом, все будет замечательно. Спасибо

Ответы [ 2 ]

1 голос
/ 01 января 2012

Попробуйте этот конструктор для класса Panel:

public Panel(Context context, AttributeSet attrs) {
    super(context, attrs);
    getHolder().addCallback(this);
    mThread = new ViewThread(this);
}
1 голос
/ 31 декабря 2011

Вы можете использовать пользовательский вид в формате XML с именем пакета.Например, в main.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:orientation="vertical">
  <TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content" 
    android:text="Hello" />
  <your.package.name.Panel
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />
</LinearLayout>

Затем в onCreate вашей активности:

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