单击按钮时Android绘制图像

时间:2011-07-21 02:03:12

标签: android canvas bitmap

基本上,我有一个按钮,当点击时,图像将以随机坐标显示..

这是我的代码:

public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        //mDrawable = getResources().getDrawable(R.drawable.icon);
        Log.i("Info", "Resource got !!");

        mBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.icon);
        mCanvas = new Canvas();
        invoker = (Button) findViewById (R.id.invoke);
        invoker.setOnClickListener(this);
    }

public void onClick(View v) {
        if (v.getId() == R.id.invoke) {
            Log.i("Info", "Button Clicked !!");
            Display d = getWindowManager().getDefaultDisplay();
            Log.i("Info", "Returning window Info !!");
            // TODO Auto-generated method stub
            xPos = randInt.nextInt(d.getWidth());
            yPos = randInt.nextInt(d.getHeight() - invoker.getHeight())+ invoker.getHeight();
            Log.i("Info", "Coord got !!, xPos = "+xPos+", yPos = "+yPos);

            mCanvas.drawBitmap(mBitmap, yPos, xPos, null);
            Log.i ("Info", "Image drawn at ("+xPos+", "+yPos+")");
        }
    }

这是问题所在。每当我点击按钮时,图像就被绘制出来了,但是无处可见....每当我按下按钮时,屏幕上都没有绘制图像......

请指出我的错误? THX

注意:我的LogCat没有错误

1 个答案:

答案 0 :(得分:1)

仅仅因为你创建了一个画布并不意味着它与显示器上的任何东西相关联,这个画布就像你完成它一样只是一个虚拟的绘图表面。

有几种方法可以做到这一点,最简单的方法可能只是创建一个自定义视图,覆盖onDraw方法,然后在那里显示你的位图。

使用fill_parent作为高度和宽度

,将自定义视图添加到布局中

单击按钮时,只需为图像设置x / y并使视图无效

<强>更新

好的这是一个自定义视图这将成为您的图像的绘图表面,将其插入到您的主布局中,如果您愿意将其全屏显示(假设您使用的是RelativeLayout,您还可以在任何地方添加其他视图,按钮等你想要的)

通过将绘图代码放入适当的if / block来扩展它。然后使用findviewbyid获取自定义类,就像使用按钮一样。

现在,当您想要根据按钮绘制图像时,请单击自定义视图实例上的方法。无论如何,这是一个无关紧要的方法。

您还可以扩展布局类(无论您在main中使用什么),并在不添加子视图的情况下执行相同的操作。

public class myView extends View {

    private boolean imageShow = false; 
    private int x = 0;
    private int y = 0;

    public myView(Context context, AttributeSet attrs, int defStyle) { 
        super(context, attrs, defStyle);

    }
    public myView(Context context) { this(context,null,0); }
    public myView(Context context, AttributeSet attrs) { this(context, attrs,0); }

    public void drawImageRandom()
    {
        imageShow = true; 
        invalidate(); 

    }

    public void hideImage()
    {
        imageShow = false; 
        invalidate(); 
    }

    @Override 
    public void onDraw(Canvas canvas)
    {
        super.onDraw(canvas);
        if (imageShow) {

            // do your drawing code in here 
        }
    }
}