android - 当我在 android 中单击 ImageView 时如何突出显示 ImageView 的边框

标签 android android-layout android-fragments android-studio android-imageview

我在 android 中有水平 View 中的图像列表。如果我单击 ImageView 的特定图像,则必须以编程方式突出显示边框颜色。 我怎样才能为 ImageView 的突出显示边框执行此操作。 提前致谢。

Want to display border like as mentioned below

当用户单击 ImageView 的单个图像时,我想像这样显示 ImageView 的边框。

代码

horizontalimage=(LinearLayout)findViewById(R.id.linearimage);
                                               // final RelativeLayout r1=(RelativeLayout)findViewById(R.id.relative_border);
                                             //   frame=(FrameLayout)findViewById(R.id.framelayout
  if(multipleimage.length()>0) {
  for (int j = 0;j<multipleimage.length();j++)
    {
    pimages=multipleimage.getJSONObject(j);
    JSONObject oneimage=multipleimage.getJSONObject(0);
    ii= new ImageView(singleshooppingcart.this);
    multipleimages=(ImageView)findViewById(R.id.singleimage);

   ii.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
   LinearLayout.LayoutParams image = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
   image.width=100;
   image.height=1
   image.setMargins(5,0,0,0);


   final String multimgs=pimages.getString("original_res");
   String oneimg=oneimage.getString("original_res");


   String[] img2 = multimgs.split("\\.");
   String imagone=productpath + alertObj.getString("seller_id")+  '/' + img2[0] + '(' + '1' + '0' + '0' + ')' + '.' + img2[1];
   String singleiamges=productpath + alertObj.getString("seller_id")+  '/' + oneimg;
// displayimages=productpath + alertObj.getString("seller_id")+  '/' + multimgs[];
   YelloPage.imageLoader.displayImage(imagone, ii, options);
   YelloPage.imageLoader.displayImage(singleiamges, multipleimages, options);

   ii.setLayoutParams(image);
 // ii.setBackgroundResource(R.drawable.imgviewpress);
 //  ii.setBackground(R.drawable.imgviewpress);
                                                       /* GradientDrawable gd = new GradientDrawable();
     gd.setColor(R.drawable.imageviewhighlight); // Changes this drawbale to use a single color instead of a gradient
     gd.setCornerRadius(5);
                  // gd.setStroke(1, 0xFF000000);
     ii.setBackgroundDrawable(gd);*/

     horizontalimage.addView(ii);
     ii.setOnClickListener(new View.OnClickListener() {
       @Override
   public void onClick(View view) {

   Drawable highlight = getResources().getDrawable( R.drawable.imgviewpress);
   ii.setBackground(highlight);
   int indexOfImage = horizontalimage.indexOfChild(view);
   String img1=String.valueOf(indexOfImage);



// Toast.makeText(getApplicationContext(),img1,Toast.LENGTH_LONG).show();
    try {
         images = multipleimage.getJSONObject(Integer.parseInt(img1)).getString(String.valueOf("original_res"));
        } catch (JSONException e) {
         e.printStackTrace();
        }
       // Toast.makeText(getApplicationContext(),images,Toast.LENGTH_LONG).show();
      // multipleimages.setImageResource(indexOfImage);
         try 
         YelloPage.imageLoader.displayImage(productpath + alertObj.getString("seller_id")+"/"+images, multipleimages, options);
         } catch (JSONException e) {
         e.printStackTrace();
         }

        // String img1=String.valueOf(indexOfImage);
     // YelloPage.imageLoader.displayImage(displayimages[indexOfImage], multipleimages, options);
 }
             });

最佳答案

  1. 在 drawable 文件夹中创建一个 drawable 文件。

高亮.xml

<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
    <corners android:radius="0dp"/>
    <solid android:color="@android:color/transparent"/>
    <stroke android:color="#FFC830"
        android:width="3dp"/>
</shape>
  1. 在您的 Activity 中使用 ImageView

    <ImageView
    android:id="@+id/iv_test"
    android:layout_width="150dp"
    android:layout_height="150dp"
    android:padding="3dp"
    android:src="@drawable/yourImageName"
    android:tint="@color/colorAccent"/>
    

这里填充很重要。

  1. 内部 Activity 代码

    imv.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Drawable highlight = getResources().getDrawable( R.drawable.highlight);
            imv.setBackground(highlight);
            //
            //Do your other stuff here.
            //
        }
    });
    

如果要删除背景,请使用此代码:

imv.setBackground(null);

在 Activity xml 中,padding 属性很重要,因为高亮背景将采用与 imageview 相同的大小。因此,如果 ImageView 中有任何图像,我们将无法看到背景/高光。因此 padding 属性将图像向内推了一点,让高光可见。

输出

First When Clicked

更新

在您的代码中实现 View.OnClickListener。

并更改您的 onClick() 方法

@Override
public void onClick(View v) {
    Drawable highlight = getResources().getDrawable( R.drawable.highlight );
    for (int j=0;j<ii.length;j++)
    {
        if (ii[j].getBackground()!=null) {
            ii[j].setBackground(null);
        }
    }
    v.setBackground(highlight);

    //
    //Do what you want to do when clicking on the imageview
    //
}

现在你正在使用

ii=new ImageView(singleshooppingcart.this);

把它变成一个数组然后像这样使用它

ii[i]=new ImageView(singleshooppingcart.this);

改变这个

ii.setOnClickListener(new View.OnClickListener() {
   @Override
 public void onClick(View view) {

 Drawable highlight = getResources().getDrawable(R.drawable.imgviewpress);
ii.setBackground(highlight);

    ii[i].setOnClickListener(this);

这里我是循环变量。

这样您将拥有所有 imageView 的对象。所有这些 ImageView 都将有一个我们设置的 ClickEvent。

关于android - 当我在 android 中单击 ImageView 时如何突出显示 ImageView 的边框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37000700/

相关文章:

android - 一项 Activity 的两种不同布局

android - 从 XML 加载 fragment 时动画 fragment 转换

java - 这段 XML 代码有什么问题?

java - 在 Android Q 中从外部存储访问照片

android - 如何在底部应用栏上的 FloatingActionButton(fab)上方显示 Snackbar( Material 设计)

java - 我有两个几乎相同的方法,如何重构它们?

android - 快速提问 : Can too many fragments make an app slow and how many?

android - Firebase 实时数据库连接被终止 : Different Region

java - 从 Android 手机获取可靠的 MSISDN?语音信箱号码 Line1Number

android - 工具 :listitem for custom view extending RecyclerView