Я использовал трюк, чтобы граница отображалась за пределами контейнера. С помощью этого трюка рисуется только линия, поэтому будет показан фон основного вида.
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:bottom="1dp"
android:left="-2dp"
android:right="-2dp"
android:top="-2dp">
<shape android:shape="rectangle" >
<stroke
android:width="1dp"
android:color="#FF000000" />
<solid android:color="#00FFFFFF" />
<padding android:left="10dp"
android:right="10dp"
android:top="10dp"
android:bottom="10dp" />
</shape>
</item>
</layer-list>
Просто
length = end - start;
без амперсандов и приведений. Арифметика указателя C позволяет эту операцию.
Это просто более поздний указатель минус более ранний указатель.
int length = end - start;
Проверка и пример кода ниже:
int main(int argc, char* argv[])
{
char buffer[] = "Its a small world after all";
char* start = buffer+6; // "s" in SMALL
char* end = buffer+16; // "d" in WORLD
int length = end - start;
printf("Start is: %c\n", *start);
printf("End is: %c\n", *end);
printf("Length is: %d\n", length);
}
Этот оператор C вычислит разницу между концом и началом. Просто:
int length = (int)(end - start);
Существует даже тип ptrdiff_t, который может содержать такую длину. Он предоставляется 'stddef.h'