我想要根據發送到更新函數的水平大小將圖像縮放到一定的大小,但下面的代碼似乎沒有正確確定圖像的大小。爲什麼我的圖像不能正確縮放?
編輯:代碼:
public class GlassesView extends View {
private Paint paint;
private BitmapFactory.Options options;
private Bitmap bitmapOrg;
private Bitmap target;
private Bitmap bitmapRev;
private Bitmap resizedBitmap;
private int currY;
public int glassesX;
public int glassesY;
public float glassesSizeX;
public float glassesSizeY;
private boolean drawGlasses;
private boolean glassesMirrored;
public GlassesView(Context context) {
super(context);
paint = new Paint();
paint.setDither(false);
paint.setAntiAlias(false);
options = new BitmapFactory.Options();
options.inDither = false;
options.inScaled = false;
bitmapOrg = Bitmap.createScaledBitmap(BitmapFactory.decodeResource(getResources(),
R.drawable.micro_glasses, options), 32, 5, false);
bitmapRev = Bitmap.createScaledBitmap(BitmapFactory.decodeResource(getResources(),
R.drawable.glasses_reverse, options), 32, 5, false);
drawGlasses = false;
}
@Override
protected void onDraw(Canvas canvas) {
canvas.drawBitmap(target, 0, 0, paint);
boolean moving = currY < glassesY;
if (moving) {
currY++;
}
if (drawGlasses) {
int newWidth = resizedBitmap.getWidth();
int newHeight = resizedBitmap.getHeight();
Paint bluey = new Paint();
bluey.setColor(Color.argb(64, 0, 0, 255));
canvas.drawRect(new Rect(glassesX, currY, glassesX + newWidth,
currY + newHeight), bluey);
canvas.drawBitmap(resizedBitmap, glassesX, currY, paint);
}
if (moving) {
invalidate();
}
}
public void drawGlasses(int x1, int x2, int y, boolean mirror) {
drawGlasses = true;
glassesMirrored = mirror;
if (!mirror) {
glassesSizeX = (float) (x2 - x1)/(float) (25 - 16);
glassesSizeY = glassesSizeX;
glassesY = y - (int)(1*glassesSizeX);
glassesX = (int) (x1 - (glassesSizeX * 16));
} else {
glassesSizeX = (float) (x1 - x2)/(float) (25 - 16);
glassesSizeY = glassesSizeX;
glassesY = y - (int)(1*glassesSizeX);
glassesX = (int) (x1 - (glassesSizeX * 16));
}
currY = -1;
if (!glassesMirrored) {
resizedBitmap = Bitmap.createScaledBitmap(bitmapOrg,
(int) (bitmapOrg.getWidth() * glassesSizeX),
(int) (bitmapOrg.getHeight() * glassesSizeY), false);
} else {
resizedBitmap = Bitmap.createScaledBitmap(bitmapRev,
(int) (bitmapRev.getWidth() * glassesSizeX),
(int) (bitmapRev.getHeight() * glassesSizeY), false);
}
}
public void setTargetPic(Bitmap targetPic) {
target = targetPic;
}
}
The result.(藍色矩形作爲圖像的預期尺寸的邊框),難道我要去
哪一部分錯了嗎?
編輯2: 這裏是眼鏡:
編輯3: 出於好奇,我跑了我的實際的手機上,並得到了much different result,圖像被拉伸過預期的藍盒子。
編輯4: 我試着在幾個模擬器上運行該應用程序,看看它是否是一個Android版本不兼容的東西,但他們似乎都工作得很好。縮放問題只發生在我的手機(充滿活力,根源,CM7)和我的表弟(Droid,也紮根)。這些是我測試過的唯一物理設備,但它們似乎都有相同的問題。 如果有人能夠幫助我,我真的很感激,這是我項目中的一個巨大障礙,沒有其他論壇或消息組織正在迴應。
編輯5: 我應該提到,在更新4中,代碼發生了一些變化,這就解決了仿真器中的問題(如我所述),但不適用於物理設備。更改在上面的代碼中更新。 *絕望的求救*:P
編輯6: 另一個更新,我測試了我的舊G1相同的代碼,並預期它完美的作品。我現在完全沒有線索。
爲什麼不在這裏發佈你的代碼? – Atreys 2011-06-13 03:54:38
我認爲它會太長,不是嗎? – 2011-06-13 04:10:59
您被允許/鼓勵直接在您的問題中發佈代碼。如果它太長,它會自動設置爲滾動(如果你格式正確!)這就是說,我不認爲你的代碼在其他地方是值得的票。 – Haphazard 2011-06-13 04:12:44