2017-01-07 9 views
0

이미지의 색상을 스펙트럼처럼 왼쪽에서 오른쪽으로 변경하고 색상이 변경 될 때이를 보려고합니다. 여기 내 코드가 있습니다. 문제는 변경되는 것입니다. buttom을 클릭 한 후 원본 이미지에서 최종 이미지로 바뀌지 만 변경 방법을 모르므로 변경 사항을 볼 수 있습니다.안드로이드가 왼쪽에서 오른쪽으로 이미지의 색상을 부드럽게 변경합니다.

final ImageView imgView = (ImageView) findViewById(R.id.imageView); 
    Button btn = (Button) findViewById(R.id.button1); 

    Bitmap bitmap = ((BitmapDrawable) imgView.getDrawable()).getBitmap(); 
    final Bitmap mutableBitmap = bitmap.copy(Bitmap.Config.ARGB_8888, true); 

    btn.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View arg0) { 


      for(x = 0; x < mutableBitmap.getWidth() ; x++){ 
       runOnUiThread (new Thread(new Runnable() { 
        public void run() { 
         try { 
             for(int y = 0; y < mutableBitmap.getHeight() ; y++){ 
              int c = mutableBitmap.getPixel(x, y); 
              mutableBitmap.setPixel(x, y, Color.rgb(Color.red(c), (200 - Color.green(c)), Color.blue(c))); 
              Log.d("IMAGE", ""+x); 
             } 
             imgView.setImageBitmap(mutableBitmap); 
              Thread.sleep(100); 
             } catch (InterruptedException e) { 
              // TODO Auto-generated catch block 
              e.printStackTrace(); 
             } 
          } 

       })); 
      } 
     } 


    }); 
+0

[색 그라디언트] (https://en.wikipedia.org/wiki/Color_gradient)를 의미합니까? – CommonsWare

+0

예, 예를 들어 흰색으로 시작하여 녹색으로 계속 종료됩니다. –

+0

자신의 비트 맵을 어셈블하는 대신에'GradientDrawable'을 사용하는 것을 고려하십시오. – CommonsWare

답변

1

드로어 블 폴더를 마우스 오른쪽 버튼으로 클릭하고 새로 만들기 \ 그리기 가능 리소스 파일을 선택할 수 있습니다. 파일의 이름을 선택하고 확인을 클릭하십시오. 이 코드를 추가 할 수 후 :

<shape xmlns:android="http://schemas.android.com/apk/res/android" 
android:shape="rectangle"> 
<gradient 
    android:angle="135" 
    android:centerColor="@color/colorAccent" 
    android:endColor="@color/colorPrimaryDark" 
    android:startColor="@color/colorPrimary" 
    android:type="linear" /> 

당신은 당신이 color.xml에서 새로운 색상을 생성하고 사용할 수 있습니다. 그런 다음 Java 코드에서 :

imageView.setImageDrawable(getResources().getDrawable(R.drawable.YOURDRAWABLENAME)); 
1

나는 전문가가 아니지만, 난 당신이 원하는 색상 선택이 시도 할 수 있다고 생각 :

int[] colors = {0xFFFFFFFF, 0xFFFF0000, 0xFF00FF00} 

을 그리고 이것은 적용하기 :

mutableBitmap.setPixel(x, y, new GradientDrawable(GradientDrawable.Orientation.LEFT_RIGHT, colors); 

는 희망 help

+0

감사합니다. "Bitmap 유형의 메소드 setPixel (int, int, int)은 인수 (int, int, GradientDrawable)에 적용 할 수 없습니다." –

+0

코드로 수행해야합니까? XML 때문에 매우 쉽습니다. 당신이 새로운 드로어 블을 만들고 ImageView에 적용하면 관심이 있고 원하는 것입니다. 어떻게 표시 할 수 있습니까? – Johnson

+0

@BitaMirshafiee – Johnson