我有两个问题:
我有一个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)。它有可能改变它吗?
迎接
答案 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
然后您可以使图像视图显示在该坐标处。