android - 如何通过使 ImageView 变灰来模拟按下的按钮?
android - How to simulate button pressed by greying out an ImageView?
我想在屏幕底部创建一个看起来像这样的控制面板。
这是图片
而且我想通过将点击的项目变黑来模拟按钮按下,而所有未点击的项目都变灰。如图所示,图片图标已被点击
目前,我的解决方案是叠加两行相同的 ImageView。一层由所有黑色图标组成,一层由所有灰色图标组成。当我点击一个图像时,我 运行 一个看起来像这样的代码:
private void galleryClicked() {
mGalleryImageView_unclicked.setVisibility(View.INVISIBLE);
mPersonalImageView_unclicked.setVisibility(View.VISIBLE);
mExploreImageView_unclicked.setVisibility(View.VISIBLE);
mMenuImageView_unclicked.setVisibility(View.VISIBLE);
mGalleryImageView_clicked.setVisibility(View.VISIBLE);
mPersonalImageView_clicked.setVisibility(View.INVISIBLE);
mExploreImageView_clicked.setVisibility(View.INVISIBLE);
mMenuImageView_clicked.setVisibility(View.INVISIBLE);
}
我只是想知道是否有更有效或更好的方法来做到这一点。当我 运行 在我的 phone 上进行此操作时,会感到响应有些滞后。谢谢!
我有更好的解决方案,那就是使用选择器
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/clicked" android:state_enabled="true" />
<item android:drawable="@drawable/unclicked" android:state_enabled="false" />
</selector>
所以现在您只需设置 mGalleryImageView.setEnabled(true);
或 mGalleryImageView.setEnabled(false)
您可以将 Radiobutton
与 RadioGroup
一起使用,每个 RadioButton
都有自己的选择器 Drawable
。然后 RadioGroup
将为您进行选择(选中一个将取消选中所有其他项)。
示例代码:
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<RadioGroup
android:id="@+id/tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:orientation="horizontal">
<RadioButton
android:id="@+id/item_one"
style="@style/TabItem"
android:checked="true"
android:drawableTop="@drawable/selector_tab_item_one" />
<RadioButton
android:id="@+id/item_two"
style="@style/TabItem"
android:drawableTop="@drawable/selector_tab_item_two" />
<RadioButton
android:id="@+id/item_three"
style="@style/TabItem"
android:drawableTop="@drawable/selector_tab_item_three" />
<RadioButton
android:id="@+id/item_four"
style="@style/TabItem"
android:drawableTop="@drawable/selector_tab_item_four"/>
</RadioGroup>
</RelativeLayout>
在res/values/styles.xml
中声明@style/TabItem
:
<style name="TabItem" parent="android:style/Widget.Holo.Light.TextView">
<item name="android:layout_width">0dp</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:layout_weight">1</item>
<item name="android:paddingTop">15dp</item>
<item name="android:drawablePadding">1dp</item>
<item name="android:button">@null</item>
<item name="android:background">@null</item>
<item name="android:gravity">bottom|center_horizontal</item>
</style>
选择器Drawable
是这样的:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/item_one_highlighted" android:state_checked="true"/>
<item android:drawable="@drawable/item_one_highlighted" android:state_pressed="true"/>
<item android:drawable="@drawable/item_one_default" />
</selector>
结果:
我想在屏幕底部创建一个看起来像这样的控制面板。
这是图片
而且我想通过将点击的项目变黑来模拟按钮按下,而所有未点击的项目都变灰。如图所示,图片图标已被点击
目前,我的解决方案是叠加两行相同的 ImageView。一层由所有黑色图标组成,一层由所有灰色图标组成。当我点击一个图像时,我 运行 一个看起来像这样的代码:
private void galleryClicked() {
mGalleryImageView_unclicked.setVisibility(View.INVISIBLE);
mPersonalImageView_unclicked.setVisibility(View.VISIBLE);
mExploreImageView_unclicked.setVisibility(View.VISIBLE);
mMenuImageView_unclicked.setVisibility(View.VISIBLE);
mGalleryImageView_clicked.setVisibility(View.VISIBLE);
mPersonalImageView_clicked.setVisibility(View.INVISIBLE);
mExploreImageView_clicked.setVisibility(View.INVISIBLE);
mMenuImageView_clicked.setVisibility(View.INVISIBLE);
}
我只是想知道是否有更有效或更好的方法来做到这一点。当我 运行 在我的 phone 上进行此操作时,会感到响应有些滞后。谢谢!
我有更好的解决方案,那就是使用选择器
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/clicked" android:state_enabled="true" />
<item android:drawable="@drawable/unclicked" android:state_enabled="false" />
</selector>
所以现在您只需设置 mGalleryImageView.setEnabled(true);
或 mGalleryImageView.setEnabled(false)
您可以将 Radiobutton
与 RadioGroup
一起使用,每个 RadioButton
都有自己的选择器 Drawable
。然后 RadioGroup
将为您进行选择(选中一个将取消选中所有其他项)。
示例代码:
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<RadioGroup
android:id="@+id/tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:orientation="horizontal">
<RadioButton
android:id="@+id/item_one"
style="@style/TabItem"
android:checked="true"
android:drawableTop="@drawable/selector_tab_item_one" />
<RadioButton
android:id="@+id/item_two"
style="@style/TabItem"
android:drawableTop="@drawable/selector_tab_item_two" />
<RadioButton
android:id="@+id/item_three"
style="@style/TabItem"
android:drawableTop="@drawable/selector_tab_item_three" />
<RadioButton
android:id="@+id/item_four"
style="@style/TabItem"
android:drawableTop="@drawable/selector_tab_item_four"/>
</RadioGroup>
</RelativeLayout>
在res/values/styles.xml
中声明@style/TabItem
:
<style name="TabItem" parent="android:style/Widget.Holo.Light.TextView">
<item name="android:layout_width">0dp</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:layout_weight">1</item>
<item name="android:paddingTop">15dp</item>
<item name="android:drawablePadding">1dp</item>
<item name="android:button">@null</item>
<item name="android:background">@null</item>
<item name="android:gravity">bottom|center_horizontal</item>
</style>
选择器Drawable
是这样的:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/item_one_highlighted" android:state_checked="true"/>
<item android:drawable="@drawable/item_one_highlighted" android:state_pressed="true"/>
<item android:drawable="@drawable/item_one_default" />
</selector>
结果: