Android中的精确定位
我正在开发一个应用程序,需要将图像精确定位在某个x和y位置。图像将随机移动到新位置Android中的精确定位,android,Android,我正在开发一个应用程序,需要将图像精确定位在某个x和y位置。图像将随机移动到新位置 我看不出如何做到这一点。即使android鼓励使用布局(因为屏幕有多种尺寸、尺寸和质量分辨率,布局在所有设备上都是相同的) 有两种其他方法可以做到这一点 1) 更改opengl视图的所有内容^^^^但这需要一个佳能才能得到一只蚊子 2) 创建自己的视图,覆盖onDraw(画布)并在那里绘制自己的图形 我必须警告你,把所有的画都正确地放在画布上是非常乏味的 编辑 下面是一些代码,让您开始以编程方式创建视图,我还添
我看不出如何做到这一点。即使android鼓励使用布局(因为屏幕有多种尺寸、尺寸和质量分辨率,布局在所有设备上都是相同的) 有两种其他方法可以做到这一点 1) 更改opengl视图的所有内容^^^^但这需要一个佳能才能得到一只蚊子 2) 创建自己的视图,覆盖onDraw(画布)并在那里绘制自己的图形 我必须警告你,把所有的画都正确地放在画布上是非常乏味的
编辑 下面是一些代码,让您开始以编程方式创建视图,我还添加了触摸测试 (我想提请大家注意的一件事是:有一个image.getWidth()(图片的实际大小)和一个image.getScaledWidth(canvas),它给出了dp中元素的大小,这意味着它在屏幕上的显示大小)
public类MainMenuView扩展了PixelRainView{
私有位图bmpPlay=null;
私有浮动playLeft=0;
私有浮动playRight=0;
私有浮动播放底部=0;
私有浮动playTop=0;
公共主菜单视图(上下文、属性集属性){
超级(上下文,attrs);
}
@凌驾
公共位图(){
super.unload位图();
if(bmpPlay!=null){
bmpPlay.recycle();
bmpPlay=null;
}
}
@凌驾
受保护的void onDraw(画布){
super.onDraw(帆布);
if(bmpPlay==null){
bmpPlay=GetBitMapFromResourceId(R.drawable.play_bt);
playLeft=(this.getWidth()-bmpPlay.getScaledWidth(canvas))/2;
playRight=playLeft+bmpPlay.getScaledWidth(画布);
playTop=(this.getHeight()-bmpPlay.getscaledeheight(canvas))/2;
playboottom=playTop+bmpPlay.getScaledHeight(画布);
}
drawBitmap(bmpPlay、playLeft、playTop、null);
}
}
@凌驾
已更改尺寸的受保护空心(整数w、整数h、整数oldw、整数oldh){
super.onSizeChanged(w,h,oldw,oldh);
}
@凌驾
公共布尔onTouchEvent(运动事件){
if(event.getAction()==MotionEvent.ACTION\u向下){
float x=event.getX();
float y=event.getY();
//测试中央按钮
如果(x>playLeft&&x)使用什么布局?绝对布局、线性布局、相对布局?图像具有哪些属性?是否使用dp(密度无关像素)?给我们一些见解!使用LinearLayout。我使用DP。我没有尝试过很多,因为我毫无头绪。我打算尝试AbsoluteLayout,但听说它已被弃用。a结果仍然存在,但被标记为弃用,所以我想很快它将不再受支持。我将代码用于创建您自己的视图,但正如您将看到的,这是一个恼人的过程,并且您需要无论屏幕大小如何,都必须添加更多的代码以使其看起来更漂亮^^我宁愿保持简单,呵呵。我知道0 opengl,第二个选项似乎很乏味。据我所知,这是使用(x,y)的唯一方法在androidOh上放置元素好吗,你知道有教程吗?事实上,我从来没有找过教程,我算出来了,哈哈,但我在我的帖子中添加了一个只画一个按钮的版本
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);
}
}