Added outline color selection (ColorFragment)

Added ACTION_UP to onTouchEvent and onColorSelected and onCancel to Listener in ColorPaletteView
pull/3/head
Olga Miller 2017-03-05 11:47:21 +01:00
rodzic b5915841fb
commit 605a34b5d3
6 zmienionych plików z 179 dodań i 11 usunięć

Wyświetl plik

@ -0,0 +1,82 @@
/*
Copyright 2017 Olga Miller <olga.rgb@gmail.com>
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package om.sstvencoder;
import android.app.AlertDialog;
import android.app.Dialog;
import android.graphics.Color;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.app.DialogFragment;
import android.view.View;
import java.util.ArrayList;
import java.util.List;
import om.sstvencoder.ColorPalette.ColorPaletteView;
public class ColorFragment extends DialogFragment
implements ColorPaletteView.OnColorSelectedListener {
public interface OnColorSelectedListener {
void onColorSelected(DialogFragment fragment, int color);
}
private List<OnColorSelectedListener> mListeners;
private int mColor;
public ColorFragment() {
mListeners = new ArrayList<>();
mColor = Color.WHITE;
}
public void setColor(int color) {
mColor = color;
}
public void addOnColorSelectedListener(OnColorSelectedListener listener) {
mListeners.add(listener);
}
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
View view = getActivity().getLayoutInflater().inflate(R.layout.fragment_color, null);
ColorPaletteView colorView = (ColorPaletteView) view.findViewById(R.id.select_color);
colorView.setColor(mColor);
colorView.addOnColorSelectedListener(this);
builder.setTitle(R.string.outline_color);
builder.setView(view);
return builder.create();
}
@Override
public void onColorChanged(View v, int color) {
}
@Override
public void onColorSelected(View v, int color) {
for (OnColorSelectedListener listener : mListeners)
listener.onColorSelected(this, color);
dismiss();
}
@Override
public void onCancel(View v) {
dismiss();
}
}

Wyświetl plik

@ -28,11 +28,15 @@ import java.util.ArrayList;
public class ColorPaletteView extends View { public class ColorPaletteView extends View {
public interface OnChangeListener { public interface OnColorSelectedListener {
void onChange(View v, int color); void onColorChanged(View v, int color);
void onColorSelected(View v, int color);
void onCancel(View v);
} }
private final ArrayList<OnChangeListener> mListeners; private final ArrayList<OnColorSelectedListener> mListeners;
private final IColorPalette mPalette; private final IColorPalette mPalette;
public ColorPaletteView(Context context, AttributeSet attrs) { public ColorPaletteView(Context context, AttributeSet attrs) {
@ -72,6 +76,16 @@ public class ColorPaletteView extends View {
consumed = true; consumed = true;
break; break;
} }
case MotionEvent.ACTION_UP: {
float x = e.getX();
float y = e.getY();
if (getLeft() <= x && x <= getRight() && getTop() <= y && y <= getBottom())
colorSelectedCallback();
else
cancelCallback();
consumed = true;
break;
}
} }
return consumed || super.onTouchEvent(e); return consumed || super.onTouchEvent(e);
} }
@ -79,17 +93,29 @@ public class ColorPaletteView extends View {
private void update(float x, float y) { private void update(float x, float y) {
if (mPalette.selectColor(x, y)) { if (mPalette.selectColor(x, y)) {
invalidate(); invalidate();
callback(); colorChangedCallback();
} }
} }
public void setOnChangeListener(OnChangeListener listener) { public void addOnColorSelectedListener(OnColorSelectedListener listener) {
mListeners.add(listener); mListeners.add(listener);
} }
private void callback() { private void colorChangedCallback() {
for (OnChangeListener listener : mListeners) { for (OnColorSelectedListener listener : mListeners) {
listener.onChange(this, mPalette.getSelectedColor()); listener.onColorChanged(this, mPalette.getSelectedColor());
}
}
private void colorSelectedCallback() {
for (OnColorSelectedListener listener : mListeners) {
listener.onColorSelected(this, mPalette.getSelectedColor());
}
}
private void cancelCallback() {
for (OnColorSelectedListener listener : mListeners) {
listener.onCancel(this);
} }
} }
} }

Wyświetl plik

@ -17,6 +17,7 @@ package om.sstvencoder;
import android.content.Intent; import android.content.Intent;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import android.support.v4.app.DialogFragment;
import android.support.v7.app.AppCompatActivity; import android.support.v7.app.AppCompatActivity;
import android.os.Bundle; import android.os.Bundle;
import android.view.Menu; import android.view.Menu;
@ -24,6 +25,7 @@ import android.view.MenuItem;
import android.view.View; import android.view.View;
import android.widget.AdapterView; import android.widget.AdapterView;
import android.widget.ArrayAdapter; import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.CheckBox; import android.widget.CheckBox;
import android.widget.EditText; import android.widget.EditText;
import android.widget.Spinner; import android.widget.Spinner;
@ -33,11 +35,13 @@ import java.util.List;
import om.sstvencoder.ColorPalette.ColorPaletteView; import om.sstvencoder.ColorPalette.ColorPaletteView;
import om.sstvencoder.TextOverlay.Label; import om.sstvencoder.TextOverlay.Label;
public class EditTextActivity extends AppCompatActivity implements AdapterView.OnItemSelectedListener { public class EditTextActivity extends AppCompatActivity
implements AdapterView.OnItemSelectedListener, ColorFragment.OnColorSelectedListener {
public static final int REQUEST_CODE = 101; public static final int REQUEST_CODE = 101;
public static final String EXTRA = "EDIT_TEXT_EXTRA"; public static final String EXTRA = "EDIT_TEXT_EXTRA";
private EditText mEditText; private EditText mEditText;
private ColorPaletteView mColorPaletteView; private ColorPaletteView mColorPaletteView;
private int mOutlineColor;
private float mTextSize, mOutlineSize; private float mTextSize, mOutlineSize;
private FontFamilySet mFontFamilySet; private FontFamilySet mFontFamilySet;
private FontFamilySet.FontFamily mSelectedFontFamily; private FontFamilySet.FontFamily mSelectedFontFamily;
@ -68,6 +72,9 @@ public class EditTextActivity extends AppCompatActivity implements AdapterView.O
updateBoldAndItalic(); updateBoldAndItalic();
mEditOutline.setChecked(label.getOutline()); mEditOutline.setChecked(label.getOutline());
initOutlineSizeSpinner(label.getOutlineSize()); initOutlineSizeSpinner(label.getOutlineSize());
mOutlineColor = label.getOutlineColor();
Button colorButton = (Button) findViewById(R.id.edit_outline_color);
colorButton.setBackgroundColor(mOutlineColor);
} }
private void initFontFamilySpinner(String familyName) { private void initFontFamilySpinner(String familyName) {
@ -174,6 +181,20 @@ public class EditTextActivity extends AppCompatActivity implements AdapterView.O
return super.onOptionsItemSelected(item); return super.onOptionsItemSelected(item);
} }
public void onOutlineColorClick(View view) {
ColorFragment fragment = new ColorFragment();
fragment.setColor(mOutlineColor);
fragment.addOnColorSelectedListener(this);
fragment.show(getSupportFragmentManager(), ColorFragment.class.getName());
}
@Override
public void onColorSelected(DialogFragment fragment, int color) {
mOutlineColor = color;
Button colorButton = (Button) findViewById(R.id.edit_outline_color);
colorButton.setBackgroundColor(mOutlineColor);
}
private void done() { private void done() {
Intent intent = new Intent(); Intent intent = new Intent();
intent.putExtra(EXTRA, getLabel()); intent.putExtra(EXTRA, getLabel());
@ -192,6 +213,7 @@ public class EditTextActivity extends AppCompatActivity implements AdapterView.O
label.setForeColor(mColorPaletteView.getColor()); label.setForeColor(mColorPaletteView.getColor());
label.setOutline(mEditOutline.isChecked()); label.setOutline(mEditOutline.isChecked());
label.setOutlineSize(mOutlineSize); label.setOutlineSize(mOutlineSize);
label.setOutlineColor(mOutlineColor);
return label; return label;
} }
} }

Wyświetl plik

@ -54,7 +54,6 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_weight="0.7" android:layout_weight="0.7"
android:checked="true"
android:text="@string/bold"/> android:text="@string/bold"/>
</LinearLayout> </LinearLayout>
@ -75,9 +74,36 @@
android:id="@+id/edit_outline_size" android:id="@+id/edit_outline_size"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_weight="0.7" android:layout_weight="0.3"
android:minHeight="32sp"/> android:minHeight="32sp"/>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="0.4"
android:clickable="true"
android:onClick="onOutlineColorClick"
android:orientation="horizontal">
<Button
android:id="@+id/edit_outline_color"
android:layout_width="32sp"
android:layout_height="32sp"
android:background="@android:color/white"
android:onClick="onOutlineColorClick"/>
<TextView
android:id="@+id/outline_color"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="6sp"
android:clickable="true"
android:onClick="onOutlineColorClick"
android:text="@string/outline_color"
android:textColor="?android:attr/textColorPrimary"/>
</LinearLayout>
</LinearLayout> </LinearLayout>
<om.sstvencoder.ColorPalette.ColorPaletteView <om.sstvencoder.ColorPalette.ColorPaletteView

Wyświetl plik

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<om.sstvencoder.ColorPalette.ColorPaletteView
android:id="@+id/select_color"
android:layout_width="match_parent"
android:layout_height="236dp"/>
</RelativeLayout>

Wyświetl plik

@ -36,4 +36,5 @@
<string name="bold">Bold</string> <string name="bold">Bold</string>
<string name="italic">Italic</string> <string name="italic">Italic</string>
<string name="outline">Outline</string> <string name="outline">Outline</string>
<string name="outline_color">Outline Color</string>
</resources> </resources>