我在photoshop中制作了一张藏宝图,我制作了一个带有彩色热点的透明图像,以便放置藏宝图,这样我就可以点击它。
当我点击彩色圆点(不可见)时,Android会检测点击的颜色并按照要求执行相应的方法。
现在我有了一个imageview,这将是我的播放器,每天我都希望它移动到地图上的另一个彩色热点(每个热点代表一周中的某一天)。
我有这个代码,但位置很远:
private void moveToColor(ImageView iv, int toColor) {
Bitmap bm = BitmapFactory.decodeResource(getResources(),R.drawable.hotspots);
int width = bm.getWidth();
int height = bm.getHeight();
int[] pixels = new int[width * height];
bm.getPixels(pixels, 0, width, 0, 0, width, height);
for (int ix = 0; ix < width; ++ix) {
for (int iy = 0; iy < height; ++iy) {
if (toColor == bm.getPixel(ix, iy)) {
iv.animate().translationX((float)ix);
iv.animate().translationY((float)iy);
return;
}
}
}
}
有时它会将imageview移近toColor,有时它会完全关闭或甚至不在地图上。
关于我如何做到这一点的任何指示。我尝试使用缓冲区copypixelstobuffer,但我不太清楚它是如何工作的。因为上面很慢..
谢谢!
答案 0 :(得分:0)
确定它已关闭,请仔细阅读translationX
属性的说明:http://developer.android.com/reference/android/view/View.html#attr_android:translationX
&#34;此值在布局后添加到视图的左侧属性&#34;
它位于视图左侧的 relative ,即它的位移,而不是绝对位置。 相反,使用
iv.animate().x((float)ix);
和它的双胞胎兄弟.y()
答案 1 :(得分:0)
我实际上发现如果我改变了
Bitmap bm = BitmapFactory.decodeResource(getResources(),R.drawable.hotspots);
int width = bm.getWidth();
int height = bm.getHeight();
到此:
Bitmap bm = BitmapFactory.decodeResource(getResources(), R.drawable.hotspots);
bm = Bitmap.createScaledBitmap(bm,size.x, size.y, true);
int width = bm.getWidth();
int height = bm.getHeight();
其中size.x和size.y来自
display = getWindowManager().getDefaultDisplay();
size = new Point();
display.getSize(size);
然后这个位置并不遥远。它仍然不是我想要的地方,玩家位于点的底部,但至少距离它更近了。