我想知道如何使用canvas在我的XML布局上绘制

时间:2014-04-23 17:45:42

标签: android xml

我已经创建了一个自定义XML布局,我正在尝试在其上绘制地图背景和pawn播放器(位图)。

相反,它在白色背景上绘制典当玩家而没有我在XML文件中作为背景的地图背景。

MyViev Class:

package com.example.alpha;


import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.util.AttributeSet;
import android.view.View;

public class MyView extends View {
    Bitmap playerW;
    float changingY;
    float changingX;
    public MyView(Context context) {
        super(context);
        playerW = BitmapFactory
                .decodeResource(getResources(), R.drawable.black);
        changingY=0;
        // TODO Auto-generated constructor stub
    }

    @Override
    protected void onDraw(Canvas canvas) {
        // TODO Auto-generated method stub
        super.onDraw(canvas);
        canvas.drawBitmap(playerW,4+changingX, (canvas.getHeight())-288-changingY, null);
    }

    public MyView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        // TODO Auto-generated constructor stub
    }

    public MyView(Context context, AttributeSet attrs) {
        super(context, attrs);
        // TODO Auto-generated constructor stub
    }

}

my MainActivity Class:

package com.example.alpha;


import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;


public class MainActivity extends ActionBarActivity {
    MyView ourView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ourView = new MyView(this);
        setContentView(ourView);

    }
}

My XML file:

<?xml version="1.0" encoding="utf-8"?>
<view class="com.example.alpha.MyView"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/myView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/mapeasy"
/>

1 个答案:

答案 0 :(得分:0)

这是因为您实际上没有将其设置为使用XML布局。相反,您已将内容View设置为MyView的新实例,该实例未设置XML背景属性。

因此,您有两个选择:

选项1 :调用myView.setBackgroundDrawable(R.drawable.mapeasy);在您创建MyView的新实例之后。

选项2 :将内容视图设置为您的实际布局文件,然后使用findViewById(int)找到您的MyView。

例如

public class MainActivity extends ActionBarActivity {
    MyView ourView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.your_layout_file);
        ourView = (MyView)findViewById(R.id.myView);
    }
}