我有一个应用程序,我正在尝试实现颜色选择器。现在我有一个带有 LinearLayout 的 Horizontal ScrollView。LinearLayout 内部是对应颜色的按钮。虽然这确实有效,但我想拥有它,所以它更像是一个滑块,指示器上方的任何颜色都将是设置颜色。这就像 Aviary 照片应用程序中的文本颜色选择器。仅使用 ListView 或 ViewPager 会更好吗?
这是我想在基本功能方面模拟的 Aviary 颜色滑块的屏幕截图。
滚动视图的xml代码:
<HorizontalScrollView
android:layout_width="fill_parent"
android:layout_height="50dp"
android:id="@+id/horizontalScrollView"
android:layout_above="@+id/edit_dateText"
android:layout_marginBottom="400dp"
android:padding="0dp"
android:layout_alignParentRight="true"
android:background="#333333"
android:focusableInTouchMode="true">
<LinearLayout
android:orientation="horizontal"
android:background="#333333"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:clickable="false"
android:paddingEnd="5dp"
android:paddingStart="5dp">
<Button
android:layout_width="30dp"
android:layout_height="30dp"
android:id="@+id/color_button_green"
android:background="@drawable/color_green"
android:paddingLeft="0dp"
android:paddingRight="0dp"
android:layout_gravity="center_vertical"
android:layout_marginLeft="20dp"
android:layout_marginRight="0dp" />
<Button
android:layout_width="30dp"
android:layout_height="30dp"
android:id="@+id/color_button_blue"
android:paddingLeft="0dp"
android:background="@drawable/color_blue"
android:enabled="true"
android:paddingRight="0dp"
android:layout_gravity="center_vertical"
android:layout_marginLeft="20dp"
android:layout_marginRight="0dp" />
<Button
android:layout_width="30dp"
android:layout_height="30dp"
android:id="@+id/color_button_red"
android:paddingLeft="0dp"
android:paddingRight="0dp"
android:layout_gravity="center_vertical"
android:background="@drawable/color_red"
android:layout_marginLeft="20dp"
android:layout_marginRight="0dp" />
<Button
android:layout_width="30dp"
android:layout_height="30dp"
android:id="@+id/color_button_orange"
android:paddingLeft="0dp"
android:paddingRight="0dp"
android:layout_gravity="center_vertical"
android:background="@drawable/color_orange"
android:layout_marginLeft="20dp"
android:layout_marginRight="0dp" />
.........................................
</LinearLayout>
</HorizontalScrollView>
onCreateView 覆盖和自定义 onCLickListener:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState) {
v = inflater.inflate(R.layout.edit_fragment, parent, false);
mGreenColorButton = (Button) v.findViewById(R.id.color_button_green);
mGreenColorButton.setOnClickListener(new MyClickListener());
mBlueColorButton = (Button) v.findViewById(R.id.color_button_blue);
mBlueColorButton.setOnClickListener(new MyClickListener());
mRedColorButton = (Button) v.findViewById(R.id.color_button_red);
mRedColorButton.setOnClickListener(new MyClickListener());
mOrangeColorButton = (Button) v.findViewById(R.id.color_button_orange);
mOrangeColorButton.setOnClickListener(new MyClickListener());
mGrayColorButton = (Button) v.findViewById(R.id.color_button_gray);
mGrayColorButton.setOnClickListener(new MyClickListener());
mPurpleColorButton = (Button) v.findViewById(R.id.color_button_purple);
mPurpleColorButton.setOnClickListener(new MyClickListener());
return v;
}
private final class MyClickListener implements View.OnClickListener {
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.color_button_green:
activeEditText.setBackgroundColor(Color.parseColor("#36D85C"));
break;
case R.id.color_button_blue:
activeEditText.setBackgroundColor(Color.parseColor("#0C44E5"));
break;
case R.id.color_button_red:
activeEditText.setBackgroundColor(Color.parseColor("#E22D3A"));
break;
case R.id.color_button_orange:
activeEditText.setBackgroundColor(Color.parseColor("#F39D15"));
break;
case R.id.color_button_gray:
activeEditText.setBackgroundColor(Color.parseColor("#555555"));
break;
}
}
}