多屏问题

时间:2015-05-04 18:31:48

标签: android resolution multiscreen

我有两个问题:

我有一个imageview,当我触摸它时,我将它发送到(X,Y)位置。我有一个S4和一个Galaxy Note 3,分辨率(1920x1080)和密度xxhdpi。 当我测试它们时,我注意到不同设备中的imageView没有发送到相同的位置。在Galaxy注意,imageView更多是在右边和上面......为什么会发生这种情况?具有相同的分辨率,属于相同的密度(xxhdpi)! 我如何为这个例子和所有屏幕解决这个问题?

这是我的XML代码

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/fondo_jugar"
tools:context="com.trucouruguayo.JugarActivity" >


<ImageView
    android:id="@+id/imageViewCard1"
    android:layout_width="101dp"
    android:layout_height="142.50dp"
    android:layout_alignLeft="@+id/imageViewMazo"
    android:layout_alignTop="@+id/imageViewMazo"
    android:layout_marginRight="-50dp"
    android:contentDescription="@string/imageViewDescriptionCartd1"
    android:src="@drawable/reverso"
    android:scaleType="fitXY" />

<ImageView
    android:id="@+id/imageViewCard2"
    android:layout_width="101dp"
    android:layout_height="142.50dp"
    android:layout_alignLeft="@+id/imageViewMazo"
    android:layout_alignTop="@+id/imageViewMazo"
    android:layout_marginRight="-50dp"
    android:contentDescription="@string/imageViewDescriptionCard2"
    android:src="@drawable/reverso"
    android:tag="imageViewCarta1"
    android:scaleType="fitXY" />

    ...

</<RelativeLayout >

这是移动卡片的方法:

Point point1 = new Point(-1460, 20);

    /*Tira la carta al a mesa (sea de la maquina o del jugador)*/
private void tirarCartaALaMesa(View view, List<Carta> cartas, boolean tiraMaquina) {

    cartas.remove(obtenerCartaFromView(view, cartas));
    listaImageViewsTiradas.add(view);
    indiceOrdenCartas ++;

    animSetXY = new AnimatorSet();
    ObjectAnimator scaleDownX = ObjectAnimator.ofFloat(view, "scaleX", 0.8f);
    ObjectAnimator scaleDownY = ObjectAnimator.ofFloat(view, "scaleY", 0.8f);
    ObjectAnimator rotation;

    objectX = ObjectAnimator.ofFloat(view, "translationX", point1.x);
    objectY = ObjectAnimator.ofFloat(view, "translationY", point1.y);

    animSetXY.setInterpolator(new LinearInterpolator());
    animSetXY.setDuration(500);
    animSetXY.start();
}

我意识到的另一个问题是为什么point1必须设置(-1460,20)在左上角而不是例如(20,20)。我认为是因为它从视图位置获取了(0,0)。它有可能改变它吗?

迎接

1 个答案:

答案 0 :(得分:0)

为了解决这个问题,我使用DisplayMetrics类以编程方式计算了X和Y坐标:

DisplayMetrics metrics= new DisplayMetrics();
Display display = ((WindowManager) getSystemService(WINDOW_SERVICE)).getDefaultDisplay();
display.getMetrics(metrics);

int x=metrics.widthPixels/2; //2 can be changed according to the need
int y=metrics.heightPixels/2; //2 can be changed according to the need

然后您可以使图像视图显示在该坐标处。