Android ImageView点击选中后添加边框

具体的方法如下:
1、制作一个和ImageView中要显示的图片一样大小的透明图片。
2、通过绘图工具给透明图片画上边框,border.png。
3、把ImageView要显示的图片设置成background。
4、给ImageView添加点击事件处理,动态将带边框的透明图片加入ImageView,设置成src。


1. ThemeSelectActivity.java

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageView;

import com.reality.realityapp.R;

public class ThemeSelectActivity extends AppCompatActivity implements OnClickListener {

    private ImageView politicsImg;
    private ImageView sportsImg;
    private ImageView scienceImg;
    private ImageView financeImg;
    private ImageView militaryImg;
    private ImageView carsImg;
    private ImageView entertainmentImg;
    private ImageView houseImg;
    private ImageView gameImg;

    /** 当前的ImageView */
    private ImageView currentImage;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_theme_select);

        initView();
        initEvent();
    }

    private void initView() {
        politicsImg = (ImageView) findViewById(R.id.id_img_politics);
        sportsImg = (ImageView) findViewById(R.id.id_img_sports);
        scienceImg = (ImageView) findViewById(R.id.id_img_science);
        financeImg = (ImageView) findViewById(R.id.id_img_finance);
        militaryImg = (ImageView) findViewById(R.id.id_img_military);
        carsImg = (ImageView) findViewById(R.id.id_img_cars);
        entertainmentImg = (ImageView) findViewById(R.id.id_img_entertainment);
        houseImg = (ImageView) findViewById(R.id.id_img_house);
        gameImg = (ImageView) findViewById(R.id.id_img_game);
    }

    private  void initEvent() {

        politicsImg.setOnClickListener(this);
        sportsImg.setOnClickListener(this);
        scienceImg.setOnClickListener(this);
        financeImg.setOnClickListener(this);
        militaryImg.setOnClickListener(this);
        carsImg.setOnClickListener(this);
        entertainmentImg.setOnClickListener(this);
        houseImg.setOnClickListener(this);
        gameImg.setOnClickListener(this);
        //默认给第一个ImageView加边框
        politicsImg.setImageResource(R.drawable.border);
        currentImage = politicsImg;
    }

    @Override
    public void onClick(View v) {
        handleImageView((ImageView) v);
    }
    /**
     * 给点击选中的ImageView加边框,并将之前的ImageView边框清除
     * @param imageView 要添加边框的ImageView
     */
    public void handleImageView(ImageView imageView){
        currentImage.setImageDrawable(null);
        imageView.setImageResource(R.drawable.border);
        currentImage = imageView;
    }}

修改部分代码,增加一个choseTags数组存储已选择的imageview,另外由只能选择一个改为可以选择多个,再点击一次取消选择。

package com.reality.realityapp.ui.activity;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;

import com.reality.realityapp.R;

import java.util.ArrayList;

public class ThemeSelectActivity extends AppCompatActivity implements OnClickListener {

    private Button skipButton;
    private ImageView politicsImg;
    private ImageView sportsImg;
    private ImageView scienceImg;
    private ImageView financeImg;
    private ImageView militaryImg;
    private ImageView carsImg;
    private ImageView entertainmentImg;
    private ImageView houseImg;
    private ImageView gameImg;

    private ArrayList<Integer> chosenTags = new ArrayList<Integer>();
    /** 当前的ImageView */
    private ImageView currentImage;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_theme_select);

        initView();
        initEvent();
    }

    private void initView() {
        skipButton = (Button) findViewById(R.id.id_btn_skip);
        politicsImg = (ImageView) findViewById(R.id.id_img_politics);
        politicsImg.setTag(1);
        sportsImg = (ImageView) findViewById(R.id.id_img_sports);
        sportsImg.setTag(2);
        scienceImg = (ImageView) findViewById(R.id.id_img_science);
        scienceImg.setTag(3);
        financeImg = (ImageView) findViewById(R.id.id_img_finance);
        financeImg.setTag(4);
        militaryImg = (ImageView) findViewById(R.id.id_img_military);
        militaryImg.setTag(5);
        carsImg = (ImageView) findViewById(R.id.id_img_cars);
        carsImg.setTag(6);
        entertainmentImg = (ImageView) findViewById(R.id.id_img_entertainment);
        entertainmentImg.setTag(7);
        houseImg = (ImageView) findViewById(R.id.id_img_house);
        houseImg.setTag(8);
        gameImg = (ImageView) findViewById(R.id.id_img_game);
        gameImg.setTag(9);
    }

    private  void initEvent() {

        skipButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                toFirstPageActivity();
            }
        });

        politicsImg.setOnClickListener(this);
        sportsImg.setOnClickListener(this);
        scienceImg.setOnClickListener(this);
        financeImg.setOnClickListener(this);
        militaryImg.setOnClickListener(this);
        carsImg.setOnClickListener(this);
        entertainmentImg.setOnClickListener(this);
        houseImg.setOnClickListener(this);
        gameImg.setOnClickListener(this);
        //默认给第一个ImageView加边框
        politicsImg.setImageResource(R.drawable.border);
        currentImage = politicsImg;
    }

    /**
     * 跳转到首页
     */
    private void toFirstPageActivity() {
        Intent intent = new Intent(this, FirstPageActivity.class);
        startActivity(intent);
        finish();
    }
    @Override
    public void onClick(View v) {
        int tag = (Integer)v.getTag();
        for (int i=0; i<chosenTags.size();i++) {
            if (tag==chosenTags.get(i)) {
                chosenTags.remove(i);
                cancelSelect((ImageView) v);
                return;
            }
        }
        chosenTags.add(tag);
        select((ImageView) v);
    }
    /**
     * 给点击选中的ImageView加边框,若已选中则取消边框
     * @param imageView 要添加/取消边框的ImageView
     */
    public void select(ImageView imageView){
        imageView.setImageResource(R.drawable.border);
    }
    public void cancelSelect(ImageView imageView){
        imageView.setImageDrawable(null);
    }
}


2、activity_theme_select.xml
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.reality.realityapp.ui.activity.ThemeSelectActivity">

    <FrameLayout
        android:id="@+id/frameLayout"
        android:layout_width="0dp"
        android:layout_height="228dp"
        android:layout_marginBottom="13dp"
        android:background="@color/deepgray"
        app:layout_constraintBottom_toTopOf="@+id/textView"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent">

        <Button
            android:id="@+id/id_btn_skip"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="right"
            android:layout_margin="32dp"
            android:background="@drawable/btn_bg_skip"
            android:minHeight="0dp"
            android:minWidth="0dp"
            android:paddingBottom="4dp"
            android:paddingLeft="12dp"
            android:paddingRight="12dp"
            android:paddingTop="4dp"
            android:text="跳过"
            android:textColor="@color/white"
            android:textSize="14dp"
            tools:layout_editor_absoluteX="315dp"
            tools:layout_editor_absoluteY="16dp" />

    </FrameLayout>

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="8dp"
        android:layout_marginStart="16dp"
        android:text="请选择感兴趣的领域:"
        app:layout_constraintBottom_toTopOf="@+id/gridLayout"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/frameLayout" />

    <GridLayout
        android:id="@+id/gridLayout"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:layout_marginBottom="8dp"
        android:layout_marginEnd="8dp"
        android:layout_marginStart="8dp"
        android:rowCount="3"
        android:columnCount="3"
        android:orientation="horizontal"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/textView">

        <ImageView
            android:id="@+id/id_img_politics"
            android:layout_width="119dp"
            android:layout_height="119dp"
            android:layout_marginTop="10dp"
            android:layout_marginLeft="10dp"
            android:background="@drawable/politics" />

        <ImageView
            android:id="@+id/id_img_sports"
            android:layout_width="119dp"
            android:layout_height="119dp"
            android:layout_marginTop="10dp"
            android:layout_marginLeft="10dp"
            android:background="@drawable/sports" />
        <ImageView
            android:id="@+id/id_img_science"
            android:layout_width="119dp"
            android:layout_height="119dp"
            android:layout_marginTop="10dp"
            android:layout_marginLeft="10dp"
            android:background="@drawable/technology" />

        <ImageView
            android:id="@+id/id_img_finance"
            android:layout_width="119dp"
            android:layout_height="119dp"
            android:layout_marginLeft="10dp"
            android:layout_marginTop="10dp"
            android:background="@drawable/finance" />

        <ImageView
            android:id="@+id/id_img_military"
            android:layout_width="119dp"
            android:layout_height="119dp"
            android:layout_marginLeft="10dp"
            android:layout_marginTop="10dp"
            android:background="@drawable/military" />

        <ImageView
            android:id="@+id/id_img_cars"
            android:layout_width="119dp"
            android:layout_height="119dp"
            android:layout_marginLeft="10dp"
            android:layout_marginTop="10dp"
            android:background="@drawable/cars" />

        <ImageView
            android:id="@+id/id_img_entertainment"
            android:layout_width="119dp"
            android:layout_height="119dp"
            android:layout_marginLeft="10dp"
            android:layout_marginTop="10dp"
            android:background="@drawable/entertainment" />

        <ImageView
            android:id="@+id/id_img_house"
            android:layout_width="119dp"
            android:layout_height="119dp"
            android:layout_marginLeft="10dp"
            android:layout_marginTop="10dp"
            android:background="@drawable/house" />

        <ImageView
            android:id="@+id/id_img_game"
            android:layout_width="119dp"
            android:layout_height="119dp"
            android:layout_marginLeft="10dp"
            android:layout_marginTop="10dp"
            android:background="@drawable/game" />
    </GridLayout>
</android.support.constraint.ConstraintLayout>

参考文章:
Android ImageView点击选中后添加边框
认识与入门 Markdown

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 178,485评论 25 709
  • Day1: 在代码中通过R.string.hello_world可以获得该字符串的引用; 在XML中通过@stri...
    冰凝雪国阅读 1,608评论 0 5
  • 雁影粘云,迢迢恨水兰舟走。 凉茵凄绣,愁暗生别后。 背燕鸾分,春景还依旧。 小山秀,莫倾鐏酒,魂断鲛绡透。 ...
    双生夕阅读 267评论 0 1
  • 上周末,有朋友从别的城市过来玩,就约几个好朋友聚在一起吃饭聊天,兴奋地回忆着以前的快乐时光,聊着聊着就谈到现在,曾...
    小哧阅读 696评论 0 1
  • 我们也许会被波涛汹涌的大海震撼,也许会被气势磅礴的崇山震撼,也许是壮美的日出,也许是浩瀚的宇宙,都会让人慨叹...
    暮雪朝闻阅读 305评论 0 3

友情链接更多精彩内容