Android

안드로이드 ColorPicker 라이브러리 색상 선택

로픽 2017. 9. 25. 11:08
300x250

안드로이드 ColorPicker 라이브러리 색상 선택


- 다양한 색을 선택해서 설정할 수 있는 라이브러리 ColorPicker를 이용하여 rbg 16진수를 출력하려고 합니다.

- 원 모양에 스크롤을 돌려서 색상을 선택하고 투명도와 채도를 조절하여 색상을 선택합니다.

- 라이브러리를 먼저 import 한 후에 ColorPicker를 사용할 수 있습니다.

- 라이브러리는 ColorPicker를 검색하면 github에서 쉽게 구할 수 있습니다.




** ColorPicker를 적용한 액티비티

 

- 색상을 변경하면 가운데 원에 왼쪽 절반은 이전 색상 오른쪽 절반은 지금 변경할 색상입니다.





** 안드로이드 소스 코드


**AlarmActivity.java


public class AlarmActivity extends AppCompatActivity {    


    ColorPicker picker;

    String topic = "/IOT/MOOD/PUB";        //mqtt를 위한 토픽


    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_alarm);


        picker = (ColorPicker) findViewById(R.id.picker);

        //SVBar svBar = (SVBar) findViewById(R.id.svbar);        //4가지 항목이 있지만 원하는 항목 하나만 적용

        //OpacityBar opacityBar = (OpacityBar) findViewById(R.id.opacitybar);

        SaturationBar saturationBar = (SaturationBar) findViewById(R.id.saturationbar);

        //ValueBar valueBar = (ValueBar) findViewById(R.id.valuebar);


        //picker.addSVBar(svBar);

        //picker.addOpacityBar(opacityBar);

        picker.addSaturationBar(saturationBar);

        //picker.addValueBar(valueBar);



        picker.getColor();        //원 스크롤을 돌려서 색상값을 가져옴


        if(oldColor != 0){        //이전의 색상설정이 있으면 표시

            picker.setOldCenterColor(oldColor);

        }else{

            picker.setOldCenterColor(picker.getColor());

        }


    }


    public void getColor(View view){

        oldColor = picker.getColor();        //원 스크롤을 돌려서 색상값을 가져옴

        picker.setOldCenterColor(oldColor);

        System.out.println(picker.getColor());

        String col = Integer.toHexString(picker.getColor());        //int형으로 값을 가져오는데 16진수로 변환한다.

        System.out.println(col);

        publishMessage(topic, col);

    }


    @Override

    public boolean onCreateOptionsMenu(Menu menu) {

        MenuInflater inflater = getMenuInflater();

        inflater.inflate(R.menu.reservation_menu, menu);

        return true;

    }


    @Override

    public boolean onOptionsItemSelected(MenuItem item) {

        Intent intent = new Intent(this, ReserveActivity.class);

        startActivity(intent);

        return super.onOptionsItemSelected(item);

    }

}




- int형 값으로 값을 받아오기 때문에 활용이 어렵습니다. 그래서 static 메소드 toHexString을 사용하여 16진수 변환했습니다.



<!-- activity_alarm.xml 필요없는 부분은 주석처리 -->

<?xml version="1.0" encoding="utf-8"?>

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"

    xmlns:app="http://schemas.android.com/apk/res-auto"

    xmlns:tools="http://schemas.android.com/tools"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    tools:context="com.example.dmbtv.smarthome.AlarmActivity">


        <LinearLayout

            android:layout_width="match_parent"

            android:layout_height="match_parent"

            android:orientation="vertical"

            android:layout_gravity="center"

            android:padding="10dp">

                <com.larswerkman.holocolorpicker.ColorPicker

                    android:id="@+id/picker"

                    android:layout_width="match_parent"

                    android:layout_height="wrap_content"

                    android:layout_gravity="center"/>


              <TextView

                    android:layout_width="match_parent"

                    android:layout_height="wrap_content"

                    android:text="밝기" />


             <!--   <com.larswerkman.holocolorpicker.SVBar

                    android:id="@+id/svbar"

                    android:layout_width="match_parent"

                    android:layout_height="wrap_content" />-->


                <com.larswerkman.holocolorpicker.SaturationBar

                    android:id="@+id/saturationbar"

                    android:layout_width="match_parent"

                    android:layout_height="wrap_content" />


             <!--   <TextView

                    android:layout_width="match_parent"

                    android:layout_height="wrap_content"

                    android:text="투명도" />


                <com.larswerkman.holocolorpicker.OpacityBar

                    android:id="@+id/opacitybar"

                    android:layout_width="match_parent"

                    android:layout_height="wrap_content" />


                <com.larswerkman.holocolorpicker.ValueBar

                    android:id="@+id/valuebar"

                    android:layout_width="match_parent"

                    android:layout_height="wrap_content" /> -->


            <Button

                android:layout_width="match_parent"

                android:layout_height="wrap_content"

                android:onClick="getColor"

                android:text="변경" />


        </LinearLayout>

</ScrollView>





** 출력된 값




- 첫번째 값이 int값, 두번째 값이 16진수로 변환한 값입니다.

반응형