Android将ImageView移动到特定的像素颜色

时间:2014-04-11 18:56:48

标签: android bitmap imageview translate-animation

我在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,但我不太清楚它是如何工作的。因为上面很慢..

谢谢!

2 个答案:

答案 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);

然后这个位置并不遥远。它仍然不是我想要的地方,玩家位于点的底部,但至少距离它更近了。