Android Coverflow - 聚焦位置已知的图像



我已经实现了Android Coverflow示例。单击图像时,我可以检索其位置并在图像视图中显示图像。我的另一个要求是在传递其 ID 时将图像聚焦在 coverFlow 中。我应该把聚焦的图像带到中心。这是用于计算转换期间图像之间角度的代码。如何更改它以实现所需的输出?

 protected boolean getChildStaticTransformation(final View child, final Transformation t) {
    final int childCenter = getCenterOfView(child);
    final int childWidth = child.getWidth();
    int rotationAngle = 0;
    t.clear();
    t.setTransformationType(Transformation.TYPE_MATRIX);
    if (childCenter == mCoveflowCenter) {
        transformImageBitmap((ImageView) child, t, 0);
    } else {
        rotationAngle = (int) ((float) (mCoveflowCenter - childCenter) / childWidth * mMaxRotationAngle);
        if (Math.abs(rotationAngle) > mMaxRotationAngle) {
            rotationAngle = rotationAngle < 0 ? -mMaxRotationAngle : mMaxRotationAngle;
        }
        transformImageBitmap((ImageView) child, t, rotationAngle);
    }
    return true;
}

 private void transformImageBitmap(final ImageView child, final Transformation t, final int rotationAngle) {
    mCamera.save();
    final Matrix imageMatrix = t.getMatrix();
    final int height = child.getLayoutParams().height;
    final int width = child.getLayoutParams().width;
    final int rotation = Math.abs(rotationAngle);
    mCamera.translate(0.0f, 0.0f, 100.0f);
    // As the angle of the view gets less, zoom in
    if (rotation < mMaxRotationAngle) {
        final float zoomAmount = (float) (mMaxZoom + rotation * 1.5);
        mCamera.translate(0.0f, 0.0f, zoomAmount);
    }
    mCamera.rotateY(rotationAngle);
    mCamera.getMatrix(imageMatrix);
    imageMatrix.preTranslate(-(width / 2.0f), -(height / 2.0f));
    imageMatrix.postTranslate((width / 2.0f), (height / 2.0f));
    mCamera.restore();
}

您可以使用coverFlow的setOnItemSelectedListener来实现此目的。 请参阅下面的代码,您将在其中获得中心图像的位置。

int sel_pos;
coverFlow.setOnItemSelectedListener(new SelectListener(this));
    private class SelectListener implements AdapterView.OnItemSelectedListener {
            public SelectListener(Context c) 
            {
            }
            public void onItemSelected(AdapterView<?> parent, View v, int position,long id) 
            {
                Log.e("Changed----->", "" + position);
                // Zoom the new selected view
                try 
                {                               
                    sel_pos = position;             
                    coverImageAdapter.notifyDataSetChanged();
                } catch (Exception animate) 
                {
                }       
            }
            public void onNothingSelected(AdapterView<?> parent) {
            }
        }

现在,您可以在适配器的getview方法中更改封面流中的图像焦点。

public View getView(int position, View convertView, ViewGroup parent)
    {
        // Use this code if you want to load from resources
        ImageView i = new ImageView(mContext);
        i.refreshDrawableState();
        Log.e("position==", ""+position);
        if(sel_pos==position)
        {
            i.setImageResource(selectedImage[position]);
        }
        else 
        {
            i.setImageResource(UnselectedImage[position]);
        }       

        i.setLayoutParams(new CoverFlow.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
        i.setScaleType(ImageView.ScaleType.CENTER_INSIDE);

        // Make sure we set anti-aliasing otherwise we get jaggies  
        BitmapDrawable drawable = (BitmapDrawable) i.getDrawable();
        drawable.setAntiAlias(true);
        return i;
    }

跳这个会帮助你。

最新更新