Pull to refresh

Comments 9

Это не статья, а листинг с комментариями.
Обратите внимание, что это «из песочницы». Зачем сразу давить человека негативными коментарием, это же его первая статья на хабре. После похожих коментариев желание писать другую статью напрочь отпадает, из-за опасения получать похожие коментарии. Можно было бы и более снисходительно.

Автору: молодец, есть некоторые косяки в реализации (см. комментарий ниже), но в целом неплохо как для начала!
это же его первая статья на хабре

Это отлично, что сюда еще кто-то пишет, но раз написал, то будь готов воспринимать объективную критику. Это реально код с комментариями, за ним я могу сходить на гитхаб.
желание писать другую статью напрочь отпадает, из-за опасения получать похожие коментарии

Если и следующая статья будет такой, то не страшно, если автор ее не напишет :) Для себя такие велосипеды писать можно и нужно, а на хабре хочется интересных и полезных статей, которых последнее время и так мало.
Да и вообще взрослого человека мало должны волновать комментарии в этих ваших интернетах. Будет, что сказать, — напишет, не переживайте.
Ах да, и надо обязательно минусовать, спасибо что напомнили.
Начнем с того, что это не я.
Скрытый текст


Вы же вроде уже взрослый, а на минусы реагируете, как я в 16 :)

Неплохо бы onMeasure() поправить, чтобы избежать
вот таких вещей

Такое интересно самому писать, а не читать. Или уж просто юзать не вдаваясь в подробности. Кстати, делал похожее под iOS, кому интересно: https://github.com/DnV1eX/DNVAvatar
pavel_dolbik, а почему у вас в статье и на гитхабе все картинки сплющены?
Чем лучше делать кастомную отрисовку, чем просто наложить поверх еще один ImageView с рамкой?
позволю себе предложить еще пару улучшений, кроме уже озвученного переопределить onMeasure():

1) canvas.drawBitmap(finalBitmap, rect, rect, imgPaint); rect здесь не имеет никакого смысла. потому что суть метода в том, чтобы эти src и dst прямоугольники были разные, чтобы при отрисовки применился скейл и сдвиг. можно было написать чуть проще canvas.drawBitmap(finalBitmap, 0, 0, imgPaint), где 0 это верхняя и левая позиция для отрисовки. или же можно было использовать этот rect для скейла исходной картинки и обойтись без шага Bitmap finalBitmap = bitmap.createScaledBitmap(bitmap, radius, radius, false); и необходимости создавать промежуточный Bitmap (кстати, у вас параметр метода называется radius, хотя используете вы его как диаметр):
    private Bitmap getRoundedCroppedBitmap(Bitmap bitmap, int size) {
        Bitmap output = Bitmap.createBitmap(size, size, Bitmap.Config.ARGB_8888);
        Rect rect = new Rect(0, 0, size, size);

        Canvas canvas = new Canvas(output);
        canvas.drawCircle(
                size  / 2,
                size / 2,
                size / 2,
                imgPaint);

        imgPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
        canvas.drawBitmap(finalBitmap, null, rect, imgPaint);

        return output;
    }

2) в onTouchEvent следует еще реагировать на MotionEvent.ACTION_CANCEL — он вызовется когда юзер нажмет пальцем в области вашей View, но потом уведет палец куда то в сторону, то есть фактически ACTION_UP будет выполнен потом уже не в области вашей View. На этот event не стоит реагировать как на tap, то есть отмечать картинку как выделенную, но стоит выполнить обратную scale анимацию, иначе вьюшка так и останется уменьшенной.
Sign up to leave a comment.

Articles