Created
November 19, 2014 05:50
-
-
Save cbedoy/618ad6d5ba26b3e091dd to your computer and use it in GitHub Desktop.
MosaicService
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import java.util.ArrayList; | |
import java.util.Random; | |
/** | |
* -------------------------------------------------------- | |
* Created by Carlos Bedoy on 18/11/14. | |
* MosaicTest | |
* Mobile Developer | |
* Aguascalientes Mexico | |
* Email: [email protected] | |
* Facebook: https://www.facebook.com/carlos.bedoy | |
* ---------CODE && MUSIC ---------------------------------- | |
*/ | |
public class MosaicService | |
{ | |
private Random random; | |
private ArrayList<MosaicView> dataModel; | |
public MosaicService(){ | |
this.dataModel = new ArrayList<MosaicView>(); | |
this.random = new Random(600); | |
this.fillData(); | |
} | |
private void fillData(){ | |
int[] w = new int[]{386,488,576,584}; | |
int[] h = new int[]{475,374,380,483}; | |
for(int i = 0; i<w.length; i++){ | |
MosaicView mosaicView = new MosaicView(); | |
Info info = new Info(); | |
info.setFrame(new CGRect(0,0,w[i], h[i])); | |
mosaicView.setInfo(info); | |
dataModel.add(mosaicView); | |
} | |
} | |
public int fuckingInt(int min, int max){ | |
int i = random.nextInt((max - min) + 1) + min; | |
return i; | |
} | |
public void doAny(){ | |
ArrayList<Info> infoForCells = new ArrayList<Info>(); | |
int numberOfCells = dataModel.size(); | |
int CELL_PADDING = 3; | |
int CELL_MAX_HEIGHT = 168; | |
float lastCellRightX = CELL_PADDING; | |
float rowBottomY = 0; | |
float rowTopY = CELL_PADDING; | |
int rowFirstIndex = 0; | |
int rowLastIndex = 0; | |
float boundsHeight = 1024; | |
float boundsWidth = 720; | |
for(int i = 0 ; i<numberOfCells; i++){ | |
CGSize size = dataModel.get(i).getInfo().getFrame().size; | |
float ratio = size.width / size.height; | |
CGSize actualSize = new CGSize(CELL_MAX_HEIGHT*ratio, CELL_MAX_HEIGHT); | |
if(actualSize.width>= boundsWidth - lastCellRightX - CELL_PADDING){ | |
actualSize.width = boundsWidth - lastCellRightX - CELL_PADDING; | |
actualSize.height = actualSize.width/ratio; | |
rowLastIndex = i; | |
} | |
if(FLOAT_CHECK_EQUAL(lastCellRightX, CELL_PADDING)){ | |
rowBottomY = actualSize.height; | |
rowFirstIndex = i; | |
} | |
Info info = new Info(); | |
info.setFrame(new CGRect(lastCellRightX, rowTopY, actualSize.width, actualSize.height)); | |
info.setIndex(i); | |
info.setRatio(ratio); | |
infoForCells.add(info); | |
lastCellRightX += actualSize.width + CELL_PADDING; | |
if(lastCellRightX > boundsWidth) | |
{ | |
if(rowLastIndex >= rowFirstIndex) | |
{ | |
float ratios = 0.f; | |
for(int jj = rowFirstIndex; jj<rowLastIndex; jj++) | |
{ | |
Info __info = infoForCells.get(jj); | |
ratios += __info.getRatio(); | |
} | |
rowBottomY = (boundsWidth - ((rowLastIndex - rowFirstIndex + 2) * CELL_PADDING))/ratios; | |
lastCellRightX = CELL_PADDING; | |
for(int jj= rowFirstIndex; jj<rowLastIndex; jj++) | |
{ | |
Info __info = infoForCells.get(jj); | |
CGRect cellFrame = __info.getFrame(); | |
cellFrame.origin.x = lastCellRightX; | |
cellFrame.size.height = rowBottomY; | |
cellFrame.size.width = rowBottomY * __info.getRatio(); | |
__info.setFrame(cellFrame); | |
lastCellRightX +=CELL_PADDING + cellFrame.size.width; | |
} | |
} | |
lastCellRightX = CELL_PADDING; | |
if(i !=numberOfCells -1) | |
rowTopY += rowBottomY + CELL_PADDING; | |
else{ | |
} | |
} | |
float maxHeight = rowBottomY+rowTopY+CELL_PADDING; | |
CGSize contentSize = new CGSize(0.0f, maxHeight); | |
} | |
for(int index = 0; index<dataModel.size(); index++){ | |
Info info1 = infoForCells.get(index); | |
MosaicView mosaicView = dataModel.get(index); | |
mosaicView.setInfo(info1); | |
mosaicView.reload(); | |
} | |
} | |
private boolean FLOAT_CHECK_EQUAL(float leftValue, float rightValue) { | |
return (Math.abs((leftValue)-(rightValue)) < 1); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment