Android 图像布局不正常

Android 图像布局不正常,android,xml,android-layout,imageview,Android,Xml,Android Layout,Imageview,我通过编程设置图像,使其看起来像圆形,但在某些设备中看起来像椭圆形。 我的代码是- int circleLeft = (int) (width * 3.3) / 100; circleLayoutParams.setMargins(circleLeft, (int) (height * 0.29), circleLeft, (int) (height * 0.18)); circleMenu.setLayoutParams(circleLayoutParams);

我通过编程设置图像,使其看起来像圆形,但在某些设备中看起来像椭圆形。 我的代码是-

    int circleLeft = (int) (width * 3.3) / 100;
    circleLayoutParams.setMargins(circleLeft, (int) (height * 0.29),
    circleLeft, (int) (height * 0.18));
    circleMenu.setLayoutParams(circleLayoutParams);
xml-


我已将图像放在可绘图文件夹中。此代码有什么问题。是图像大小问题吗

我在我的应用程序中遇到了相同的问题。这是因为不同设备的PPI和屏幕大小不同。我通过计算屏幕大小解决了这个问题。可通过以下代码执行此操作:-

//method to get screen size
public ArrayList<Integer> GetDeviceScreenSize()
{
    ArrayList<Integer> size= new ArrayList<Integer>();

    if((android.os.Build.VERSION.SDK_INT >= 13)){

        DisplayMetrics metrics = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(metrics);
        int w = metrics.widthPixels;
        int h = metrics.heightPixels;
        size.add(0,w);
        size.add(1,h);

    }else{
        Display display = ((WindowManager)ctx.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
        int width = display.getWidth();
        int height = display.getHeight();
        size.add(0, width);
        size.add(1,height);
    }
    return size;

}
通过此方法获得设备屏幕大小后,可以设置通过此方法获得的部分高度和宽度的高度和宽度。应该是这样的:-

ArrayList<Integer> size= GetDeviceScreenSize();
float width = (( (float)size.get(0))/320)*135;
int circleLeft = (int) (width * 3.3) / 100;
请记住,您必须尝试将设备的宽度和高度除以不同的单位,然后再乘以,以获得所需的确切大小,但一旦获得,它将在所有设备上工作,无论屏幕大小如何


希望这有帮助。快乐编码:

当我写这篇文章时,circleLayoutParams.setMarginscircleLeft,int-height*0.29,circleLeft,int-height*0.18;。。。我的图像以圆形显示,这就是问题所在。我每次都要为每台设备写。为什么?每台设备都有不同的像素大小和分辨率。所以你需要按照一般的程序把它们做成圆形。不是乘以宽度、除以高度等。。。。请看一些有价值的示例,然后继续:但我使用-DisplayMetrics=newdisplaymetrics;getWindowManager.getDefaultDisplay.getMetricsmetrics;int width=metrics.widthPixels;整数圈左=整数宽度*3.3/100;是相同的na..@gbl是相同的,但获取显示指标仅适用于大于或等于13的sdk级别,这就是我在条件中检查的内容。否则,我运行其他部分。您可以通过复制粘贴整个代码来尝试。我将ActivityTX放在getWindowManager之前,因为我在与activity不同的类中运行此代码。但是现在我已经把它从代码中删除了。:在我的代码中不工作:你能告诉我一件事吗。如果我在hdpi、mdpi中放置不同大小的图像,那么它会工作吗??这意味着b可以解决可拉伸的问题folder@gbl:是的,这肯定是一个潜在的问题。您可以从internet上查看,为了使应用程序的图像在不同的设备上看起来合适,应该将哪些不同大小的图像放入不同的可绘制文件夹中。您必须将这些大小的图像放在不同的文件夹中,以使应用程序与大多数设备兼容。实际上,这些文件夹具有不同的分辨率密度,android会根据运行应用程序的设备的分辨率自动从文件夹中拾取图像。所以,是的,这也可能是个问题。@gbl:很乐意帮忙,如果答案对你有帮助,请接受或投票。看见
ArrayList<Integer> size= GetDeviceScreenSize();
float width = (( (float)size.get(0))/320)*135;
int circleLeft = (int) (width * 3.3) / 100;