/* * Author: Miguel Angel Bravo (@MiguelAngelBrav) * The Android Open Source Project Katbag is licensed under the General GPLv3. * */ package cl.ipp.katbag.core; import java.util.ArrayList; import java.util.List; import android.content.Context; import android.graphics.Matrix; import android.graphics.RectF; import android.view.animation.RotateAnimation; import android.widget.ImageView; import android.widget.RelativeLayout; import cl.ipp.katbag.MainActivity; public class KatbagDrawingBuilder extends RelativeLayout { private RelativeLayout v; private long id_drawing = -1; private List<String> parts = new ArrayList<String>(); private MainActivity mainActivity; public int myWidth = 0, myHeight = 0; public KatbagDrawingBuilder(Context context) { super(context); mainActivity = (MainActivity) context; v = this; } public void setIdDrawing(long id) { id_drawing = id; createDrawing(); } public long getIdDrawing() { return id_drawing; } public int getMyWidth() { return myWidth; } public int getMyHeight() { return myHeight; } private void createDrawing() { parts = mainActivity.katbagHandler.selectDrawingsPartsForIdApp(id_drawing); if (parts.size() > 0) { String[] part = parts.get(0).split("&&"); int minTop = Integer.parseInt(part[2]); int minLeft = Integer.parseInt(part[3]); int maxWidth = (Integer.parseInt(part[3]) + Integer.parseInt(part[4])); int maxHeight = (Integer.parseInt(part[2]) + Integer.parseInt(part[5])); for (int i = 1; i < parts.size(); i++) { part = parts.get(i).split("&&"); if (minTop > Integer.parseInt(part[2])) minTop = Integer.parseInt(part[2]); if (minLeft > Integer.parseInt(part[3])) minLeft = Integer.parseInt(part[3]); if (maxWidth < (Integer.parseInt(part[3]) + Integer.parseInt(part[4]))) maxWidth = (Integer.parseInt(part[3]) + Integer.parseInt(part[4])); if (maxHeight < (Integer.parseInt(part[2]) + Integer.parseInt(part[5]))) maxHeight = (Integer.parseInt(part[2]) + Integer.parseInt(part[5])); } myWidth = (maxWidth - minLeft); myHeight = (maxHeight - minTop); for (int i = 0; i < parts.size(); i++) { part = parts.get(i).split("&&"); ImageView image = addPart(part[1], Integer.parseInt(part[0])); RelativeLayout.LayoutParams mLayoutSize = new RelativeLayout.LayoutParams(Integer.parseInt(part[4]), Integer.parseInt(part[5])); mLayoutSize.topMargin = (Integer.parseInt(part[2]) - minTop); mLayoutSize.leftMargin = (Integer.parseInt(part[3]) - minLeft); image.setLayoutParams(mLayoutSize); if (Integer.parseInt(part[6]) > 0) rotate(image, Integer.parseInt(part[6])); v.addView(image); } } } public ImageView addPart(String mPart, int idImageView) { ImageView part = new ImageView(mainActivity.context); int identifier = mainActivity.context.getResources().getIdentifier(mPart, "drawable", mainActivity.context.getPackageName()); part.setImageResource(identifier); part.setId(idImageView); part.setTag(mPart); part.setAdjustViewBounds(true); return part; } public void rotate(ImageView part, int rotate) { if (part != null) { part.clearAnimation(); Matrix matrix = part.getImageMatrix(); RectF dst = new RectF(); matrix.mapRect(dst, new RectF(part.getDrawable().getBounds())); RotateAnimation mAnimation = new RotateAnimation(0, rotate, part.getWidth() / 2, part.getHeight() / 2); mAnimation.setFillEnabled(true); mAnimation.setFillAfter(true); part.startAnimation(mAnimation); part.setImageMatrix(matrix); } } }