ImageView方法`setImageState(int [] state,boolean merge)`做什么?

时间:2013-12-03 10:05:06

标签: android imageview imagebutton

ImageView 公开方法 setImageState(int[] state, boolean merge)

没有参考文档
  • 它做什么???

  • 我该如何使用???

  • ???

  • 的参数statemerge是什么

我想在我的应用程序中使用ImageButton作为指示器,针对不同的状态使用相当多的不同图像。所以我认为这可能有用,但没有信息。

以下是来自ImageView的源代码,但我不是更明智的。

440     public void setImageState(int[] state, boolean merge) {
441         mState = state;
442         mMergeState = merge;
443         if (mDrawable != null) {
444             refreshDrawableState();
445             resizeFromDrawable();
446         }
447     }

2 个答案:

答案 0 :(得分:2)

pskink慷慨地指出 ImageView 方法 setImageState() 中的mMergeState会再次出现在 onCreateDrawableState(int extraSpace)方法中如下所示:

686     @Override
687     public int[] onCreateDrawableState(int extraSpace) {
688         if (mState == null) {
689             return super.onCreateDrawableState(extraSpace);
690         } else if (!mMergeState) {
691             return mState;
692         } else {
693             return mergeDrawableStates(
694                     super.onCreateDrawableState(extraSpace + mState.length), mState);
695         }
696     }

如果您在 merge 中将 setImageState(state, merge) 设置为false,那么下次视图系统调用 {{1 }} 它只会返回您在 onCreateDrawableState() 中提供的状态 但是,如果您在 setImageState(state, merge) 中将 merge 设置为true,则下次视图系统调用 setImageState(state, merge) 时它将返回与您在 onCreateDrawableState() 中提供的州合并的现有州。

换句话说,是 setImageState(state, merge) 参数确定您提供的 merge 是否应与之结合或替换当前状态下次视图系统调用 state 时的ImageView。

我仍然相信应该在文档中添加一些参数说明。到目前为止,我还没有找到任何其他公开方法,没有任何文档。

答案 1 :(得分:1)

简单地说,它允许您使用系统的默认状态设置图像状态。

假设您有可绘制的图像xml定义,并设置为imageView.setImageResource(id_your_drawable_xml)

你可绘制的xml具有以州为中心的项目

 <item android:state_focused="false" android:state_selected="true">
or
 <item android:state_focused="true" android:state_selected="true">

由于我们直接从代码中了解ImageView,因此我们无法设置聚焦状态(不存在方法setFocusedState),但您可以通过调用

来实现
myImageView.setImageState(View.FOCUSED,true) - with merge prev state like selected (set by setSelected(true))

它将以州为重点绘制图像