Прежде всего ваша логика показывает рекламу после 16-го клика, потому что счетчик начинается с 0.
Вы можете сделать
if counter == 14 {
counter = 0
// show ad
} else { counter += 1 }
или
guard counter < 14 else {
counter = 0
// show ad
return
}
counter += 1
Это позволяет избежать переполнения Int
через пару сотен лет
Из Документации разработчика Android :
пикселей
пикселей - соответствует фактическим пикселям на экране.
в
дюймах - в зависимости от физического размера экрана.
1 дюйм = 2,54 сантиметра
мм
миллиметров - в зависимости от физического размера экрана.
pt
Points - 1/72 дюйма в зависимости от физического размера экрана.
dp или dip
Density -independent Pixels - абстрактная единица измерения, основанная на физической плотности экрана. Эти единицы относятся к экрану с разрешением 160 dpi, поэтому один dp соответствует одному пикселю на экране с разрешением 160 dpi. Отношение dp-to-pixel будет изменяться с плотностью экрана, но не обязательно прямо пропорционально. Примечание. Компилятор принимает как «dip», так и «dp», хотя «dp» более соответствует «sp».
sp
Масштабирование -независимых пикселей - это похоже на блок dp, но он также масштабируется в соответствии с предпочтениями размера шрифта пользователя. Рекомендуется использовать этот блок при указании размеров шрифта, чтобы они были скорректированы как для плотности экрана, так и для предпочтений пользователя.
Из Понимание независимости плотности в Android :
+----------------+----------------+---------------+-------------------------------+
| Density Bucket | Screen Density | Physical Size | Pixel Size |
+----------------+----------------+---------------+-------------------------------+
| ldpi | 120 dpi | 0.5 x 0.5 in | 0.5 in * 120 dpi = 60x60 px |
+----------------+----------------+---------------+-------------------------------+
| mdpi | 160 dpi | 0.5 x 0.5 in | 0.5 in * 160 dpi = 80x80 px |
+----------------+----------------+---------------+-------------------------------+
| hdpi | 240 dpi | 0.5 x 0.5 in | 0.5 in * 240 dpi = 120x120 px |
+----------------+----------------+---------------+-------------------------------+
| xhdpi | 320 dpi | 0.5 x 0.5 in | 0.5 in * 320 dpi = 160x160 px |
+----------------+----------------+---------------+-------------------------------+
| xxhdpi | 480 dpi | 0.5 x 0.5 in | 0.5 in * 480 dpi = 240x240 px |
+----------------+----------------+---------------+-------------------------------+
| xxxhdpi | 640 dpi | 0.5 x 0.5 in | 0.5 in * 640 dpi = 320x320 px |
+----------------+----------------+---------------+-------------------------------+
+---------+-------------+---------------+-------------+--------------------+
| Unit | Description | Units Per | Density | Same Physical Size |
| | | Physical Inch | Independent | On Every Screen |
+---------+-------------+---------------+-------------+--------------------+
| px | Pixels | Varies | No | No |
+---------+-------------+---------------+-------------+--------------------+
| in | Inches | 1 | Yes | Yes |
+---------+-------------+---------------+-------------+--------------------+
| mm | Millimeters | 25.4 | Yes | Yes |
+---------+-------------+---------------+-------------+--------------------+
| pt | Points | 72 | Yes | Yes |
+---------+-------------+---------------+-------------+--------------------+
| dp | Density | ~160 | Yes | No |
| | Independent | | | |
| | Pixels | | | |
+---------+-------------+---------------+-------------+--------------------+
| sp | Scale | ~160 | Yes | No |
| | Independent | | | |
| | Pixels | | | |
+---------+-------------+---------------+-------------+--------------------+
Дополнительную информацию также можно найти в Документации по дизайну Google .
Из документации разработчика Android:
px Pixels - соответствует фактическим пикселям на экране.
в дюймах - в зависимости от физического размера экрана. 1 дюйм = 2,54 см
мм Миллиметры - в зависимости от физического размера экрана.
pt Points - 1/72 дюйма в зависимости от физического размера экрана.
Пиксели или пиксели, не зависящие от плотности - абстрактная единица измерения, основанная на физической плотности экрана. Эти единицы относятся к экрану с разрешением 160 точек на дюйм, поэтому на экране с разрешением 160 точек на дюйм один пиксель составляет один пиксель. Отношение dp к пикселю будет меняться в зависимости от плотности экрана, но не обязательно в прямой пропорции. Примечание: компилятор принимает и «dip», и «dp», хотя «dp» более соответствует «sp».
sp Независимые от масштаба пиксели - это похоже на единицу измерения dp, но также масштабируется в соответствии с предпочтениями размера шрифта пользователя. Рекомендуется использовать этот блок при указании размеров шрифта, чтобы они были отрегулированы как по плотности экрана, так и по предпочтениям пользователя.
Android SP против DP
Во-первых, что они обозначают?
sp
означает scale-independent
пикселей.
dp or dip
(просто используйте dp
в своем коде, если вы крутой) означает независимые от плотности пиксели.
В чем разница между этими двумя?
Нет!
У них обоих есть 160 единиц на квадратный дюйм, они оба не зависят от плотности, и ни один не имеет одного размера на разных экранах.
Итак, когда вы должны использовать sp
и когда вы должны использовать dp
?
Использовать sp
для размера текста … потому что, но масштабируется пользователем предпочтительный размер шрифта.
Используйте dp
для всего остального.