Android Open Source - java-androidframework Shape






From Project

Back to project page java-androidframework.

License

The source code is released under:

This project is licensed under the [CC0 1.0 Agreement](http://creativecommons.org/publicdomain/zero/1.0/). To the extent possible under law, Pete Schmitz has waived all copyright and related or neigh...

If you think the Android project java-androidframework listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package com.gamepatriot.framework2d.implementation;
//w  w  w.j a  va  2  s.  co  m
import java.util.ArrayList;

import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Paint.Style;
import android.graphics.Point;
import android.graphics.PointF;
import android.graphics.Rect;
import android.graphics.RectF;

import com.gamepatriot.androidframework.framework.AndroidBasicShape;
import com.gamepatriot.androidframework.framework.AndroidScreen;
import com.gamepatriot.androidframework.framework.AndroidShape;

/** 
 * The shape class contains individual shape references in the form of {@link BasicShape}s. These basic shapes are stored in a display list so that they may 
 * be displayed to a screen by a {@link Renderer}.
 * 
 * @see AndroidShape
 * @author Pete Schmitz, May 9, 2013
 *
 */
public class Shape implements AndroidShape {
  
  /** 
   * The ShapeType enum provides flags for acceptable shapes during a shape's draw call ({@link Shape#draw(Canvas)}).
   * 
   * @author Pete Schmitz, May 9, 2013
   *
   */
  public static enum ShapeType{
    LINE, CIRCLE, RECTANGLE, POLY, TEXT;
  }
  
  
  //Containers
  
  /** (Read-only) The position of this shape. Children basic shapes are offset by this number. Call {@link #setPosition(int, int)} to modify. **/
  public Point position;
  
  /** (Read-only) The display list for this shape. Us thee various add/remove/clear calls in the {@link Shape} class to manipulate the display contents and order. **/
  public ArrayList<BasicShape> basicShapes;
  
  /** The default paint of this shape **/
  private Paint paint;
  
  
  //Flags
  
  /** Parent reference that this shape is a child of; null if no parent. **/
  private Screen parent;
  
  /** Whether or not shadows are enabled for basic shapes. **/
  private boolean shadowsEnabled;
  
  /** The amount of radius to apply on basic shapes' shadows. **/
  private float shadowRadius;
  
  /** The X-offset of the shadow being applied. **/
  private float shadowOffsetX;
  
  /** The Y-offset of the shadow being applied. **/
  private float shadowOffsetY;
  
  /** The color of the shadow being applied. **/
  private int shadowColor;
  
  
  public Shape(){
    init();
    setDefaultPaint();
  }
  
  public Shape(Paint $paint){
    init();
    paint = $paint;
  }
  
  public void init(){
    parent = null;
    shadowsEnabled = false;
    
    position = new Point();
    basicShapes = new ArrayList<BasicShape>(0);
  }
  
  @Override
  public void setPosition(int $x, int $y) {
    position.x = $x;
    position.y = $y;
    
    for (BasicShape $basicShape : basicShapes){
      if ($basicShape.path != null){
        $basicShape.buildPath($x, $y);
      }
    }
  }

  @Override
  public void setDefaultPaint() {
    paint = new Paint();
    paint.setColor(Color.WHITE);
    paint.setStyle(Style.STROKE);
    paint.setAlpha((int) (255 * .9));
    paint.setAntiAlias(Main.ALLOW_ANTI_ALIASING);
    paint.setDither(Main.ALLOW_DITHER);
    paint.setFilterBitmap(Main.ALLOW_ANTI_ALIASING || Main.ALLOW_DITHER);
  }
  
  @Override
  public void enableShadows(float $radius, float $offsetX, float $offsetY, int $color) {
    shadowsEnabled = true;
    
    shadowRadius = $radius;
    shadowOffsetX = $offsetX;
    shadowOffsetY = $offsetY;
    shadowColor = $color;
    
    for (BasicShape $bs : basicShapes) checkShadow($bs.paint);
  }
  
  @Override
  public void disableShadows(){
    shadowsEnabled = false;
    
    for (BasicShape $bs : basicShapes) checkShadow($bs.paint);
  }

  @Override
  public void draw(Canvas $canvas) {
    
    for (BasicShape $shape : basicShapes){
      switch ($shape.type){
      case CIRCLE:
        $canvas.drawCircle($shape.points[0] + position.x, $shape.points[1] + position.y, $shape.radius, $shape.paint == null ? paint : $shape.paint);
        break;
        
      case LINE:
        $canvas.drawLine($shape.points[0] + position.x, $shape.points[1] + position.y, $shape.points[2] + position.x, $shape.points[3] + position.y, $shape.paint == null ? paint : $shape.paint);
        break;
        
      case RECTANGLE:
        $canvas.drawRect($shape.points[0] + position.x, $shape.points[1] + position.y, $shape.points[2] + position.x, $shape.points[3] + position.y, $shape.paint == null ? paint : $shape.paint);
        break;
        
      case TEXT:
        if ($shape.paint == null) paint.setTextSize($shape.radius);
        else $shape.paint.setTextSize($shape.radius);
        $canvas.drawText($shape.text, $shape.points[0] + position.x, $shape.points[1] + position.y, $shape.paint == null ? paint : $shape.paint);
        break;
        
      case POLY:
        $canvas.drawPath($shape.path, $shape.paint == null ? paint : $shape.paint);
        break;
      }
    }
  }

  @Override
  public void clear() {
    basicShapes.clear();
  }

  @Override
  public AndroidBasicShape addCircle(Point $p, float $radius) {
    return addCircle($p.x, $p.y, $radius, null);
  }

  @Override
  public AndroidBasicShape addCircle(PointF $p, float $radius) {
    return addCircle((int) $p.x, (int) $p.y, $radius, null);
  }

  @Override
  public AndroidBasicShape addCircle(int $x, int $y, float $radius) {
    return addCircle($x, $y, $radius, null);
  }
  
  @Override
  public AndroidBasicShape addCircle(int $x, int $y, float $radius, Paint $paint) {
    BasicShape $bShape = new BasicShape();
    checkShadow($paint);
    $bShape.setAsCircle($x, $y, $radius, $paint);
    basicShapes.add($bShape);
    
    return $bShape;
  }
  
  @Override
  public AndroidBasicShape addCircle(Point $p, float $radius, Paint $paint) {
    return addCircle($p.x, $p.y, $radius, $paint);
  }
  
  @Override
  public AndroidBasicShape addCircle(PointF $p, float $radius, Paint $paint) {
    return addCircle((int) $p.x, (int) $p.y, $radius, $paint);
  }

  @Override
  public AndroidBasicShape addRect(Rect $r) {
    return addRect($r.left, $r.top, $r.width(), $r.height(), null);
  }

  @Override
  public AndroidBasicShape addRect(RectF $r) {
    return addRect((int) $r.left, (int) $r.top, (int) $r.width(), (int) $r.height(), null);
  }

  @Override
  public AndroidBasicShape addRect(int $x, int $y, int $width, int $height) {
    return addRect($x, $y, $width, $height, null);
  }
  
  @Override
  public AndroidBasicShape addRect(int $x, int $y, int $width, int $height, Paint $paint) {
    BasicShape $bShape = new BasicShape();
    checkShadow($paint);
    $bShape.setAsRectangle($x, $y, $x + $width, $y + $height, $paint);
    basicShapes.add($bShape);
    
    return $bShape;
  }
  
  @Override
  public AndroidBasicShape addRect(Rect $r, Paint $paint) {
    return addRect($r.left, $r.top, $r.width(), $r.height(), $paint);
  }
  
  @Override
  public AndroidBasicShape addRect(RectF $r, Paint $paint) {
    return addRect((int) $r.left, (int) $r.top, (int) $r.width(), (int) $r.height(), $paint);
  }

  @Override
  public AndroidBasicShape addLine(Point $p1, Point $p2) {
    return addLine($p1.x, $p1.y, $p2.x, $p2.y, null);
  }

  @Override
  public AndroidBasicShape addLine(PointF $p1, PointF $p2) {
    return addLine((int) $p1.x, (int) $p1.y, (int) $p2.x, (int) $p2.y, null);
  }

  @Override
  public AndroidBasicShape addLine(int $x1, int $y1, int $x2, int $y2) {
    return addLine($x1, $y1, $x2, $y2, null);
  }
  
  @Override
  public AndroidBasicShape addLine(int $x1, int $y1, int $x2, int $y2, Paint $paint) {
    BasicShape $bShape = new BasicShape();
    checkShadow($paint);
    $bShape.setAsLine($x1, $y1, $x2, $y2, $paint);
    basicShapes.add($bShape);
    
    return $bShape;
  }
  
  @Override
  public AndroidBasicShape addLine(Point $p1, Point $p2, Paint $paint) {
    return addLine($p1.x, $p1.y, $p2.x, $p2.y, $paint);
  }
  
  @Override
  public AndroidBasicShape addLine(PointF $p1, PointF $p2, Paint $paint) {
    return addLine((int) $p1.x, (int) $p1.y, (int) $p2.x, (int) $p2.y, $paint);
  }

  @Override
  public AndroidBasicShape addText(String $text, float $size, Point $p) {
    return addText($text, $size, $p.x, $p.y, null);
  }

  @Override
  public AndroidBasicShape addText(String $text, float $size, PointF $p) {
    return addText($text, $size, (int) $p.x, (int) $p.y, null);
  }

  @Override
  public AndroidBasicShape addText(String $text, float $size, int $x, int $y) {
    return addText($text, $size, $x, $y, null);
  }
  
  @Override
  public AndroidBasicShape addText(String $text, float $size, int $x, int $y, Paint $paint) {
    BasicShape $bShape = new BasicShape();
    checkShadow($paint);
    $bShape.setAsText($text, $size, $x, $y, $paint);
    basicShapes.add($bShape);
    
    return $bShape;
  }
  
  @Override
  public AndroidBasicShape addText(String $text, float $size, Point $p, Paint $paint) {
    return addText($text, $size, $p.x, $p.y, $paint);
  }
  
  @Override
  public AndroidBasicShape addText(String $text, float $size, PointF $p, Paint $paint) {
    return addText($text, $size, (int) $p.x, (int) $p.y, $paint);
  }
  
  @Override
  public AndroidBasicShape addPoly(int $x, int $y, int $numberPoints, float $degreeAngle,
      float $radius) {
    return addPoly($x, $y, $numberPoints, $degreeAngle, $radius, null);
  }
  
  @Override
  public AndroidBasicShape addPoly(float[] $points) {
    return addPoly($points, null);
  }
  
  @Override
  public AndroidBasicShape addPoly(float[] $points, Paint $paint) {
    BasicShape $bShape = new BasicShape();
    checkShadow($paint);
    $bShape.setAsPoly($points, $paint);
    basicShapes.add($bShape);
    
    return $bShape;
  }
  
  @Override
  public AndroidBasicShape addPoly(int $x, int $y, int $numberPoints, float $degreeAngle,
      float $radius, Paint $paint) {
    float[] $points = new float[$numberPoints * 2];
    int $i;
    float $x1;
    float $y1;
    float $angle;
    
    for ($i = 0; $i < $numberPoints;  $i++){
      
      $angle = (float)(Math.PI * 2 *  ((float) $i/ (float) $numberPoints));
      $angle += $degreeAngle;
      $x1 = (float) ($x + Math.cos($angle) * $radius);
      $y1 = (float) ($y + Math.sin($angle) * $radius);
      
      $points[$i * 2] = $x1;
      $points[$i * 2 + 1] = $y1;
    }
    
    return addPoly($points, $paint);
  }

  @Override
  public boolean removeBasicShape(AndroidBasicShape $bShape) {
    return basicShapes.remove($bShape);
  }

  @Override
  public AndroidScreen getParent() {
    return parent;
  }

  @Override
  public void removeFromParent() {
    if (parent == null) return;
    
    parent.removeShape(this);
  }

  @Override
  public boolean hasParent() {
    return !(parent == null);
  }

  @Override
  public void setParent(AndroidScreen $screen) {
    parent = (Screen) $screen;
  }
  
  /** Apply or disable shadows for the supplied paint. **/
  private void checkShadow(Paint $paint){
    if ($paint == null) return;
    
    if (!shadowsEnabled) $paint.clearShadowLayer();
    else $paint.setShadowLayer(shadowRadius, shadowOffsetX, shadowOffsetY, shadowColor);
  }
  
  
  
}




Java Source Code List

com.gamepatriot.androidframework.framework.AndroidAnimationData.java
com.gamepatriot.androidframework.framework.AndroidAtlas.java
com.gamepatriot.androidframework.framework.AndroidBasicShape.java
com.gamepatriot.androidframework.framework.AndroidGameData.java
com.gamepatriot.androidframework.framework.AndroidImage.java
com.gamepatriot.androidframework.framework.AndroidInputter.java
com.gamepatriot.androidframework.framework.AndroidMain.java
com.gamepatriot.androidframework.framework.AndroidMusicHandler.java
com.gamepatriot.androidframework.framework.AndroidPool.java
com.gamepatriot.androidframework.framework.AndroidRenderer.java
com.gamepatriot.androidframework.framework.AndroidScreen.java
com.gamepatriot.androidframework.framework.AndroidShape.java
com.gamepatriot.androidframework.framework.AndroidSoundHandler.java
com.gamepatriot.framework2d.classes.FPS.java
com.gamepatriot.framework2d.implementation.AnimationData.java
com.gamepatriot.framework2d.implementation.Atlas.java
com.gamepatriot.framework2d.implementation.BasicShape.java
com.gamepatriot.framework2d.implementation.GameData.java
com.gamepatriot.framework2d.implementation.Image.java
com.gamepatriot.framework2d.implementation.Inputter.java
com.gamepatriot.framework2d.implementation.Main.java
com.gamepatriot.framework2d.implementation.MusicHandler.java
com.gamepatriot.framework2d.implementation.Pool.java
com.gamepatriot.framework2d.implementation.Renderer.java
com.gamepatriot.framework2d.implementation.Screen.java
com.gamepatriot.framework2d.implementation.Shape.java
com.gamepatriot.framework2d.implementation.SoundHandler.java
com.gamepatriot.framework2d.screens.Example.java