2010-11-18 57 views
1

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

我看不出如何完成此操作。

+1

你使用什么布局? AbsoluteLayout,LinearLayout,RelativeLayout?你的形象有哪些属性?你使用dp(密度独立像素)?给我们一些见解! – philgiese 2010-11-18 07:12:10

+0

使用LinearLayout.I我使用DP.Have没有尝试太多因为我卡住没有线索。我会尝试AbsoluteLayout但听说它已被弃用。 – James 2010-11-18 08:18:28

+0

abosulte仍然存在,但被标记为废弃,所以我想很快就不会被支持了。我把代码创建自己的视图,但你会看到它是令人讨厌的过程,你必须添加更多的代码,使它看起来不错,无论屏幕的大小^^ – 2010-11-18 08:39:48

回答

3

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

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

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); 
    } 
} 
+0

我宁愿保持简单嘿嘿。我知道0 opengl和第二个选项似乎像你说的乏味。 – James 2010-11-18 08:20:19

+0

据我所知,它是使用(x,y)在android – 2010-11-18 08:23:03

+0

上放置元素的唯一方法噢,你知道任何教程吗? – James 2010-11-18 08:28:40