Android:单击/激活时更改许多图像视图上的图像

时间:2017-05-04 10:01:28

标签: android android-layout imageview selector

我注意到许多类似的答案,但不幸的是我在使用它们时遇到了麻烦。我是一些不同的图像视图按钮:

    ImageView filterWorld = (ImageView) kati.findViewById(R.id.filter_world);
    filterWorld.setOnClickListener(new ViewListeners(this.getContext()).new OneFragmentFilters(OneFragment.this) ) ;

    ImageView filterSports = (ImageView) kati.findViewById(R.id.filter_sports);
    filterSports.setOnClickListener(new ViewListeners(this.getContext()).new OneFragmentFilters(OneFragment.this)  ) ;

    ImageView filterEconomy = (ImageView) kati.findViewById(R.id.filter_economy);
    filterEconomy.setOnClickListener(new ViewListeners(this.getContext()).new OneFragmentFilters(OneFragment.this)  ) ;

他们每个人都使用 xml选择器作为资源,例如:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/world_active" android:state_selected="true">
</item>
<item android:drawable="@drawable/world_active" android:state_focused="true">
</item>
<item android:drawable="@drawable/world_active" android:state_pressed="true">
</item>
<item android:drawable="@drawable/filter_white_world">
</item>

布局xml:

       <ImageButton
        android:id="@+id/filter_world"
        android:layout_width="0dp"
        android:layout_height="40dp"
        android:scaleType="fitCenter"
        android:layout_weight="1"
        android:background="@drawable/world"
        android:paddingTop="4dp"
        android:paddingBottom="4dp"
        />

但问题是,每个按钮仅在单击时保持“活动”状态,而不是在显示特定内容时。此外,我希望每个按钮在单击另一个按钮时返回其默认状态。 提前谢谢!

修改 在你的帮助下,我设法在每次点击时更改按钮,但现在内容不会改变。 onclick听众似乎有一个colfict。这是我的代码:

    final ImageView filterWorld = (ImageView) kati.findViewById(R.id.filter_world);
    filterWorld.setOnClickListener(new ViewListeners(this.getContext()).new OneFragmentFilters(OneFragment.this) ) ;

    final ImageView filterSports = (ImageView) kati.findViewById(R.id.filter_sports);
    filterSports.setOnClickListener(new ViewListeners(this.getContext()).new OneFragmentFilters(OneFragment.this)  ) ;

filterWorld.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            filterWorld.setImageResource(R.drawable.world_active);
            filterSports.setImageResource(R.drawable.filter_white_sports); }
    });

filterSports.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            filterWorld.setImageResource(R.drawable.filter_white_world);
            filterSports.setImageResource(R.drawable.sports_active); }
    });

2 个答案:

答案 0 :(得分:0)

您可以在不使用选择器的情况下执行此操作.. 只需在每个imageview上实现点击列表器。

并更改所有imageview上的背景资源。

filterWorld.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            filterWorld.setImageResource(R.drawable.world_active);
            filterSport.setImageResource(R.drawable.filter_white_world);
            filterEconomy.setImageResource(R.drawable.filter_white_world);               
       }
    });

filterSport.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            filterSport.setImageResource(R.drawable.world_active);
            filterWorld.setImageResource(R.drawable.filter_white_world);
            filterEconomy.setImageResource(R.drawable.filter_white_world);               
       }
    });


filterEconomy.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            filterEconomy.setImageResource(R.drawable.world_active);
            filterSport.setImageResource(R.drawable.filter_white_world);
            filterWorld.setImageResource(R.drawable.filter_white_world);               
       }
    });

答案 1 :(得分:0)

当您按下按钮时,它将进入活动状态,并且您必须在按下另一个按钮时将其设置为默认状态。 因此,使用此

设置当前按钮以外的其他按钮为默认状态
 ImageView filterWorld = (ImageView) kati.findViewById(R.id.filter_world);
 filterWorld.setOnClickListener(new ViewListeners(this.getContext()).new OneFragmentFilters(OneFragment.this)
 filterSports.setSelected(false);
 filterSports.setPressed(false);
 filterEconomy.setSelected(false);
 filterEconomy.setPressed(false);
 ) ;