具体的方法如下:
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>