Android

时间:2015-11-24 15:08:48

标签: android

我制作了一个在网格视图中显示图片的Android应用。在触摸图像时,它会放大。单击缩放的图像会打开一个新的活动。我想为网格视图上的每个图像打开一个新的Activity。有人可以帮帮我吗?

以下是代码:

MainActivity.java


public class MainActivity extends Activity {

    // Declare variables / references
    private GridView gv;
    private Animator mCurrentAnimator;
    private int mShortAnimationDuration;

    // Create Array thumbs resource id's:
    private int thumb[] = { R.drawable.c4, R.drawable.c2,R.drawable.c1,R.drawable.c1,R.drawable.c1,R.drawable.c1,R.drawable.c1,R.drawable.c1,R.drawable.c1,R.drawable.c1};

    @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    // Initialize the variables:
    gv = (GridView) findViewById(R.id.gridView);

    // Set an Adapter to the ListView
    gv.setAdapter(new ImageAdapter(this));

    // Set on item click listener to the ListView
    gv.setOnItemClickListener(new OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View v, int pos,
    long id) {

    // Display the zoomed in image in full screen
    zoomImageFromThumb(v, thumb[pos]);
     ImageView iv=(ImageView)findViewById(R.id.expanded_image);
     iv.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            Intent i=new Intent(getApplicationContext(),K.class);
            startActivity(i);


        }
    });

    }
    });

    // Set the Animation time form the android defaults
    mShortAnimationDuration = getResources().getInteger(
    android.R.integer.config_shortAnimTime);

    }

    // Create an Adapter Class extending the BaseAdapter
    class ImageAdapter extends BaseAdapter {

    private LayoutInflater layoutInflater;

    public ImageAdapter(MainActivity activity) {
    // TODO Auto-generated constructor stub
    layoutInflater = (LayoutInflater) activity
    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

    @Override
    public int getCount() {
    // Set the count value to the total number of items in the Array
    return thumb.length;
    }

    @Override
    public Object getItem(int position) {
    // TODO Auto-generated method stub
    return position;
    }

    @Override
    public long getItemId(int position) {
    // TODO Auto-generated method stub
    return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

    // Inflate the item layout and set the views
    View listItem = convertView;
    int pos = position;
    if (listItem == null) {
    listItem = layoutInflater.inflate(R.layout.grid_item, null);
    }

    // Initialize the views in the layout
    ImageView iv = (ImageView) listItem.findViewById(R.id.thumb);

    // Set the views in the layout
    iv.setBackgroundResource(thumb[pos]);

    return listItem;
    }

    }

    private void zoomImageFromThumb(final View thumbView, int imageResId) {
    // If there's an animation in progress, cancel it immediately and
    // proceed with this one.
    if (mCurrentAnimator != null) {
    mCurrentAnimator.cancel();
    }

    // Load the high-resolution "zoomed-in" image.
    final ImageView expandedImageView = (ImageView) findViewById(R.id.expanded_image);
    expandedImageView.setImageResource(imageResId);

    // Calculate the starting and ending bounds for the zoomed-in image.
    // This step
    // involves lots of math. Yay, math.
    final Rect startBounds = new Rect();
    final Rect finalBounds = new Rect();
    final Point globalOffset = new Point();

    // The start bounds are the global visible rectangle of the thumbnail,
    // and the
    // final bounds are the global visible rectangle of the container view.
    // Also
    // set the container view's offset as the origin for the bounds, since
    // that's
    // the origin for the positioning animation properties (X, Y).
    thumbView.getGlobalVisibleRect(startBounds);
    findViewById(R.id.container).getGlobalVisibleRect(finalBounds,
    globalOffset);
    startBounds.offset(-globalOffset.x, -globalOffset.y);
    finalBounds.offset(-globalOffset.x, -globalOffset.y);

    // Adjust the start bounds to be the same aspect ratio as the final
    // bounds using the
    // "center crop" technique. This prevents undesirable stretching during
    // the animation.
    // Also calculate the start scaling factor (the end scaling factor is
    // always 1.0).
    float startScale;
    if ((float) finalBounds.width() / finalBounds.height() > (float) startBounds
    .width() / startBounds.height()) {
    // Extend start bounds horizontally
    startScale = (float) startBounds.height() / finalBounds.height();
    float startWidth = startScale * finalBounds.width();
    float deltaWidth = (startWidth - startBounds.width()) / 2;
    startBounds.left -= deltaWidth;
    startBounds.right += deltaWidth;
    } else {
    // Extend start bounds vertically
    startScale = (float) startBounds.width() / finalBounds.width();
    float startHeight = startScale * finalBounds.height();
    float deltaHeight = (startHeight - startBounds.height()) / 2;
    startBounds.top -= deltaHeight;
    startBounds.bottom += deltaHeight;
    }

    // Hide the thumbnail and show the zoomed-in view. When the animation
    // begins,
    // it will position the zoomed-in view in the place of the thumbnail.
    thumbView.setAlpha(0f);
    expandedImageView.setVisibility(View.VISIBLE);

    // Set the pivot point for SCALE_X and SCALE_Y transformations to the
    // top-left corner of
    // the zoomed-in view (the default is the center of the view).
    expandedImageView.setPivotX(0f);
    expandedImageView.setPivotY(0f);

    // Construct and run the parallel animation of the four translation and
    // scale properties
    // (X, Y, SCALE_X, and SCALE_Y).
    AnimatorSet set = new AnimatorSet();
    set.play(
    ObjectAnimator.ofFloat(expandedImageView, View.X,
    startBounds.left, finalBounds.left))
    .with(ObjectAnimator.ofFloat(expandedImageView, View.Y,
    startBounds.top, finalBounds.top))
    .with(ObjectAnimator.ofFloat(expandedImageView, View.SCALE_X,
    startScale, 1f))
    .with(ObjectAnimator.ofFloat(expandedImageView, View.SCALE_Y,
    startScale, 1f));
    set.setDuration(mShortAnimationDuration);
    set.setInterpolator(new DecelerateInterpolator());
    set.addListener(new AnimatorListenerAdapter() {
    @Override
    public void onAnimationEnd(Animator animation) {
    mCurrentAnimator = null;
    }

    @Override
    public void onAnimationCancel(Animator animation) {
    mCurrentAnimator = null;
    }
    });
    set.start();
    mCurrentAnimator = set;

    // Upon clicking the zoomed-in image, it should zoom back down to the
    // original bounds
    // and show the thumbnail instead of the expanded image.
    final float startScaleFinal = startScale;
    expandedImageView.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
    if (mCurrentAnimator != null) {
    mCurrentAnimator.cancel();
    }

    // Animate the four positioning/sizing properties in parallel,
    // back to their
    // original values.
    AnimatorSet set = new AnimatorSet();
    set.play(
    ObjectAnimator.ofFloat(expandedImageView, View.X,
    startBounds.left))
    .with(ObjectAnimator.ofFloat(expandedImageView, View.Y,
    startBounds.top))
    .with(ObjectAnimator.ofFloat(expandedImageView,
    View.SCALE_X, startScaleFinal))
    .with(ObjectAnimator.ofFloat(expandedImageView,
    View.SCALE_Y, startScaleFinal));
    set.setDuration(mShortAnimationDuration);
    set.setInterpolator(new DecelerateInterpolator());
    set.addListener(new AnimatorListenerAdapter() {
    @Override
    public void onAnimationEnd(Animator animation) {
    thumbView.setAlpha(1f);
    expandedImageView.setVisibility(View.GONE);
    mCurrentAnimator = null;
    }

    @Override
    public void onAnimationCancel(Animator animation) {
    thumbView.setAlpha(1f);
    expandedImageView.setVisibility(View.GONE);
    mCurrentAnimator = null;
    }
    });
    set.start();
    mCurrentAnimator = set;
    }
    });
    }
    }

main.xml
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/container"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#000000" >

<GridView
android:id="@+id/gridView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:columnWidth="80dp"
android:horizontalSpacing="10dp"
android:numColumns="auto_fit"
android:stretchMode="columnWidth"
android:verticalSpacing="10dp" >
</GridView>

<ImageView
android:id="@+id/expanded_image"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:contentDescription="@string/app_name"
android:visibility="invisible" 
android:clickable="true"/>

</FrameLayout>

grid_item.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="5dp" >

<ImageView
android:id="@+id/thumb"
android:layout_width="72dp"
android:layout_height="72dp"
android:layout_centerHorizontal="true"
android:contentDescription="@string/app_name" />

</RelativeLayout>

0 个答案:

没有答案
相关问题