频道栏目
首页 > 程序开发 > 移动开发 > 其他 > 正文
imageview获取宽高
2017-02-21 14:49:00      个评论    来源:琦琦的博客  
收藏   我要投稿

imageview获取宽高:在开发中,可以通过getDrawable().getBounds().height()与getDrawable().getIntrinsicHeight()两种方法来获得图片资源的真实宽高。

ImageView在不同的分辨率的屏幕中获取的宽高值是不准确的,需要根据density缩放

   // 通过getBounds() 获得ImageView中Image的真实宽高,
                int dw = (int) (iv.getDrawable().getBounds().width());
                int dh = (int) (iv.getDrawable().getBounds().height());

                Log.i(TAG, MainActivity.this.getResources().getDisplayMetrics().density+"drawable_X = "
                 + dw + ", drawable_Y = " + dh);


        // 通过getIntrinsic获得ImageView中Image的真实宽高,
                int inDw = iv.getDrawable().getIntrinsicWidth();
                int inDh = iv.getDrawable().getIntrinsicHeight();
                Log.i(TAG, MainActivity.this.getResources().getDisplayMetrics().density+
                "Intrinsic_drawable_X = " + dw + ", Intrinsic_drawable_Y = " + dh);

正确获取方式如下:

public class MainActivity extends Activity {

    protected static final String TAG = "MainActivity";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        final ImageView iv = (ImageView) findViewById(R.id.iv);
        iv.setImageResource(R.drawable.ic_launcher);

        // 等待ImageVivew加载完成
        iv.post(new Runnable() {

            @Override
            public void run() {
                // TODO Auto-generated method stub
                // ImageView的宽和高,
                Log.i(TAG, "iv_W = " + iv.getWidth() + ", iv_H = " + iv.getHeight());
                // 显示的逻辑密度==密度/160
                float density = MainActivity.this.getResources().getDisplayMetrics().density;
                // 通过getIntrinsic 获得ImageView中Image的真实宽高,
                int dw = (int) (iv.getDrawable().getBounds().width()/density);
                int dh = (int) (iv.getDrawable().getBounds().height()/density);
                Log.i(TAG, MainActivity.this.getResources().getDisplayMetrics().density
                +"drawable_X = " + dw + ", drawable_Y = " + dh);
                // 通过get获得ImageView中Image的真实宽高,
                int inDw = (int) (iv.getDrawable().getIntrinsicWidth()/density); //单位是dp
                int inDh = (int) (iv.getDrawable().getIntrinsicHeight()/density); //单位是dp
                Log.i(TAG, MainActivity.this.getResources().getDisplayMetrics().density
+"Intrinsic_drawable_X = " + dw + ", Intrinsic_drawable_Y = " + dh);
            }
        });
    }
}
关于其他的两个方法

getHeight(): View在设定好布局后整个View的高度。
getMeasuredHeight(): 对View上的内容进行测量后得到的View内容佔据的高度,前提是你必须在父布局的onLayout()方法或者此View的onDraw()方法调调 用measure(0,0);(measure 参数的值你可以自己定义),否则你得到的结果和getHeight()得到的结果一样。

点击复制链接 与好友分享!回本站首页
上一篇:APP实用开发之定制自己的下拉刷新头
下一篇:ListView的优化
相关文章
图文推荐
点击排行

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站