Контроль/получение по запросу мерзавца не удаляет каталоги?

Вы можете сохранить сенсорные события в каком-либо списке, а затем воссоздать их после изменений конфигурации. Это уже объяснено здесь.

Ваш класс должен выглядеть следующим образом

public class DrawerView extends View {
private Bitmap mBitmap;
private Canvas mCanvas;
private Path mPath;
private Paint mBitmapPaint;
private float mX, mY, sX, sY;
private boolean isSigned = false;

private static final String EXTRA_STATE = "exta_state";
private static final String EXTRA_EVENT_LIST = "exta_event_list";


private ArrayList motionEvents = new ArrayList<>();
private ArrayList auxMotionEvents = new ArrayList<>();

public DrawerView(Context c) {
    super(c);
    mPath = new Path();
    mBitmapPaint = new Paint(Paint.DITHER_FLAG);
    mBitmapPaint.setColor(Color.WHITE);
    setSaveEnabled(true);
}

public DrawerView(Context c, AttributeSet attributeSet) {
    super(c, attributeSet);
    mPath = new Path();
    mBitmapPaint = new Paint(Paint.DITHER_FLAG);
    mBitmapPaint.setColor(Color.WHITE);
    setSaveEnabled(true);
}

public DrawerView(Context c, Bitmap bitmap) {
    super(c);
    mPath = new Path();
    mBitmapPaint = new Paint(Paint.DITHER_FLAG);
    mBitmapPaint.setColor(Color.WHITE);
    mBitmap = bitmap;
    setSaveEnabled(true);
}

@Override
public Parcelable onSaveInstanceState() {



    Bundle bundle = new Bundle();
    bundle.putParcelable(EXTRA_STATE, super.onSaveInstanceState());
    bundle.putParcelableArrayList(EXTRA_EVENT_LIST, motionEvents);

    return bundle;
}

@Override
public void onRestoreInstanceState(Parcelable state) {
    if (state instanceof Bundle) {

        auxMotionEvents = new ArrayList<>();
        motionEvents = new ArrayList<>();

        Bundle bundle = (Bundle) state;
        super.onRestoreInstanceState(bundle.getParcelable(EXTRA_STATE));
        auxMotionEvents = bundle.getParcelableArrayList(EXTRA_EVENT_LIST);
        if (auxMotionEvents == null) {
            auxMotionEvents = new ArrayList<>();
        }

        return;
    }
    super.onRestoreInstanceState(state);
}

private void performTouch(MotionEvent event) {
    this.isSigned = true;
    float x = event.getX();
    float y = event.getY();
    switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN:
            touch_start(x, y);
            break;
        case MotionEvent.ACTION_MOVE:
            touch_move(x, y);
            break;
        case MotionEvent.ACTION_UP:
            if (x == sX && y == sY) {
                drawDot(x, y);
            }
            touch_up();
            break;
    }
    invalidate();
    motionEvents.add(MotionEvent.obtain(event));
}




public void setIsSigned(boolean isSigned) {
    this.isSigned = isSigned;
}

public boolean isSigned() {
    return isSigned;
}

@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
    super.onSizeChanged(w, h, oldw, oldh);
    mBitmap = Bitmap.createBitmap(w, h, Bitmap.Config.RGB_565);
    mCanvas = new Canvas(mBitmap);
    mCanvas.drawColor(Color.WHITE);

    if (auxMotionEvents != null) {
        for (MotionEvent motionEvent : auxMotionEvents) {
            performTouch(motionEvent);
        }
    }

}


@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    canvas.drawBitmap(mBitmap, 0, 0, mBitmapPaint);
    canvas.drawPath(mPath, mBitmapPaint);
}

public void clear() {
    setDrawingCacheEnabled(true);
    mCanvas.drawColor(Color.WHITE);
    invalidate();
}

private void drawDot(float x, float y) {
    mCanvas.drawCircle(x, y, 2.0f, mBitmapPaint);
}

private void touch_start(float x, float y) {
    mPath.reset();
    mPath.moveTo(x, y);
    mX = x;
    mY = y;
    sX = x;
    sY = y;
}

private void touch_move(float x, float y) {
    mPath.quadTo(mX, mY, (x + mX) / 2, (y + mY) / 2);
    mX = x;
    mY = y;
    mCanvas.drawPath(mPath, mBitmapPaint);
}

private void touch_up() {
    mPath.lineTo(mX, mY);
    mCanvas.drawPath(mPath, mBitmapPaint);
    mPath.reset();
}

@Override
public boolean onTouchEvent(MotionEvent event) {

    switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN:
        case MotionEvent.ACTION_MOVE:
        case MotionEvent.ACTION_UP:
            performTouch(event);
    }

    return true;
}

}

Не забудьте удалить android: configChanges = "клавиатураHidden | Ориентация | screenSize" из вашего manisfest и дать представление представление идентификатор так это может быть воссоздано.

Чтобы установить идентификатор для вашего представления, используйте setId () после создания экземпляра DrawerView в вашем initializeView (). Это должно выглядеть примерно так

private void initializeView() {
drawerBox = this.findViewById(R.id.drawerContainer);
save = findViewById(R.id.saveBtn);
clear = findViewById(R.id.clearBtn);
if (existingSign) {
    mv = new DrawerView(this, BitmapFactory.decodeFile(getIntent()
            .getStringExtra(getPackageName() + "_signaturePath")));
} else {
    mv = new DrawerView(this);
}

mv.setId(View.generateViewId());

mv.setDrawingCacheEnabled(false);
mv.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
        ViewGroup.LayoutParams.MATCH_PARENT));
drawerBox.addView(mv);
mPaint = new Paint();
mPaint.setAntiAlias(true);
mPaint.setDither(true);
mPaint.setColor(Color.BLACK);
mPaint.setStyle(Paint.Style.STROKE);
mPaint.setStrokeJoin(Paint.Join.ROUND);
mPaint.setStrokeCap(Paint.Cap.ROUND);
mPaint.setStrokeWidth(3);
mv.setDrawingCacheEnabled(true);

}

78
задан ROMANIA_engineer 5 December 2014 в 11:11
поделиться

4 ответа

Git не отслеживает каталоги, поэтому он не удаляет те, которые стали пустыми в результате слияния или других изменений. Однако вы можете использовать git clean -fd для удаления неотслеживаемых каталогов (флаг -fd означает f или удаление неотслеживаемых файлов и d ] irectories).

147
ответ дан 24 November 2019 в 10:34
поделиться

У меня была та же проблема в моем случае на сервисе сборки (CI).. поскольку МЕРЗАВЕЦ вытягивает все файлы, не чистя папки, все мусорное ведро / obj, которые были ранее сборкой CI, грязны, поэтому Если я удалю тестовый проект, то мусорное ведро будет все еще содержать DLL и упомянет тесты, который не существует.

для решения этой проблемы; эта команда, кажется, добивается цели (по крайней мере, для меня)

git clean -fd -x

, куда X удалит все неотслеженные файлы:

-X Удаляют только файлы, проигнорированные Мерзавцем. Это может быть полезно, чтобы восстановить все с нуля, но сохранить вручную созданные файлы.

0
ответ дан 24 November 2019 в 10:34
поделиться

Как часть большинства операций, изменяющих рабочее дерево (извлечение, слияние, проверка и т. Д.), Git удалит все каталоги, которые стали пустыми в результате этой операции (т.е. git удалил последний файл) .

git не удаляет каталоги, которые не являются полностью пустыми, поэтому, если вы скрыли или проигнорировали файлы, то только потому, что git удаляет последний отслеживаемый файл из этого каталога, не обязательно означает, что git сможет удалить этот каталог. git не считает это ошибкой, поэтому не будет жаловаться на это.

3
ответ дан 24 November 2019 в 10:34
поделиться

Git в настоящее время не отслеживает каталоги (см. git wiki ), то есть вы не можете ни добавлять пустые каталоги, ни git remove каталоги, которые оказываются пустыми. (РЕДАКТИРОВАТЬ: Спасибо, Манни, я ошибался! Вы не можете добавить пустых каталогов, но git удалит каталогов, которые становятся пусто, потому что их отслеживаемый контент был удален.

-1
ответ дан 24 November 2019 в 10:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: