setLayoutParams第二次不起作用

4
我写了以下代码,首先增加ImageView的大小,然后在100毫秒后减小相同ImageView的大小。但是这段代码只会增加ImageView的大小,而不会减小它的大小,或者100毫秒延迟后的代码不会影响imageView的尺寸。
我做错了什么?
uiHandler.post(new Runnable()
{
    @Override
    public void run()
    {
        FrameLayout.LayoutParams layout = (android.widget.FrameLayout.LayoutParams) imageView.getLayoutParams();
        layout.height = (int) (2*iconsSizeInDP);
        layout.width = (int) (2*iconsSizeInDP);
        imageView.setLayoutParams(layout);
        try
        {
            Thread.sleep(50);
        }
        catch (InterruptedException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        Toast.makeText(getApplicationContext(), "Hello", Toast.LENGTH_SHORT).show();
        // following code block doesnt'affect imageView dimensions
        layout.height = (int) iconsSizeInDP;
        layout.width = (int) iconsSizeInDP;
        imageView.setLayoutParams(layout);
    }
});

致敬


е°қиҜ•еңЁдҪ иҜҙд»Јз ҒдёҚиө·дҪңз”Ёзҡ„ең°ж–№йҮҚж–°еҲӣе»әLayoutParamsпјҢеҚіFrameLayout.LayoutParams layout = (android.widget.FrameLayout.LayoutParams) imageView.getLayoutParams();гҖӮеҗҢж—¶еўһеҠ Thread.sleep()дёӯзҡ„ж—¶й—ҙгҖӮиҝҷж ·еҒҡеҸҜиғҪжӣҙе®№жҳ“зңӢеҮәеҢәеҲ«гҖӮ - Bipin Bhandari
当您使用 sleep 不断阻塞 UI 线程时,您认为重新布局是在哪个线程中进行的? - laalto
你确定第二个Set没有被调用吗?请使用AsyncTask而不是uiHandler,然后再进行测试。将第一部分复制到onPreExecute()中,在onBackground中休眠,并在onPostExecute()中设置第二个参数。 - Shayan Pourvatan
2个回答

3

您在同一个 UI 线程中更改了两次布局,因此只有最后一次更改才能生效。您应该将其分成 2 个 UI 线程,就像这样:

uiHandler.post(new Runnable()
{
    @Override
    public void run()
    {
        FrameLayout.LayoutParams layout = (android.widget.FrameLayout.LayoutParams) imageView.getLayoutParams();
        layout.height = (int) (2*iconsSizeInDP);
        layout.width = (int) (2*iconsSizeInDP);
        imageView.setLayoutParams(layout);
    }
};
uiHandler.postDelayed(new Runnable()
{
    @Override
    public void run()
    {
        Toast.makeText(getApplicationContext(), "Hello", Toast.LENGTH_SHORT).show();
        // following code block doesnt'affect imageView dimensions
        layout.height = (int) iconsSizeInDP;
        layout.width = (int) iconsSizeInDP;
        imageView.setLayoutParams(layout);
    }
},50);

好的。唯一剩下的问题是当用户把手指放在imageView上时,imageView会多次调整大小。有什么解决办法吗? - Umer Farooq

-1
请看这一行代码:FrameLayout.LayoutParams layout = (android.widget.FrameLayout.LayoutParams) imageView.getLayoutParams(); 当您尝试将FrameLayout.LayoutParams layout设置为全局变量时,请注意。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接