在视图上绘制像素,直线和圆的最简单方法是什么?
我想移动十字光标,所以没有什么特别密集的。

我以为可以扩展SurfaceView并将其添加到XML中,并且可以正常工作,但是它看起来只是黑色,但是,当我在Eclipse中查看localmap.xml的布局视图时,图形将按预期显示。

有任何想法吗?我的onDraw永远不会在模拟器上调用,即使在类上调用invalidate也没有任何区别。我会继续努力,但是有人能看到我错过的任何东西吗?还是完全有更好的方法?


皱纹


localmap.xml包含以下内容(在RelativeLayout中)

  <com.example.android.game.LocalMapView
android:id="@+id/localmap_map"
android:layout_width="fill_parent"
android:layout_above="@id/localmap_planettext"
android:layout_below="@id/header"/>


LocalMapView.java包含以下内容(以及其他内容)

public class LocalMapView extends SurfaceView {

Paint mPaint = new Paint();

//Construct a LocalMapView based on inflation from XML
public LocalMapView(Context context, AttributeSet attrs) {
    super(context, attrs);

    // allow the map to receive the focus
    setFocusable(true);


}

private void drawPixel(Canvas canvas, int x, int y, int colour) {
    mPaint.setColor(colour);
    if ((x >= MAP_MIN_X) && (x < MAP_MAX_X) && (y >= MAP_MIN_Y) && (y < MAP_MAX_Y)) {
        canvas.drawPoint(((float)x * mScaleMapToScreenX), ((float)y * mScaleMapToScreenY), mPaint);
    }
}



private void drawCircle(Canvas canvas, int x, int y, int radius, int colour) {
    mPaint.setColor(colour);
canvas.drawCircle(((float)x), ((float)y), ((float)radius), mPaint);
}




@Override
public void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    drawCircle(canvas, MAP_MAX_X/2, MAP_MAX_Y/2, 1, 0xFF00FFFF);
    drawPixel(canvas, MAP_MAX_X/2, MAP_MAX_Y/2, 0xFF000000);
}

最佳答案

使用SurfaceView,您无需在onDraw()中进行绘制。您必须从下面的表面抓取一个画布并在其中进行绘制。在我看来,您真的不知道为什么要使用SurfaceView。只需使用普通的View代替,onDraw()就可以正常工作。

10-08 16:40