Solucionado (ver solução)
Solucionado
(ver solução)
24
respostas

VÍDEO 3.1 - PROBLEMAS COM A VIEW

Em 2:01 ele está falando sobre a view e depois ele arrasta o "<include>" que está dentro da pasta "Custom" para o desenho do celular, o problema é eu consigo selecionar a view, mas depois e na hora de arrastar abre uma janela grande na vertical escrito "Resources", daí tem as abas "Project" e "System", a partir dai nao sei mais o que fazer. Por isso não posso fazer o que se faz no vídeo, no Android Studio depois de assistí-lo! Por favor, me ajudem!

24 respostas

Iann, em vez de clicar no <include>, selecione CustomView. Na telinha que aparecer, procure sua classe EstudoView e na sequência posicione esse componente na tela. Acho que funcionará.

Sim, ja fiz isso, cliquei em CustomView, selecionei a classe EstudoView, após isso, o cara no vídeo arrasta pra tela do desenho do celular. Quando vou arrastar, aparece uma janela(Resources) grande na vertical, e tem um monte de coisas pra selecionar lá dentro, dai eu ja não sei o que selecionar porque não tem isso no vídeo!

Então. Não precisa clicar no <include>.

Tente fazer esses passos:

  1. Clique em Custom View;
  2. Na tela que aparecer (chamada Views), selecione EstudoView e cloque em Ok;
  3. Leve o cursor do mouse para o seu layout;
  4. Posicione sua view (EstudoView) onde quiser.

fiz tudo o que vc mandou, o problema é que não esta dando certo, aparece uma setinha com um sinal de bloqueio embaixo!

Posta um screenshot dessa setinha pra eu dar uma olhada?

Como posta screenshot aqui???

Sobe num dropbox da vida e passa o link pra eu ver.

Ta ai, cliquei em CustomView, selecionei a "EstudoView" e na hora de colocar na imagem do celular igual no vídeo, aparece a setinha com o sinal de bloqueio embaixo!

https://www.dropbox.com/s/kps57tmr68fqvvr/DSC_0008.JPG?dl=0

Mesmo com essa setinha com sinal de bloqueio aparecendo, dá um clique na tela e vê o que acontece. Vê se o componente aparece no seu XML.

Não, não aparece!!! Infelizmente não da certo!

Estranho. Eu estou com a versão mais recente do Android Studio e te passei os passos que executei para fazer essa parte.

Bom, de qualquer forma, não é necessário usar essa perspectiva de Design para manipular o layout da aplicação. É sempre melhor usar o XML diretamente (que aparece na aba Text), pois é esse arquivo que sempre será modificado quando você arrasta algum componente na aba Design.

Na continuação desse vídeo (em 2'50"), dá pra ver o componente que aparece no XML, e você pode colocá-lo diretamente:

<View
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    class="br.com.alura.jogos2d.EstudoView"
    android:id="@+id/view" />

Ok, vou tentar, obrigado Felipe!

Não deu certo Felipe! Em 8:29, no meu programa não tem a linha desenhada e nem a caixa em azul selecionada! Não tem como selecionar! E olha que eu acompanhei tudo certinho no vídeo, importei tudo o que tinha que importar, escrevi tudo o que tinha que ser escrito no código, etc.... Qual a solução??

Sobre a "caixa azul selecionada" é justamente a View que você colocou no XML.

Sobre a "linha desenhada", ela é feita por meio do seu método onDraw da sua EstudoView.

Veja que aquela perspectiva de Desgin é só um assistente. Você pode fazer tudo normalmente pelo XML e pelo código.

Acredito que houve algum problema na digitação do seu código. Poderia postá-lo?

Mas a perspectiva de Design é muito importante pra tudo e principalmente, quando, por exemplo, eu for desenhar um personagem, porque senão eu vou estar fazendo um negócio que não estou vendo!? O_o

Código Main.java:

package br.com.alura.jogos2d;

import android.app.Activity;
import android.os.Bundle;

public class Main extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }
}

Código EstudoView.java:

package br.com.alura.jogos2d;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.View;

public class EstudoView extends View {

    public EstudoView(Context context) {
        super(context);
    }

    public EstudoView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        canvas.drawLine(0, 0, 100, 100, new Paint());
    }
}

Seu código está correto. Troque o seu XML, onde está

<View
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    class="br.com.alura.jogos2d.EstudoView"
    android:id="@+id/view" />

Por:

<br.com.alura.jogos2d.EstudoView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/view" />

Fiz isso e tudo funcionou como o esperado.

Sobre a perspectiva de Design: no Android ela não é importante (digo isso como desenvolvedor Android e iOS, com alguns anos de experiência). Essa perspectiva está muito melhor, mas ainda é bastante bugada (ao contrário do iOS). Então, sempre que possível, crie seus layouts pelo XML em vez de usar a perspectiva de Desgin. Use-a somente para conferir o que você está fazendo no XML.

Entendo, mas quando essa perspectiva de Design está tão bugada, que nem chega a mostrar o seu desenho, o que fazer???

Não funcionou, a linha não foi desenhada! É aquilo que eu disse: quando essa perspectiva de Design está tão bugada, que nem chega a mostrar o seu desenho, o que fazer???

MEU XML DEPOIS DA ALTERAÇÃO:


<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    tools:context="br.com.alura.jogos2d.Main">

    <android.support.design.widget.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/AppTheme.AppBarOverlay">

        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="?attr/colorPrimary"
            app:popupTheme="@style/AppTheme.PopupOverlay" />

    </android.support.design.widget.AppBarLayout>

    <include layout="@layout/content_main" />

    <android.support.design.widget.FloatingActionButton
        android:id="@+id/fab"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom|end"
        android:layout_margin="@dimen/fab_margin"
        android:src="@android:drawable/ic_dialog_email" />

    <br.com.alura.jogos2d.EstudoView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/view" />

</android.support.design.widget.CoordinatorLayout>
solução!

Logo no começo do projeto, você provavelmente criou uma Activity com Floating Button. Na realidade, era melhor você ter criado uma Activity Vazia. Isso explica o seu XML estar bem diferente do que é apresentado no vídeo e, por consequência, a perspectiva de Design não estar funcionando como o esperado.

Minha sugestão é você criar um novo projeto com Empty Activity.

Caso queira continuar desse jeito mesmo, transforme o XML que você me mostrou, neste aqui:

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <br.com.alura.jogos2d.EstudoView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/view" />

</RelativeLayout>

Na verdade criei uma Activity com Blank Activity, e aqui não tem a opcao Floating Button não.

Você quis dizer: apagar o meu código XML inteiro e trocar por esse ai que você me passou??

Se puder fazer a edição no meu código, pra mim melhor seria melhor porque ai depois eu só copiaria e colaria! Segue meu XML abaixo:

MEU CÓGIDO XML


<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    tools:context="br.com.alura.jogos2d.Main">

    <android.support.design.widget.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/AppTheme.AppBarOverlay">

        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="?attr/colorPrimary"
            app:popupTheme="@style/AppTheme.PopupOverlay" />

    </android.support.design.widget.AppBarLayout>

    <include layout="@layout/content_main" />

    <android.support.design.widget.FloatingActionButton
        android:id="@+id/fab"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom|end"
        android:layout_margin="@dimen/fab_margin"
        android:src="@android:drawable/ic_dialog_email" />

    <br.com.alura.jogos2d.EstudoView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/view" />

</android.support.design.widget.CoordinatorLayout>

Troca esse XML que você me mostrou pelo que está na minha resposta anterior.

Opa, agora funcionou!! Obrigado! Você poderia me explicar o porque não estava funcionando e agora funcionou? Mesmo eu criando o projeto utilizando Blank Activity?

O problema era o seu XML. Quando você criou o projeto, na tela para escolher o tipo da Activity, foi criada uma Activity com um layout contendo um botão no canto inferior direito, chamado de floating button.

Como você estava adicionando sua view no XML que funcionava como template, ele não tinha espaço para ser exibido.

Quando eu pedi para apagar todo esse template, criamos espaço para exibir sua view, além de tirar um monte de coisa que não será usada nesse curso.

Ok, obrigado!