Android中的精确定位

时间:2010-11-18 07:07:31

标签: android

我正在开发一个应用程序,我需要将图像精确定位在某个x和y位置。图像会随机移动到新的位置。

我看不出如何做到这一点。

1 个答案:

答案 0 :(得分:3)

即使android鼓励为此使用布局(因为有几种尺寸,尺寸质量分辨率的屏幕与布局,你将在所有设备上具有相同的方面)。

还有其他两种方法可以做到这一点

1)改变一个opengl视图^^的所有内容,但那是拿出一个正典来获取一只蚊子。

2)创建自己的视图,覆盖onDraw(画布)并在那里做自己的绘图。

我必须警告你,让所有图纸在画布上正确定位真的很乏味


编辑 这里有一些代码可以让您开始以编程方式创建视图,我还添加了触摸测试。

(有一件事我想引起你的注意:有一个image.getWidth()(图片的实际大小)和一个image.getScaledWidth(画布),它给你dp中元素的大小,这意味着有多大它将出现在屏幕上)

public class MainMenuView extends PixelRainView{
    private Bitmap bmpPlay = null;
    private float playLeft = 0;
    private float playRight = 0;
    private float playBottom = 0;
    private float playTop = 0;

    public MainMenuView(Context context, AttributeSet attrs) {
        super(context,attrs);
    }



    @Override
    public void unLoadBitmaps() {
        super.unLoadBitmaps();
        if(bmpPlay != null){
            bmpPlay.recycle();
            bmpPlay = null;
        }
    }



    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        if(bmpPlay == null){
            bmpPlay = getBitmapFromRessourceID(R.drawable.play_bt);
            playLeft = (this.getWidth()-bmpPlay.getScaledWidth(canvas))/2; 
            playRight = playLeft + bmpPlay.getScaledWidth(canvas);
            playTop = (this.getHeight()-bmpPlay.getScaledHeight(canvas))/2;
            playBottom = playTop+bmpPlay.getScaledHeight(canvas);
        }
        canvas.drawBitmap(bmpPlay,playLeft, playTop, null);

        }       
    }


    @Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
        super.onSizeChanged(w, h, oldw, oldh);
    }



    @Override
    public boolean onTouchEvent(MotionEvent event) {
        if(event.getAction() == MotionEvent.ACTION_DOWN){
            float x = event.getX();
            float y = event.getY();
            //test central button
            if(x>playLeft && x<playRight && y<playBottom && y>playTop){
                Log.e("jason", "touched play");
                PixelRainView.changeView(R.layout.composedlayoutgroup);
            }
        return super.onTouchEvent(event);
    }
}