如何在android

时间:2016-05-03 09:41:17

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

我在android中的水平视图中有图像列表。如果我单击特定图像的图像视图必须以编程方式突出显示边框颜色。 如何为图像视图的突出显示边框执行此操作。 在此先感谢。

Want to display border like as mentioned below

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

CODE

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);
 }
             });

5 个答案:

答案 0 :(得分:10)

  1. 在drawable文件夹中创建一个可绘制文件。
  2. highlight.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. 活动中的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"/>
      
    2. 这里填充很重要。

      1. 内部活动代码

        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.
                //
            }
        });
        
      2. 如果要删除背景,请使用以下代码:

        imv.setBackground(null);
        

        在活动xml中,填充属性很重要,因为高亮背景将采用与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);
        

        这里我是循环变量。

        这样您就可以拥有所有imageViews的对象。所有这些图像视图都将包含我们设置的ClickEvent。

答案 1 :(得分:1)

将图片放入RelativeLayout并添加1dp的边距并在开始时隐藏。 然后

imageView.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        relativeLayout.SetVisibility(View.VISIBLE)
    }
});

答案 2 :(得分:0)

首先,您的imageView保持相对布局。 e.g。

<RelativeLayout
    android:id="@+id/relative_border"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" 
    android:padding="4dp">

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="38dp"
        android:background="#FFFFFF"
        android:src="@drawable/ic_launcher" />
</RelativeLayout>

然后添加以下java代码。像这样的东西

final RelativeLayout layout = (RelativeLayout) findViewById(R.id.relative_border);
    ImageView imageView = (ImageView) findViewById(R.id.imageView1);


    imageView.imageView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            layout.setBackgroundColor(0xFF00FF00);
        }
    });

答案 3 :(得分:0)

使用线性布局创建自定义图像视图,并使用一些填充创建图像 基本上改变了布局的颜色,这将为图像视图提供边框

点击“使用”,

customImageView.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
     //use either v.getchild(position) or v.findViewById(R.id.borderlayout)
        LinearLayout borderlayout = v.getChild(0);
     // change the border color or visibility you like to do
    }
});

答案 4 :(得分:0)

尝试使用GradientDrawable

GradientDrawable gd = new GradientDrawable();
        gd.setColor(0xFF00FF00); // Changes this drawbale to use a single color instead of a gradient
        gd.setCornerRadius(5);
        gd.setStroke(1, 0xFF000000);
        Imageview imgs= (Imageview )findViewById(R.id.imgviw);
        imgs.setBackgroundDrawable(gd);