PRÁTICA 13 – AVANÇADO – CRIANDO CLASSES E ENCAPSULANDO CÓDIGO
Objetivo:
Encapsular código para simplificar alguma funcionalidade.
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 uma classe Ball que encapsule o código de uma bolinha:
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 Ball:
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 |
package nome do seu pacote! // Esta linha deve ser mantida com o nome do pacote! import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import java.util.Random; public class Ball { public float ballX = 400; public float ballY = 50; public float incX = 1; public float incY = 1; Random random = new Random(); Paint paint; public Ball() { paint = new Paint(); paint.setColor(Color.BLACK); ballX = 100 + random.nextFloat()*300; ballY = 100 + random.nextFloat()*300; if (random.nextFloat() > 0.5f) { incX = random.nextFloat()*5; } else incX = -random.nextFloat()*5; if (random.nextFloat() > 0.5f) { incY = random.nextFloat()*5; } else incY = -random.nextFloat()*5; } public void draw(Canvas canvas) { if (ballX > canvas.getWidth() - 30) { incX = incX * (-1); } if (ballX < 30) { incX = incX * (-1); } if (ballY > canvas.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); } } |
Programa 1 – Clique em “new” -> “java class” e adicione uma nova classe chamada BouncingBallsView:
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 |
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.util.AttributeSet; import android.widget.ImageView; public class BouncingBallView extends ImageView { Ball ball1; Ball ball2; public BouncingBallView(Context context, AttributeSet attrs) { super(context, attrs); ball1 = new Ball(); ball2 = new Ball(); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); ball1.draw(canvas); ball2.draw(canvas); invalidate(); } } |
Desafio: usando ArrayList<Ball> e um FOR, crie um programa com 50 bolinhas:
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 |
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.util.AttributeSet; import android.widget.ImageView; import java.util.ArrayList; public class BouncingBallView extends ImageView { ArrayList<Ball> allballs = new ArrayList<Ball>(); public BouncingBallView(Context context, AttributeSet attrs) { super(context, attrs); for (int loop=0;loop<50;loop++) { allballs.add(new Ball()); } } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); for (int loop=0;loop<50;loop++) { allballs.get(loop).draw(canvas); } invalidate(); } } |