2017-12-08 11 views
1

나는, 알파 채널을 사용하는 경우에만 검은 윤곽에서 라운드 기본적으로 만들어 인 imageView 있습니다. 간단한 예로, imageview을 검정색이 아니고 흰색으로 표시해야합니다. 다른 모든 것은 동일하게 유지해야합니다. 인터넷 검색을 조금 후이 내가 생각 해낸 것입니다 : 적어도 ImageView에 어떤 영향을해야Xamarin, Android : ImageView.SetColorFilter()가 ImageView에서 아무런 효과가 없습니까?

ImageButton btnHeader = new ImageButton(this); 
btnHeader.SetBackgroundResource(Resource.Drawable.mainmenu_btn_news_bol); 
btnHeader.SetColorFilter(new Color(Color.White), PorterDuff.Mode.SrcIn); 

이 있지만, 그냥하지 않습니다. 마치 코드의 3 번째 줄이 바로 건너 뛰는 것처럼 보입니다. 이것이 버그 또는 나일 경우 누구나 설명해 줄 수 있습니까? ImageButton에 직접 컬러 필터를 설정

+0

색상 필터를 설정하면 원본 이미지에만 영향을 미치고 배경에는 영향을 미치지 않습니다. 즉, 대신에'btnHeader.SetImageResource (...)'를하면, 그것을 필터링합니다. 특별히 배경을 필터링하려고한다면, 배경 drawable에 직접 필터를 설정해야합니다 :'btnHeader.Background.SetColorFilter (...)'. –

+0

안녕하세요, 고마워요! 이것을 답으로 써서 받아 들일 수 있습니다. 완벽하게 작동합니다! :) 한가지 더 있습니다 : 동일한 액티비티에서 동일한 ImageButton을 두 번 사용합니다. 이제는 필터가 적용된 필터 대신 둘 다 흰색으로 표시됩니다. 너 나 좀 도와 줄 수있어? :) –

+1

그래, 먼저 드로어 블을 돌연변이시킬 수있어 같은 리소스에서 생성 된 다른 것들과 공통의 상태를 공유하지 않는다. 거기에'Mutate()'호출을 삽입하십시오 :'btnHeader.Background.Mutate(). SetColorFilter (...)'. (나는 그것이 맞다고 생각한다. 나는 Xamarin 문법을 추측하고있다.) –

답변

2

에만 소스 이미지가 아닌 배경에 영향을 미칠 것입니다. 즉, SetImage*() 방법으로 설정된 이미지에 영향을 미칩니다. 그게 무슨 뜻 이냐면 SetBackgroundResource() 전화 번호를 SetImageResource()으로 변경하면됩니다. 대신, 특별히 배경을 필터링하기 위해 노력하고, 경우

, 당신은 배경 Drawable에 직접 필터를 설정해야합니다. 예를 들면 다음과 같은 자원의 이미지를 사용하여 여러 View의이있는 경우, 다음 중 하나에 필터를 설정하면 모든 영향을 미치지 않도록 또한

btnHeader.Background.SetColorFilter(new Color(Color.White), PorterDuff.Mode.SrcIn); 

은 동일한 자원에서 생성 된 별도의 Drawable들, 기본적으로 공통의 상태를 공유합니다 다른 사람들도 마찬가지입니다. 당신은 필터를 적용하기 전에, 먼저에 Mutate()를 호출하여 별도의 새 상태가 특정 Drawable 생성 할 강제 할 수 있습니다. 예를 들어 배경 이미지가있는 경우 :

btnHeader.Background.Mutate().SetColorFilter(new Color(Color.White), PorterDuff.Mode.SrcIn); 
+1

훌륭하다. 당신의 지식은 높이 평가됩니다! :) –