我需要通过id查找视图,然后覆盖其onMeasure
方法。有谁知道怎么做?
以下内容在Java中不起作用,但从概念上讲它是我需要的:
ImageView myImage = (ImageView) findViewById(R.id.some_pic);
myImage.onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
int width = MeasureSpec.getSize(widthMeasureSpec);
int height = MeasureSpec.getSize(heightMeasureSpec);
showOther(width, height);
};
myImage.setImageBitmap(bmp);
Java提供此
ImageView myImage = new ImageView(this) {
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
int width = MeasureSpec.getSize(widthMeasureSpec);
int height = MeasureSpec.getSize(heightMeasureSpec);
showOther(width, height); }
};
或者
ImageView myImage. = (ImageView) findViewById(R.id.some_pic);
myImage.setImageBitmap(bmp);
我想过使用setOnMeasureListener
但是没有为ImageView定义这样的方法。关于如何实现这一目标的任何想法?
答案 0 :(得分:1)
我猜测some_pic ImageView是用XML声明然后膨胀的,可能是通过在Activity类中调用setContentView。通货膨胀意味着Android读取XML并将其转换为Java对象。一旦调用setContentView,所有对象都会被实例化,之后对它们的类进行更改为时已晚,例如重写ImageView的onMeasure方法。
我可以想到两个选择:
(首选)创建一个扩展ImageView并覆盖onMeasure的新类。在XML中声明some_pic时,不要使用ImageView标记,而是在新类(完全限定名称)之后命名标记:
< com.mycompany.myproject.MyImageView
机器人:ID = “@ + ID / some_pic”
...
/>
不要在XML中声明some_pic。在Activity的onCreate方法中,在调用setContentView之后,实例化一个新的ImageView并覆盖其onMeasure方法,就像你在问题的第一个Java选项中所做的那样。您必须手动将此ImageView插入到布局中;使用Google了解如何将视图插入另一个视图(here's an example)。
答案 1 :(得分:1)
我遇到了和你一样的问题。 也许你已经解决了这个问题,但这里没有明确的解决方案。 只需在新类中扩展ImageView,例如MyImageView,并在布局定义中使用它。这样你就可以使用:
MyImageView myImage = (MyImageView) findViewById(R.id.some_pic);
可以在第二个答案中找到示例类和xml: ImageView be a square with dynamic width?