Fixed UI icons resolution on HDPI devices introduced with sprite upscaling prevention for densities >1

Fixed variable text size in debug buttons
Fixed game crahing & walkalbe issues in new versions of BWM maps.
This commit is contained in:
Zukero
2015-07-10 15:53:10 +02:00
parent 297858f3f0
commit 4d1609d3c4
11 changed files with 118 additions and 48 deletions

View File

@@ -7,19 +7,24 @@
<ImageButton
android:id="@+id/status_image"
android:scaleType="fitCenter"
android:padding="8dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true"
android:layout_margin="3sp"
android:layout_margin="0sp"
/>
<ImageButton
android:id="@+id/toolbox_toggle"
android:scaleType="fitCenter"
android:padding="8dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:layout_margin="0sp"
/>
<LinearLayout

View File

@@ -28,6 +28,9 @@
<item name="android:textSize">@dimen/actionbar_text</item>
<item name="android:layout_width">wrap_content</item>
<item name="android:layout_height">@dimen/smalltext_buttonheight</item>
<item name="android:scaleType">fitCenter</item>
<item name="android:adjustViewBounds">true</item>
<item name="android:padding">5dp</item>
</style>
<style name="toolboxButtonTile">

View File

@@ -152,7 +152,7 @@
</layer>
<layer name="Walkable" width="30" height="30">
<data encoding="base64" compression="zlib">
eJztk90NwCAIhB2hS7n/SqZvjeEOUMH+kZBaDXxwgXqUUn9P8dOs5/4OmZV7zcvOnhql2jK5Ef0ii+ZqekZwtVxIE4teLM7CRXszwv4at4+fqVl6Q/+jxvSJ5Ep8jcF2cYa7wnex787N1nl2LlA+dsdqRV/25t3FN/eL6vPMineudnK98U/vV+NGGMvr1XylN0L8qaw=
eJztk90NwCAIhB2hS7n/Sk3fGsMdP4q2tiRE1MgHF6lHKfX3KX6ZNW7PkFm597ws9tQo1TaTm9EvsmyupmcGV8uFNLHoxd5ZuGhuIuyvcdv3PTVLd2gfNaZPJlfiaww2iyw/ikd6tOdduE/RuXd2UT52xmpFK7vzzuLO/aL6PH/F+69Wcntm5439atwMY3m9mo/0EyicqwA=
</data>
</layer>
<objectgroup name="Mapevents" width="0" height="0">

View File

@@ -190,12 +190,12 @@
</objectgroup>
<objectgroup name="Keys" width="14" height="10"/>
<objectgroup name="Replace" width="14" height="10">
<object name="quest:queststage" type="replace" x="96" y="128" width="160" height="96">
<object name="quest:100" type="replace" x="96" y="128" width="160" height="96">
<properties>
<property name="Walkable" value="Walkable_replace"/>
</properties>
</object>
<object name="quest:queststage" type="replace" x="96" y="96" width="160" height="128">
<object name="quest:100" type="replace" x="96" y="96" width="160" height="128">
<properties>
<property name="Above" value="Above_replace"/>
<property name="Objects" value="Objects_replace"/>

View File

@@ -44,10 +44,10 @@ public final class ConversationActivity
private static final int playerNameColor = Color.argb(255, 0xbb, 0x22, 0x22);
private static final int NPCNameColor = Color.argb(255, 0xbb, 0xbb, 0x22);
private static final int playerPhraseColor = Color.argb(255, 0x00, 0x00, 0x00);
private static final int NPCPhraseColor = Color.argb(255, 0x00, 0x00, 0x00);
private static final int playerPhraseColor = Color.argb(255, 0xff, 0xff, 0xff);
private static final int NPCPhraseColor = Color.argb(255, 0xff, 0xff, 0xff);
private static final int rewardColor = Color.argb(255, 0x99, 0x99, 0x55);
private static final int oldPhraseColor = Color.argb(255, 0x3a, 0x3a, 0x3a);
private static final int oldPhraseColor = Color.argb(255, 0xb0, 0xb0, 0xb0);
private static final int oldPlayerNameColor = Color.argb(255, 0x89, 0x19, 0x19);
private static final int oldNPCNameColor = Color.argb(255, 0xa2, 0xa2, 0x1d);
private static final int oldRewardColor = Color.argb(255, 0x7a, 0x7a, 0x44);

View File

@@ -162,7 +162,7 @@ public final class DebugInterface {
lp.addRule(RelativeLayout.ABOVE, R.id.main_statusview);
Button b = new Button(mainActivity);
b.setText(button.text);
b.setTextSize(res.getDimension(R.dimen.actionbar_text));
b.setTextSize(10);//res.getDimension(R.dimen.actionbar_text));
b.setId(id);
b.setLayoutParams(lp);
b.setOnClickListener(button.listener);

View File

@@ -5,6 +5,7 @@ import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.LayerDrawable;
import android.graphics.drawable.ScaleDrawable;
import android.os.AsyncTask;
import android.widget.ImageView;
import android.widget.TextView;
@@ -53,6 +54,7 @@ public final class TileManager {
public int tileSize;
public float density;
public float uiIconScale;
public int viewTileSize;
public float scale;
@@ -118,6 +120,7 @@ public final class TileManager {
public void setDensity(Resources r) {
density = r.getDisplayMetrics().density;
uiIconScale = 100 * density;
// tileSize = (int) (32 * density);
if (density < 1) tileSize = (int) (32 * density);
else tileSize = 32;
@@ -138,8 +141,23 @@ public final class TileManager {
public void setImageViewTileForPlayer(Resources res, TextView textView, int iconID) { setImageViewTile(res, textView, preloadedTiles.getBitmap(iconID)); }
public void setImageViewTile(Resources res, TextView textView, ActorConditionType conditionType) { setImageViewTile(res, textView, preloadedTiles.getBitmap(conditionType.iconID)); }
public void setImageViewTileForUIIcon(Resources res, TextView textView, int iconID) { setImageViewTile(res, textView, preloadedTiles.getBitmap(iconID)); }
private void setImageViewTile(Resources res, TextView textView, Bitmap b) { textView.setCompoundDrawablesWithIntrinsicBounds(new BitmapDrawable(res, b), null, null, null); }
private void setImageViewTile(Resources res, TextView textView, Bitmap b) {
if (density > 1) {
setImageViewTile(textView, new BitmapDrawable(res, Bitmap.createScaledBitmap(b, (int)(tileSize*density), (int)(tileSize*density), true)));
} else {
setImageViewTile(textView, new BitmapDrawable(res, b));
}
}
private void setImageViewTile(TextView textView, Drawable d) {
/*if (density > 1) {
ScaleDrawable sd = new ScaleDrawable(d, 0, uiIconScale, uiIconScale);
sd.setLevel(8000);
d.setBounds(0, 0, (int)(tileSize * density), (int)(tileSize * density));
textView.setCompoundDrawables(sd, null, null, null);
}
else */textView.setCompoundDrawablesWithIntrinsicBounds(d, null, null, null);
}
public void setImageViewTileForSingleItemType(Resources res, TextView textView, ItemType itemType) {
final Bitmap icon = tileCache.loadSingleTile(itemType.iconID, res);
setImageViewTile(res, textView, itemType, icon);
@@ -151,40 +169,81 @@ public final class TileManager {
private void setImageViewTile(Resources res, TextView textView, ItemType itemType, Bitmap icon) {
final int overlayIconID = itemType.getOverlayTileID();
if (overlayIconID != -1) {
textView.setCompoundDrawablesWithIntrinsicBounds(
if (density > 1) {
setImageViewTile(textView,
new LayerDrawable(new Drawable[] {
new BitmapDrawable(res, preloadedTiles.getBitmap(overlayIconID))
,new BitmapDrawable(res, icon)
}), null, null, null
new BitmapDrawable(res, Bitmap.createScaledBitmap(preloadedTiles.getBitmap(overlayIconID), (int)(tileSize*density), (int)(tileSize*density), true))
,new BitmapDrawable(res, Bitmap.createScaledBitmap(icon, (int)(tileSize*density), (int)(tileSize*density), true))
})
);
} else {
setImageViewTile(textView,
new LayerDrawable(new Drawable[] {
new BitmapDrawable(res, preloadedTiles.getBitmap(overlayIconID))
,new BitmapDrawable(res, icon)
})
);
}
} else {
setImageViewTile(res, textView, icon);
}
}
public void setImageViewTile(ImageView imageView, Monster monster) { setImageViewTileForMonster(imageView, monster.iconID); }
public void setImageViewTile(ImageView imageView, Player player) { setImageViewTileForPlayer(imageView, player.iconID); }
public void setImageViewTileForMonster(ImageView imageView, int iconID) { imageView.setImageBitmap(currentMapTiles.getBitmap(iconID)); }
public void setImageViewTileForPlayer(ImageView imageView, int iconID) { imageView.setImageBitmap(preloadedTiles.getBitmap(iconID)); }
public void setImageViewTile(ImageView imageView, ActorConditionType conditionType) { imageView.setImageBitmap(preloadedTiles.getBitmap(conditionType.iconID)); }
public void setImageViewTileForUIIcon(ImageView imageView, int iconID) { imageView.setImageBitmap(preloadedTiles.getBitmap(iconID)); }
public void setImageViewTile(Resources res, ImageView imageView, Monster monster) { setImageViewTileForMonster(res, imageView, monster.iconID); }
public void setImageViewTile(Resources res, ImageView imageView, Player player) { setImageViewTileForPlayer(res, imageView, player.iconID); }
public void setImageViewTileForMonster(Resources res, ImageView imageView, int iconID) { setImageViewTile(res, imageView, currentMapTiles.getBitmap(iconID)); }
public void setImageViewTileForPlayer(Resources res, ImageView imageView, int iconID) { setImageViewTile(res, imageView, preloadedTiles.getBitmap(iconID)); }
public void setImageViewTile(Resources res, ImageView imageView, ActorConditionType conditionType) { setImageViewTile(res, imageView, preloadedTiles.getBitmap(conditionType.iconID)); }
public void setImageViewTileForUIIcon(Resources res, ImageView imageView, int iconID) { setImageViewTile(res, imageView, preloadedTiles.getBitmap(iconID)); }
public void setImageViewTile(Resources res, ImageView imageView, Bitmap b) {
if (density > 1) {
setImageViewTile(imageView, new BitmapDrawable(res, Bitmap.createScaledBitmap(b, (int)(tileSize*density), (int)(tileSize*density), true)));
} else {
setImageViewTile(imageView, new BitmapDrawable(res, b));
}
}
public void setImageViewTile(ImageView imageView, Drawable d) {
imageView.setImageDrawable(d);
}
public void setImageViewTile(Resources res, ImageView imageView, ItemType itemType, TileCollection itemTileCollection) {
final Bitmap icon = itemTileCollection.getBitmap(itemType.iconID);
setImageViewTile(res, imageView, itemType, icon);
}
public void setImageViewTileWithOverlay(Resources res, ImageView imageView, int overlayIconID, Bitmap icon, boolean overlayAbove) {
if (overlayIconID != -1) {
Drawable overlayDrawable, iconDrawable;
if (density > 1) {
overlayDrawable = new BitmapDrawable(res, Bitmap.createScaledBitmap(preloadedTiles.getBitmap(overlayIconID), (int)(tileSize*density), (int)(tileSize*density), true));
iconDrawable = new BitmapDrawable(res, Bitmap.createScaledBitmap(icon, (int)(tileSize*density), (int)(tileSize*density), true));
} else {
overlayDrawable = new BitmapDrawable(res, preloadedTiles.getBitmap(overlayIconID));
iconDrawable = new BitmapDrawable(res, icon);
}
if (overlayAbove) {
setImageViewTile(imageView,
new LayerDrawable(new Drawable[] {
iconDrawable
,overlayDrawable
})
);
} else {
setImageViewTile(imageView,
new LayerDrawable(new Drawable[] {
overlayDrawable
,iconDrawable
})
);
}
} else {
setImageViewTile(res, imageView, icon);
}
}
private void setImageViewTile(Resources res, ImageView imageView, ItemType itemType, Bitmap icon) {
final int overlayIconID = itemType.getOverlayTileID();
if (overlayIconID != -1) {
imageView.setImageDrawable(
new LayerDrawable(new Drawable[] {
new BitmapDrawable(res, preloadedTiles.getBitmap(overlayIconID))
,new BitmapDrawable(res, icon)
})
);
} else {
imageView.setImageBitmap(icon);
}
setImageViewTileWithOverlay(res, imageView, overlayIconID, icon, false);
}
public void loadPreloadedTiles(Resources r) {

View File

@@ -139,7 +139,7 @@ public final class CombatView extends RelativeLayout implements CombatSelectionL
currentMonster = null;
if (selectedMonster != null) {
monsterBar.setVisibility(View.VISIBLE);
world.tileManager.setImageViewTile(monsterInfo, selectedMonster);
world.tileManager.setImageViewTile(res, monsterInfo, selectedMonster);
updateMonsterHealth(selectedMonster);
currentMonster = selectedMonster;
}

View File

@@ -102,7 +102,8 @@ public final class DisplayActiveActorConditionIcons implements ActorConditionLis
private final Animation onNewIconAnimation;
private final Animation onRemovedIconAnimation;
private final Animation onAppliedEffectAnimation;
final Resources res;
public ActiveConditionIcon(Context context, int id) {
this.id = id;
this.image = new ImageView(context);
@@ -113,7 +114,7 @@ public final class DisplayActiveActorConditionIcons implements ActorConditionLis
this.onAppliedEffectAnimation = AnimationUtils.loadAnimation(context, R.anim.scalebeat);
this.onRemovedIconAnimation.setAnimationListener(this);
final Resources res = context.getResources();
res = context.getResources();
text.setTextColor(res.getColor(android.R.color.white));
text.setShadowLayer(1, 1, 1, res.getColor(android.R.color.black));
@@ -121,7 +122,7 @@ public final class DisplayActiveActorConditionIcons implements ActorConditionLis
private void setActiveCondition(ActorCondition condition) {
this.condition = condition;
tileManager.setImageViewTile(image, condition.conditionType);
tileManager.setImageViewTile(res, image, condition.conditionType);
image.setVisibility(View.VISIBLE);
setIconText();
}

View File

@@ -26,12 +26,13 @@ public final class StatusView extends RelativeLayout implements PlayerStatsListe
private final ControllerContext controllers;
private final WorldContext world;
private final Player player;
private final Resources res;
private final RangeBar healthBar;
private final RangeBar expBar;
private final ImageButton heroImage;
private boolean showingLevelup;
private final Drawable levelupDrawable;
// private final Drawable levelupDrawable;
public StatusView(final Context context, AttributeSet attr) {
super(context, attr);
@@ -59,11 +60,11 @@ public final class StatusView extends RelativeLayout implements PlayerStatsListe
expBar = (RangeBar) findViewById(R.id.statusview_exp);
expBar.init(R.drawable.ui_progress_exp, R.string.status_exp);
Resources res = getResources();
levelupDrawable = new LayerDrawable(new Drawable[] {
new BitmapDrawable(res, world.tileManager.preloadedTiles.getBitmap(player.iconID))
,new BitmapDrawable(res, world.tileManager.preloadedTiles.getBitmap(TileManager.iconID_moveselect))
});
res = getResources();
// levelupDrawable = new LayerDrawable(new Drawable[] {
// new BitmapDrawable(res, world.tileManager.preloadedTiles.getBitmap(player.iconID))
// ,new BitmapDrawable(res, world.tileManager.preloadedTiles.getBitmap(TileManager.iconID_moveselect))
// });
updateStatus();
updateIcon(player.canLevelup());
@@ -101,9 +102,9 @@ public final class StatusView extends RelativeLayout implements PlayerStatsListe
private void updateIcon(boolean canLevelUp) {
showingLevelup = canLevelUp;
if (canLevelUp) {
heroImage.setImageDrawable(levelupDrawable);
world.tileManager.setImageViewTileWithOverlay(res, heroImage, TileManager.iconID_moveselect, world.tileManager.preloadedTiles.getBitmap(player.iconID), true);
} else {
world.tileManager.setImageViewTile(heroImage, player);
world.tileManager.setImageViewTile(res, heroImage, player);
}
}

View File

@@ -38,6 +38,7 @@ public final class ToolboxView extends LinearLayout implements OnClickListener {
private boolean hideQuickslotsWhenToolboxIsClosed = false;
private static final int quickSlotIcon = R.drawable.ui_icon_equipment;
private final Drawable quickSlotIconsLockedDrawable;
private final Resources res;
public ToolboxView(final Context context, AttributeSet attrs) {
super(context, attrs);
@@ -67,7 +68,7 @@ public final class ToolboxView extends LinearLayout implements OnClickListener {
toolbox_combatlog = (ImageButton)findViewById(R.id.toolbox_combatlog);
toolbox_combatlog.setOnClickListener(this);
Resources res = getResources();
res = getResources();
quickSlotIconsLockedDrawable = new LayerDrawable(new Drawable[] {
res.getDrawable(quickSlotIcon)
,new BitmapDrawable(res, world.tileManager.preloadedTiles.getBitmap(TileManager.iconID_moveselect))
@@ -155,17 +156,17 @@ public final class ToolboxView extends LinearLayout implements OnClickListener {
private void setToolboxIcon(boolean opened) {
if (opened) {
world.tileManager.setImageViewTileForUIIcon(toggleToolboxVisibility, TileManager.iconID_boxopened);
world.tileManager.setImageViewTileForUIIcon(res, toggleToolboxVisibility, TileManager.iconID_boxopened);
} else {
world.tileManager.setImageViewTileForUIIcon(toggleToolboxVisibility, TileManager.iconID_boxclosed);
world.tileManager.setImageViewTileForUIIcon(res, toggleToolboxVisibility, TileManager.iconID_boxclosed);
}
}
private void updateToggleQuickSlotItemsIcon() {
if (preferences.showQuickslotsWhenToolboxIsVisible && !hideQuickslotsWhenToolboxIsClosed) {
toolbox_quickitems.setImageDrawable(quickSlotIconsLockedDrawable);
world.tileManager.setImageViewTile(toolbox_quickitems, quickSlotIconsLockedDrawable);
return;
}
toolbox_quickitems.setImageDrawable(getResources().getDrawable(quickSlotIcon));
world.tileManager.setImageViewTile(toolbox_quickitems, getResources().getDrawable(quickSlotIcon));
}
}