2013-11-28 36 views
6

正如iOS開發人員告訴我的,當有人點擊它時(我不知道它有多真實),iOS會使圖像變暗,所以我需要同樣的東西。Java Android如何讓ImageView變暗onClick

據我所知,我需要一個通常的selector.xml來繪製不同的狀態。 我需要的是以簡單的方式使圖像變暗,可能會以某種方式在xml-drawable中顯示,因此我不必使用其中沒有技能的Photoshop。

有沒有辦法在xml級別這樣做?

+0

一種可能性是將您的imageview與另一個視圖重疊,然後在視圖上有選擇器。在選擇器中,你可以選擇較暗的背景 – MalaKa

回答

4

您可能會將dark rectangle放在您的位圖後面並設置Bitmap'sOpacity而不是在xml中嘗試。

+0

我認爲這是最簡單的決定,謝謝 – user2976267

+0

@Homo sapiens:你的意思是黑暗的矩形? – Ashwin

+2

如果圖像不是矩形,並且它具有一些透明度,該怎麼辦?如果我們放置一個黑色的矩形,那麼圖像會得到效果,但透明區域看起來很奇怪。 – Arunkumar

0

我認爲你可以做到這一點添加clickListener到您的圖片...

ImageView image = (ImageView) view.findViewById(R.id.image); 
icon.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       ImageView image = (ImageView)v; 
       image.setImageAlpha(alpha); 

      } 
     }); 
+0

正確,但是您絕對需要在視圖後面放置較深的矩形或深色的圖像,然後通過更改視圖的Alpha來獲得所需的效果。 –

6

你可以在你的Java類中使用下面的代碼:

mView.getBackground().setColorFilter(Color.parseColor(<Color code of your choice>), PorterDuff.Mode.DARKEN); 

上面這一行改變了顏色在Color.parseColor()中提供的顏色分享,以及如何使用PorterDuff.Mode定義它的陰影。點擊按鈕調用上面的代碼,檢查顏色變化是否生效。

+1

'getBackground()'可能返回null,因此在使用前請檢查爲空。 – Miao1007

0

我用

private void darkenImage(ImageView imageView) 
{ 
    imageView.setColorFilter(Color.rgb(123, 123, 123), android.graphics.PorterDuff.Mode.MULTIPLY); 
} 

private void undarkenImage(ImageView imageView) 
{ 
    imageView.clearColorFilter(); 
} 

private boolean isImageDarkened(ImageView image) 
{ 
    return image.getColorFilter() != null; 
} 

作品真的很好!