草庐IT

android - Imageview 在屏幕边缘缩小

coder 2023-12-27 原文

如果我想将我的 imageview 的位置移动到图像右侧的一部分将延伸到可见屏幕之外的位置,图像会缩小并且所有图像都会停留在屏幕边缘内,同样可以说,如果我降低图像以延伸到屏幕底部,图像会缩小并且永远不会延伸到屏幕的下边缘,

然而,如果我将图像的位置向上或向左移动,图像尺寸不会缩小并且图像会像我想要的那样延伸到屏幕之外,我很好奇是否有人对我如何解决这个问题有任何建议谢谢你

    mainLayout = (ViewGroup)findViewById(R.id.id_layout);

    deviceScreenSize = new Point();

    thisContext = this;

    mainDisplay = getWindowManager().getDefaultDisplay();
    mainDisplay.getSize(deviceScreenSize);
    offsetX = (deviceScreenSize.x / 320.0f);
    offsetY = (deviceScreenSize.y / 568.0f);

    mainIMG = new ImageView(this);
    mainIMG.setImageDrawable(getResources().getDrawable(R.drawable.myimg));
    SetPos(0, 0, 320, 568);
    mainIMG.setLayoutParams(layoutPositioner);
    mainLayout.addView(mainIMG);

    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

}

public void SetPos(float x, float y, float width, float height) {
    layoutPositioner = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT);
    layoutPositioner.topMargin = (int)(y * offsetY);
    layoutPositioner.leftMargin = (int)(x * offsetX);
    layoutPositioner.width = (int)(width * offsetX);
    layoutPositioner.height = (int)(height * offsetY);
}

public void SetPosWithoutOffset(float x, float y, float width, float height) {
    layoutPositioner = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT);
    layoutPositioner.topMargin = (int)(y);
    layoutPositioner.leftMargin = (int)(x);
    layoutPositioner.width = (int)(width);
    layoutPositioner.height = (int)(height);
}

这是问题的可视化示例

最佳答案

发生这种情况是因为在 SetPos() 方法中定位时您只处理lefttop 边距:

layoutPositioner.topMargin = (int)(y * offsetY);
layoutPositioner.leftMargin = (int)(x * offsetX);

因此,要解决此类问题,您必须按以下方式处理所有指示:

// first get screen width and height 
DisplayMetrics metrices = new DisplayMetrics();
this.getWindowManager().getDefaultDisplay().getMetrics(metrices);
int windowWidth = metrices.widthPixels;
int windowHeight = metrices.heightPixels;

//then set your margins 
int x_cord = (int)(x * offsetX);
int y_cord = (int)(y * offsetY);
layoutPositioner.topMargin = y_cord;
layoutPositioner.leftMargin = x_cord;
layoutPositioner.bottomMargin = windowHeight - (y_cord - your_image.getHeight());
layoutPositioner.rightMargin= windowWidth - (x_cord - your_image.getWidth());

关于android - Imageview 在屏幕边缘缩小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27219027/

有关android - Imageview 在屏幕边缘缩小的更多相关文章

  1. 屏幕录制为什么没声音?检查这2项,轻松解决 - 2

    相信很多人在录制视频的时候都会遇到各种各样的问题,比如录制的视频没有声音。屏幕录制为什么没声音?今天小编就和大家分享一下如何录制音画同步视频的具体操作方法。如果你有录制的视频没有声音,你可以试试这个方法。 一、检查是否打开电脑系统声音相信很多小伙伴在录制视频后会发现录制的视频没有声音,屏幕录制为什么没声音?如果当时没有打开音频录制,则录制好的视频是没有声音的。因此,建议在录制前进行检查。屏幕上没有声音,很可能是因为你的电脑系统的声音被禁止了。您只需打开电脑系统的声音,即可录制音频和图画同步视频。操作方法:步骤1:点击电脑屏幕右下侧的“小喇叭”图案,在上方的选项中,选择“声音”。 步骤2:在“声

  2. 安卓apk修改(Android反编译apk) - 2

    最近因为项目需要,需要将Android手机系统自带的某个系统软件反编译并更改里面某个资源,并重新打包,签名生成新的自定义的apk,下面我来介绍一下我的实现过程。APK修改,分为以下几步:反编译解包,修改,重打包,修改签名等步骤。安卓apk修改准备工作1.系统配置好JavaJDK环境变量2.需要root权限的手机(针对系统自带apk,其他软件免root)3.Auto-Sign签名工具4.apktool工具安卓apk修改开始反编译本文拿Android系统里面的Settings.apk做demo,具体如何将apk获取出来在此就不过多介绍了,直接进入主题:按键win+R输入cmd,打开命令窗口,并将路

  3. ruby &&= 边缘案例 - 2

    有点边缘情况,但知道为什么&&=会这样吗?我正在使用1.9.2。obj=Object.newobj.instance_eval{@bar&&=@bar}#=>nil,expectedobj.instance_variables#=>[],soobjhasno@barinstancevariableobj.instance_eval{@bar=@bar&&@bar}#ostensiblythesameas@bar&&=@barobj.instance_variables#=>[:@bar]#whywouldthisversioninitialize@bar?为了比较,||=将实例变量初始

  4. ruby - 是否有可能缩小 ruby 常量查找 - 2

    我有一个模块,其中包含名为String的类(以及其他类。)我需要按名称查找该类,如果没有这样的类,则优雅地回退。moduleMod1moduleStringendendMod1.const_get'String'#⇒Mod1::StringKernel.const_get'::Mod1::String'#⇒Mod1::String到目前为止,还不错。当我尝试查找不存在的类时,我预计会收到NameError,这很好。问题是如果在全局命名空间中存在一个具有给定名称的类,它将被返回:Mod1.const_get'Fixnum'#⇒Fixnum我明白其中的原因,但我的问题是:是否有现成的方法仅

  5. ruby-on-rails - 在服务器端检测屏幕尺寸和像素密度? - 2

    我一直在做一些研究,我想我已经知道答案了,但我想知道是否有任何方法可以在不使用javascript或依赖CSS3媒体的情况下获得设备的屏幕尺寸和像素密度查询。本质上,我正在研究如何获取屏幕分辨率和像素密度,以便服务器可以决定在URI请求中为服务器提供哪个图像。到目前为止,我还没有发现任何证据表明这是可能的,但我想嘿,为什么不问问呢? 最佳答案 我不完全同意上面的正确答案。实际上,这个答案在很多情况下都是正确的……但理论上并非如此。通常向Web服务器发出的请求包含一个User-Agent字段,从理论上讲,该字段可用于识别有关设备屏幕分

  6. ruby - 以编程方式在 Ruby 中获取桌面的屏幕截图? - 2

    我问了这个关于takingapictureofawebpageprogrammatically的问题,我已经下载并获得了webkit2png工作(为博客等HTML页面拍照)。太酷了,谢谢你给我看!现在我想开始做更多的事情,比如能够在加载Flash网站和我的桌面后拍照。是否可以使用webkit2png为Flash网站拍照(考虑到您可能需要等待几秒钟才能加载)?但主要问题是,如何以编程方式为桌面拍照?这将使我能够更好地控制正在发生的事情。 最佳答案 您可以使用xwd(1)获取根窗口的屏幕截图:xwd-display:0-root|xwd

  7. ruby - 如何缩小 ruby​​ 文件 - 2

    据我们所知,有很多工具或库可以缩小javascript、css,有没有缩小ruby​​文件的工具或库?在谷歌搜索后,该问题没有正确答案。非常感谢。 最佳答案 使用Jruby!当把你的应用程序打包成war或jar时,你可以给它传递一个compiled标志,它将把.rb文件编译成java的.class字节码文件Warblerdocumentation 关于ruby-如何缩小ruby​​文件,我们在StackOverflow上找到一个类似的问题: https://s

  8. Android Studio开发之使用内容组件Content获取通讯信息讲解及实战(附源码 包括添加手机联系人和发短信) - 2

    运行有问题或需要源码请点赞关注收藏后评论区留言一、利用ContentResolver读写联系人在实际开发中,普通App很少会开放数据接口给其他应用访问。内容组件能够派上用场的情况往往是App想要访问系统应用的通讯数据,比如查看联系人,短信,通话记录等等,以及对这些通讯数据及逆行增删改查。首先要给AndroidMaifest.xml中添加响应的权限配置 下面是往手机通讯录添加联系人信息的例子效果如下分成三个步骤先查出联系人的基本信息,然后查询联系人号码,再查询联系人邮箱代码 ContactAddActivity类packagecom.example.chapter07;importandroid

  9. Android 10.0 设置默认launcher后安装另外launcher后默认Launcher失效的功能修复 - 2

    1.前言 在10.0的系统rom定制化开发中,在系统中有多个launcher的时候,会在开机进入launcher的时候弹窗launcher列表,让用户选择进入哪个launcher,这样显得特别的不方便所以产品开发中,要求用RoleManager的相关api来设置默认Launcher,但是在设置完默认Launcher以后,在安装一款Launcher的时候,默认Launcher就会失效,在系统设置的默认应用中Launcher选项就为空,点击home键的时候会弹出默认Launcher列表,让选择进入哪个默认Launcher.所以需要从安装Launcher的流程来分析相关的设置。来解决问题设置默认La

  10. ruby - (Watir webdriver) 在 OSX 10.9 中使用多显示器时如何将浏览器移动到另一个屏幕 - 2

    我知道有一个名为browser.window.move_to(0,0)的函数可以将浏览器移动到不同的位置,但OSX10.9对它来说是全新的。有什么方法可以将浏览器移动到另一个桌面吗?例如。在“桌面2”中触发命令的控制台,但我希望浏览器出现在“桌面1”中。非常感谢! 最佳答案 哈,在我尝试这个之前我正要说这可能是不可能的:browser.window.move_to(-1200,0)我的第二台显示器位于主屏幕的左侧。有效。好问题。您需要花点时间才能正确使用它,但watir似乎能够使用整个显示器Canvas。例如,如果您的显示器位于主屏

随机推荐