PRÁTICA 12 – AVANÇADO – CRIAR SEU PRÓPRIO COMPONENTE
Objetivo:
Criar um componente próprio, que estenda as funcionalidades de um componente existente.
Introdução
classe -> conjunto de códigos e informações que implementa uma funcionalidade
extends -> indica que uma determinada classe estende a funcionalidade de outra.
Tarefa:
Criar um imageView animado:
Programa 1 – Main class:
1 2 3 4 5 6 7 8 9 10 |
import android.os.Bundle; import android.support.v7.app.AppCompatActivity; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } } |
Programa 1 – Layout para BouncingBall:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:id="@+id/layout" android:orientation="vertical" android:weightSum="1"> //Essa linha pode ser diferente de acordo com o nome do seu projeto! <empty.ammsoft.empty.BouncingBallView android:layout_width="fill_parent" android:layout_height="fill_parent" android:id="@+id/bouncingBall" android:layout_gravity="center_horizontal" android:adjustViewBounds="true" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" /> </RelativeLayout> |
Programa 1 – Clique em “new” -> “java class” e adicione uma nova classe chamada BouncingBallView (estende ImageView):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
package nome do seu pacote! // Esta linha deve ser mantida com o nome do pacote! import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.util.AttributeSet; import android.widget.ImageView; public class BouncingBallView extends ImageView { float ballX = 400; float ballY = 50; float incX = 1; float incY = 1; Paint paint; public BouncingBall(Context context, AttributeSet attrs) { super(context, attrs); paint = new Paint(); paint.setColor(Color.BLACK); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); if (ballX > this.getWidth() - 30) { incX = incX * (-1); } if (ballX < 30) { incX = incX * (-1); } if (ballY > this.getHeight() - 30) { incY = incY * (-1); } if (ballY < 30) { incY = incY * (-1); } ballX = ballX + incX*10; ballY = ballY + incY*10; canvas.drawCircle((int)ballX,(int)ballY,30, paint); invalidate(); } } |
Desafio: Adicione mais uma bolinha!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 |
package nome do seu pacote! // Esta linha deve ser mantida com o nome do pacote! import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.util.AttributeSet; import android.widget.ImageView; public class BouncingBallView extends ImageView { float ballX1 = 400; float ballY1 = 50; float incX1 = 1; float incY1 = 1; float ballX2 = 40; float ballY2 = 500; float incX2 = -1; float incY2 = -1; Paint paint; public BouncingBall(Context context, AttributeSet attrs) { super(context, attrs); paint = new Paint(); paint.setColor(Color.BLACK); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); //BALL 1 if (ballX1 > this.getWidth() - 30) { incX1 = incX1 * (-1); } if (ballX1 < 30) { incX1 = incX1 * (-1); } if (ballY1 > this.getHeight() - 30) { incY1 = incY1 * (-1); } if (ballY1 < 30) { incY1 = incY1 * (-1); } ballX1 = ballX1 + incX1*10; ballY1 = ballY1 + incY1*10; canvas.drawCircle((int)ballX1,(int)ballY1,30, paint); //BALL 2 if (ballX2 > this.getWidth() - 30) { incX2 = incX2 * (-1); } if (ballX2 < 30) { incX2 = incX2 * (-1); } if (ballY2 > this.getHeight() - 30) { incY2 = incY2 * (-1); } if (ballY2 < 30) { incY2 = incY2 * (-1); } ballX2 = ballX2 + incX2*10; ballY2 = ballY2 + incY2*10; canvas.drawCircle((int)ballX2,(int)ballY2,30, paint); invalidate(); } } |