ImageView
公开方法 setImageState(int[] state, boolean merge)
它做什么???
我该如何使用???
???
state
和merge
是什么
我想在我的应用程序中使用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 }
答案 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))
它将以州为重点绘制图像