10.09.2013 / 12:05 | |
aNNiMON Супервизор Сейчас: Offline
Имя: Витёк Регистрация: 11.01.2010
| Virus-ON, и? Логи там тоже можно глянуть.
__________________
let live |
10.09.2013 / 12:22 | |
Virus-ON Пользователь Сейчас: Offline
Имя: Макс Откуда: Чернигов Регистрация: 13.10.2011
| Заработало. Просто я пишу как бы по учебнику, а как бы свою шарманку. В именах затык был. |
12.09.2013 / 19:01 | |
Naik Пользователь Сейчас: Offline
Имя: %name% Регистрация: 14.03.2010
| Такая проблема: есть EditText и нужно рядом (слева) отрисовать нумерацию строк в EditText, для этого в моем View нужно рисовать числа на расстоянии точно таком, как расстояние между строками в EditText. Я устанавливаю одинаковый шрифт (размер, тип) для моего view и EditText и в своем рисую числа на расстоянии paint.getFontSpacing() + paint.getFontMetricsInt().leading. Но в EditText получается межстрочный интервал больше. Проверил — все данные шрифта и там и там одинаковые (leading, ascent, descent, fontSpacing). Получается в EditText межстрочное расстояние вычисляется по-другому. Как? И еще, как в EditText вычисляется отступ первой строчки сверху? (для 20го шрифта — 3-4 пикселя) ? Исходник Открыть спойлер Закрыть спойлер import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Typeface;
import android.text.TextPaint;
import android.util.AttributeSet;
import android.view.View;
public class VerticalNumsLine extends View {
private static final String tag = "VerticalNumsLine";
private int width, height;
private float interval, top;
private float scaledDensity;
private TextPaint paint = new TextPaint();
public VerticalNumsLine(Context context) {
super(context);
init(context);
}
public VerticalNumsLine(Context context, AttributeSet attr) {
super(context, attr);
init(context);
}
public VerticalNumsLine(Context context, AttributeSet attr, int style) {
super(context, attr, style);
init(context);
}
private void init(Context context) {
scaledDensity = context.getResources().getDisplayMetrics().scaledDensity;
}
public void setTextSize(int textSize) {
paint.setTypeface(Typeface.MONOSPACE);
paint.setTextSize(textSize * scaledDensity);
float fontSpacing = paint.getFontSpacing();
int leading = paint.getFontMetricsInt().leading;// всегда возвращает 0
L.write(tag, "" + leading + " " + paint.ascent() + " " + paint.descent() + " " + fontSpacing);
top = paint.ascent() * (-1) + 3; // 3 — экспериментально найденный отступ сверху текста
interval = fontSpacing + leading;
invalidate();
}
public void setTextColor(int color) {
paint.setColor(color);
invalidate();
}
@Override
public void onDraw(Canvas canvas) {
super.onDraw(canvas);
for (int j = 0; j < getHeight() / interval; j++) {
canvas.drawText(String.valueOf(j +1), 0, j*interval + top, paint);
}
}
@Override
public void onMeasure(int x, int y) {
//L.write(tag, "onMeasure");
super.onMeasure(x, y);
}
}
Еще заметил, что leading и в моем view и в EditText равно нулю, так что его можно и не учитывать. Изменено Naik (12.09 / 19:02) (всего 1 раз)
Прикрепленные файлы: Screenshot_2013(…).png (115.32 кб.) Скачано 122 раза |
12.09.2013 / 19:16 | |
Naik Пользователь Сейчас: Offline
Имя: %name% Регистрация: 14.03.2010
| А поменял шрифт на 10, теперь наоборот — в EditText между строками расстояние меньше чем у меня |
12.09.2013 / 19:19 | |
aNNiMON Супервизор Сейчас: Offline
Имя: Витёк Регистрация: 11.01.2010
| Naik, что-то я не совсем понял про getFontMetricsInt, оно же int возвращает, как ты от него Leading берёшь? __________________
let live Изменено aNNiMON (12.09 / 19:19) (всего 1 раз) |
12.09.2013 / 20:55 | |
Naik Пользователь Сейчас: Offline
Имя: %name% Регистрация: 14.03.2010
| aNNiMON, Ну переделал на getFontMetrics() - ничего не изменилось
|
5.10.2013 / 14:36 | |
Naik Пользователь Сейчас: Offline
Имя: %name% Регистрация: 14.03.2010
| Изменено Naik (5.10 / 14:36) (всего 1 раз) |
14.10.2013 / 16:43 | |
kda-spb Пользователь Сейчас: Offline
Имя: Дима Откуда: СПб,Колпино Регистрация: 24.11.2011
| Как узнать запущен сервис или нет?
|
14.10.2013 / 19:13 | |
Naik Пользователь Сейчас: Offline
Имя: %name% Регистрация: 14.03.2010
| kda-spb, 1. Хранить boolean в SharedPreferences 2. Создать public static метод в ceрвисе и через него узнавать 3. С помощью ActivityManager public static boolean isServiceRunning(String className){
ActivityManager activityManager = (ActivityManager) Application.getContext().getSystemService(Context.ACTIVITY_SERVICE);
List<RunningServiceInfo> services = activityManager.getRunningServices(Integer.MAX_VALUE);
for (RunningServiceInfo runningServiceInfo : services) {
if (runningServiceInfo.service.getClassName().equals(className)) {
return true;
}
}
return false;
}
Изменено Naik (14.10 / 19:15) (всего 1 раз) |
14.10.2013 / 20:07 | |
kda-spb Пользователь Сейчас: Offline
Имя: Дима Откуда: СПб,Колпино Регистрация: 24.11.2011
| Naik, Спасибо за подробный ответ. Ты написал про стат. метод, а если статичную переменную в классе сервиса - покатит, как думаешь? Я просто в данный момент проверить не могу, много переписывать для теста нужно.
|