协调X& Y屏幕尺寸不同

时间:2017-02-06 16:12:10

标签: android size coordinates

我有一个视图,在viewpager里面有图像。当我触摸视图时,我会显示一个我正在触摸的图像。 同时我在Firebase中发送X和Y位置。 在另一台设备中,我找回那些坐标并在这些坐标处显示图像。

但平板电脑的屏幕尺寸不同,如何在同一位置显示我的图像?因为如果我触摸第一个平板电脑的中间屏幕,它会在另一个平板电脑的右下方显示图像

更新

对于用户1,当他触摸视图时,指针/光标正在显示

 v.animate()
 .x(Math.round(event.getX()))
 .y(Math.round(event.getY()))
 .setDuration(0)
 .start();

同时他将坐标发送到Firebase以及屏幕的宽度和高度。

    Display display = getActivity().getWindowManager().getDefaultDisplay();
         Point size = new Point();
         display.getSize(size);
         int width = size.x;
         int height = size.y;

        Map<String, Object> map = new HashMap<>();
        map.put("x", Math.round(event.getX()));
        map.put("y", Math.round(event.getY()));
        map.put("sizeX", width);
        map.put("sizeY", height);
        mRefMyPos.updateChildren(map);

用户2有一个监听器并获取这些数据以在坐标处显示imageView。

 listenerRefCoordonate = mRefCoordonate.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {

            CoordonateModel coordinateModel = dataSnapshot.getValue(CoordonateModel.class);

            if (coordinateModel == null){
                //do something
                mImageView.setVisibility(View.GONE);
            } else {

                final Float mScale = Math.min(1.0f * width / coordinateModel.getSizeX(), 1.0f * height / coordinateModel.getSizeY());

                if (coordinateModel.getX() != null){
                    mImageView.setVisibility(View.VISIBLE);
                    mImageView.animate()
                            .x(Math.round(coordinateModel.getX() * mScale))
                            .y(Math.round(coordinateModel.getY() * mScale))
                            .setDuration(0)
                            .start();
                }
            }
        }
        @Override
        public void onCancelled(DatabaseError firebaseError) {
        }
    });

似乎是不正确的,例如,如果我有一个带有ABCDEFGHI的图像视图....(match_parent),如果我尝试显示C,它在另一台设备上显示E.也许我的规模不正确?

我试着测试比例是否正确。当我触摸屏幕时没有显示我正在触摸的图像视图,但我正在聆听我在FireBase上写的内容并显示带有坐标/屏幕设备高度的图像视图并执行比例和时间我正在显示图像视图,显示我在哪里触摸,所以我猜比例是正确的

我会尝试重新解释我的问题:

平板电脑n1,1024 / 768 平板电脑n2,1920 / 1200

两者都在视图full_screen上,具有相同的Imageview比例FitXY和match_parent 在第一块平板电脑上,我触摸了猪的尾巴(Imageview),我发送了触摸屏幕的X,Y位置(Math.round(event.getX(),Math.round(事件)。 getY())和平板电脑的宽度/高度屏幕大小。第二个平板电脑显示(光标)在猪的尾巴周围但不在确切的位置....

有人可以帮助我吗?

用户平板电脑1触摸他的屏幕(红点在他触摸的地方) User tablet 1 touching his screen (RED POINT where he's touching)

用户平板电脑2收听用户1正在触摸的X,Y位置和绘图(红点)

enter image description here

更新2

我改变了,我在这篇文章中计算得像这样一个stackoverflow.com/a/21588683/5845928我有你所说的:平板电脑1点(258,230)和平板电脑2(484,359)。问题似乎是imageview。我该如何解决?

**固定**

平板电脑2接收平板电脑1的x,y位置,宽度和高度。

hisWidth = coordinateModel.getSizeX();
hisHeight = coordinateModel.getSizeY();

float percent_width = Float.valueOf(coordinateModel.getX()) / hisWidth;
float percent_height = Float.valueOf(coordinateModel.getY()) / hisHeight;
float x = percent_width * mWidth;
float y = percent_height * mHeight;

1 个答案:

答案 0 :(得分:1)

尝试发送设备宽度和高度,以便您可以使用它们来计算其他设备中的确切(X,Y)