Как показать, что ячейка выбрана android java? - PullRequest
0 голосов
/ 15 апреля 2020

Я пытаюсь создать игру судоку на android и хочу убедиться, что пользователь может видеть, какую ячейку он выбрал. В настоящее время класс SudokuCell использует mPaint для рисования ячеек и чисел. Можно ли добавить OnCLickListner, чтобы фон ячейки динамически менял цвет или добавлял символ в ячейку, чтобы пользователю было ясно, какая ячейка была выбрана?

public class SudokuCell extends BaseSudokuCell{

private Paint mPaint;
public SudokuCell(Context context){
    super(context);
    mPaint =new Paint();
}
@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    drawNumber(canvas);
    drawLines(canvas);
}

private void drawLines(Canvas canvas) {
    mPaint.setColor(Color.CYAN);
    mPaint.setStrokeWidth(5);
    mPaint.setStyle(Paint.Style.STROKE);
    canvas.drawRect(0,0,getWidth(), getHeight(), mPaint);
}

private void drawNumber(Canvas canvas) {
    mPaint.setColor(Color.MAGENTA);
    mPaint.setTextSize(60);
    mPaint.setStyle(Paint.Style.FILL);
    Rect bounds = new Rect();
    mPaint.getTextBounds(String.valueOf(getValue()), 0, String.valueOf(getValue()).length(), bounds);
    if (getValue() != 0) {
        canvas.drawText(String.valueOf(getValue()), (getWidth() - bounds.width()) / 2, (getHeight() + bounds.height()) / 2, mPaint);
    }

}

}

Нужно ли добавлять новый файл xml, чтобы показать, что выбрано? Нужно ли менять свой SudokuGridView?

public class SudokuGridView extends GridView {

private final Context context;

public SudokuGridView(final Context context, AttributeSet attr) {
    super(context, attr);
    this.context = context;

    SudokuGridViewAdap gridViewAdap = new SudokuGridViewAdap(context);

    setAdapter(gridViewAdap);

    setOnItemClickListener(new OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {
            int x = position % 9;
            int y = position /9;

            Game.getInstance().setSelectedPos(x,y);

        }
    });
}

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    super.onMeasure(widthMeasureSpec, widthMeasureSpec);
}

class SudokuGridViewAdap extends BaseAdapter {
    private Context context;
    public SudokuGridViewAdap(Context context){
        this.context = context;
    }
    @Override
    public int getCount() {
        return 81;
    }

    @Override
    public Object getItem(int pos) {
        return null;
    }

    @Override
    public long getItemId(int pos) {
        return 0;
    }

    @Override
    public View getView(int pos, View Convertview, ViewGroup parent) {

        return Game.getInstance().getGrid().getItem(pos);
    }
}
   }

Вот это xml

 <com.example.sudokuvarients.normalsudoku9x9.SudokuGrid.SudokuGridView
        android:id="@+id/sudokuGridView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:numColumns="9"
        android:horizontalSpacing="0dp"
        android:verticalSpacing="0dp"


    />
...