2014-01-25 3 views
1

Я новичок android/java и разрабатываю простое приложение, которое будет генерировать гармоничные цвета из цвета, выбранного из цветного колеса. Проблема в том, что я даже не могу получить правильный цвет в коробке под колесом (прикосновение к желтому цвету на цветовом круге порождает пурпурный цвет: S) Я не понимаю, что происходит. Я попробовал этот код с несколькими изображениями тоже, и цвета, полученные до сих пор все от ..Android: значения цвета getPixel (x, y) неверны

public class MainActivity extends Activity { 

    ImageView cw; 

    Bitmap cwBmp; 

    ColourView colourArray; 


    int redValue; 

    int blueValue; 

    int greenValue; 

    int argb; 

    int alpha; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     colourArray = new ColourView(this); 
     RelativeLayout rl = (RelativeLayout) findViewById(R.id.layout); 
     rl.addView(colourArray); 

     cw = (ImageView) findViewById(R.id.colourwheelpic); 

     BitmapDrawable drawable = (BitmapDrawable) cw.getDrawable(); 
     cwBmp = drawable.getBitmap(); 

     cw.setOnTouchListener(new ImageView.OnTouchListener(){ 


      @Override 
      public boolean onTouch(View arg0, MotionEvent event) { 

       int touchX = (int)event.getX(); 
        int touchY = (int)event.getY(); 
        int pixel; 
        switch (event.getAction()) { 
         case MotionEvent.ACTION_DOWN: 
         touchX = (int)event.getX(); 
         touchY = (int)event.getY(); 

         case MotionEvent.ACTION_UP: 
         pixel = cwBmp.getPixel(touchX,touchY); 
         redValue = Color.red(pixel); 


        alpha = Color.alpha(pixel); 
        blueValue = Color.blue(pixel); 
         greenValue = Color.green(pixel); 


         argb = Color.argb(alpha, redValue,blueValue,greenValue); 


        colourArray.colors.clear(); 
         colourArray.colors.add(argb); 
         colourArray.invalidate(); 
         return true; 
        } 

        return false; 

      } 

     }); 

    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 


} 

colourArray является объектом ColourView

public class ColourView extends View { 

    Paint paint = new Paint(); 

    ArrayList<Integer> colors = new ArrayList<Integer>(); 



    public ColourView(Context context) { 
     super(context); 

     colors.add(Color.WHITE);  

    } 

    public void onDraw(Canvas canvas){ 

     int i = 0; 


     while (i < 220){ 
       paint.setColor(colors.get(0)); 
       paint.setStrokeWidth(0); 
       canvas.drawRect(25+ (44*i), 500,69+(44*i),550, paint); 
       i = i + 1; 
      } 

     } 

    private int getRandomInt(){ 
     int upper = colors.size(); 
     int r = (int) (Math.random() * (upper)); 
     return r; 

    } 


} 

и вот мой макет

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:id="@+id/layout" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:paddingBottom="@dimen/activity_vertical_margin" 
android:paddingLeft="@dimen/activity_horizontal_margin" 
android:paddingRight="@dimen/activity_horizontal_margin" 
android:paddingTop="@dimen/activity_vertical_margin" 
tools:context=".MainActivity" > 

    <ImageView 
android:id="@+id/colourwheelpic" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_alignParentTop="true" 
android:layout_centerHorizontal="true" 
android:src="@drawable/colourwheelbmp" /> 

    </RelativeLayout> 

ответ

2

Теперь, даже не читая ваш код, просто по логике: если ваш ЖЕЛТЫЙ становится PURPLE, тогда вы неправильно используете компоненты GREEN и BLUE RGB.

В действительности, это: # ffcccc00 - ЖЕЛТЫЙ, и этот # ffcc00cc имеет значение PURPLE.
Итак, вы видите, что в #aarrggbb gg и bb неуместны.

Теперь, читая код, у меня есть Подтверждаю:

argb = Color.argb(alpha, redValue,blueValue,greenValue); 

должны действительно быть:

argb = Color.argb(alpha, redValue, greenValue, blueValue); 

(а, г, г и Ь - не а, г, б и g)

;)

Это происходит.

+0

Он отлично работает сейчас :) Спасибо, что поймали мою ошибку так быстро – tansz

+0

Вы дали мне правильный ввод, сказав, что желтый цвет превращается в пурпурный. Я имею дело с цветами в течение длительного времени, и я сразу же визуализировал проблему ...;) чистое счастье, вы использовали ПРАВЫЕ СЛОВА! –

+0

Жаль, что я мог бы проголосовать за вас! – tansz