Eu tenho três arquivos. O XML, a função de desenho e a Atividade principal. Eu tenho alguns LinearLayoutno meu arquivo XML.
Esta é a função de desenho:
E esta é a principal atividade:
O programa pode desenhar borda, mas o tamanho não se ajusta ao LinearLayout. E quando clico no botão LinearLayoutnovamente, o programa trava.
Outra coisa, eu quero desenhar dois círculos no centro do LinearLayout, mas como eu poderia descobrir as coordenadas do centro?
Você realmente precisa fazer isso programaticamente?
Apenas considerando o título: você pode usar um ShapeDrawable como android: background…
Por exemplo, vamos definir res/drawable/my_custom_background.xmlcomo:
e defina android: background = "@ drawable / my_custom_background".
Eu não testei, mas deve funcionar.
Eu acho que é melhor aproveitar o poder do recurso extraível da forma xml, se isso for adequado às suas necessidades. Com um projeto "do zero" (para android-8), defina res / layout / main.xml
e um res/drawable/border.xml
Relatado para trabalhar em um dispositivo de gengibre. Observe que você precisará relacionar android:paddingo LinearLayout ao valor da android:widthforma / traçado. Por favor, não use@android:color/white na sua aplicação final, mas uma cor definida pelo projeto.
Você pode aplicar android:background="@drawable/border" android:padding="10dip"a cada LinearLayout a partir da amostra fornecida.
Quanto às suas outras postagens relacionadas à exibição de alguns círculos como plano de fundo do LinearLayout, estou brincando com os recursos desenháveis ​​Inset / Scale / Layer ( consulte Recursos desenháveis para obter mais informações) para obter algo funcionando para exibir círculos perfeitos no fundo de um LinearLayout, mas falhou no momento…
Seu problema reside claramente no uso de getBorder.set{Width,Height}(100); . Por que você faz isso em um método onClick?
Preciso de mais informações para não perder o ponto: por que você faz isso programaticamente? Você precisa de um comportamento dinâmico? Seus drawables de entrada são png ou ShapeDrawable é aceitável? etc.
Para continuar (talvez amanhã e assim que você fornecer mais detalhes sobre o que deseja alcançar)…
stackoverflow.com/questions/8227948/…
@Renaud, existe uma maneira de alterar a cor da borda com problemas?
— user1940676
Não sei por que, mas quando o usei em um LinearLayoutshape<solid android:color="@android:color/transparent" />
— formulário
Para mim, era o mesmo que eu tinha que adicionar um, <solid android:color="@color/lighter_gray" />caso contrário eu tinha um fundo preto
Este método funciona perfeitamente; no entanto, ele cria duas camadas "Overdraw", o que é realmente ruim para o desempenho, mesmo se você definir o plano de fundo como "null" ou "transparent". Alguém pode sugerir uma maneira de corrigir esse problema?
— Sam Ramezanli
Estenda o LinearLayout / RelativeLayout e use-o diretamente no XML
— Gabriel Riba
Por favor, não aloque memória no onDraw()método, crie seus objetos em um init()método, chamado pelo construtor e reutilize-os no onDraw()método. Alocar onDraw()(chamado 60 vezes por segundo) leva a um desempenho ruim, consumo de bateria, etc.