Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- So my issue is I have urls that I am parsing/downloading from my server and I am displaying them in GridView and once the user onItemClicks it triggers this and I am have used this piece of code for the Animation (that I didn't write) that will enlarge the image and then the use has the option to onClick the image launch a SplashActivity or press a button that stops the animation. The Animation works great with R.drawable.image but I can't get the animation to work when it is not a drawable....I am noob so please excuse the ugly code and my lack of complete understanding.
- import android.animation.Animator;
- import android.animation.AnimatorListenerAdapter;
- import android.animation.AnimatorSet;
- import android.animation.ObjectAnimator;
- import android.app.Activity;
- import android.content.Context;
- import android.content.Intent;
- import android.graphics.Point;
- import android.graphics.Rect;
- import android.os.Bundle;
- import android.view.LayoutInflater;
- import android.view.View;
- import android.view.ViewGroup;
- import android.view.animation.DecelerateInterpolator;
- import android.widget.AdapterView;
- import android.widget.AdapterView.OnItemClickListener;
- import android.widget.BaseAdapter;
- import android.widget.Button;
- import android.widget.GridView;
- import android.widget.ImageView;
- import android.widget.TextView;
- import android.widget.Toast;
- import com.example.MainActivity;
- import com.example.R;
- import com.example.reader.image.ImageLoader;
- import com.example.parser.RSSFeed;
- import com.example.parser.RSSItem;
- //~--- JDK imports ------------------------------------------------------------
- import java.util.ArrayList;
- import java.util.List;
- public class ListActivity extends Activity {
- protected static final String TAG = null;
- RSSFeed mfeed;
- private GridView gv;
- Button button;
- String feedContent;
- List<RSSItem> itemPos;
- int imageResId;
- CustomListAdapter adapter;
- private Animator mCurrentAnimator;
- private int mShortAnimationDuration;
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main_activity_anim_list);
- button = (Button) findViewById(R.id.button);
- mfeed = (RSSFeed) getIntent().getExtras().get("feed");
- // Initialize the variables:
- gv = (GridView) findViewById(R.id.gridView);
- // GridViewExampleAdapter gAdapter = new GridViewExampleAdapter(this);
- // Set an Adapter to the ListView
- adapter = new CustomListAdapter(this);
- gv.setAdapter(adapter);
- // Set on item click listener to the ListView
- gv.setOnItemClickListener(new OnItemClickListener() {
- // @Override
- // public void onItemClick(AdapterView<?> parent, View v, int pos,
- // long id) {
- @Override
- public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
- int pos = arg2;
- // Display the zoomed in image in full screen
- zoomImageFromThumb(arg1, adapter.getThumbId(pos)); <--this doesn't work
- feedContent = mfeed.getItem(pos).getFeedUrl();
- // Log.d(TAG,"Position Clicked ["+pos+"] with item id ["+feeds+"]");
- }
- });
- // Set the Animation time form the android defaults
- mShortAnimationDuration = getResources().getInteger(android.R.integer.config_shortAnimTime);
- }
- @Override
- public void onBackPressed() {
- // do something on back.
- this.startActivity(new Intent(ListActivity.this, MainActivity.class));
- finish();
- return;
- }
- 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);
- final Button button = (Button) findViewById(R.id.button);
- expandedImageView.setImageResource(imageResId);// <-- this is original code that works with a drawable
- expandedImageView.setId(R.id.expanded_image);// <--I have tried this among other solutions
- // 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);
- button.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;
- button.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- // TODO Auto-generated method stub
- thumbView.setAlpha(1f);
- expandedImageView.setVisibility(View.GONE);
- button.setVisibility(View.GONE);
- mCurrentAnimator = null;
- }
- });
- expandedImageView.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View view) {
- // if (mCurrentAnimator != null) {
- // Bundle bundle = new Bundle();
- // feedContent = imageAdapter.getItem(position);
- // System.out.println(feedContent);
- Intent intent = new Intent(ListActivity.this, SplashActivity.class);
- intent.putExtra("feedContent", feedContent);
- startActivity(intent);
- // finish();
- // 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);
- button.setVisibility(View.GONE);
- mCurrentAnimator = null;
- }
- @Override
- public void onAnimationCancel(Animator animation) {
- thumbView.setAlpha(1f);
- expandedImageView.setVisibility(View.GONE);
- button.setVisibility(View.GONE);
- mCurrentAnimator = null;
- }
- });
- set.start();
- mCurrentAnimator = set;
- }
- });
- }
- // Create an Adapter Class extending the BaseAdapter
- class CustomListAdapter extends BaseAdapter {
- private LayoutInflater layoutInflater;
- public ImageLoader imageLoader;
- public CustomListAdapter(ListActivity listActivity) {
- layoutInflater = (LayoutInflater) listActivity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
- imageLoader = new ImageLoader(listActivity.getApplicationContext());
- }
- @Override
- public int getCount() {
- // Set the total list item count
- return mfeed.getItemCount();
- }
- @Override
- public Object getItem(int position) {
- return position;
- }
- public int getThumbId(int position) {
- return gv.getId();
- }
- @Override
- public long getItemId(int position) {
- return position;
- }
- @Override
- public View getView(int position, View convertView, ViewGroup parent) {
- // Inflate the item layout and set the views
- ViewHolder view;
- View listItem = convertView;
- int pos = position;
- if (listItem == null) {
- view = new ViewHolder();
- listItem = layoutInflater.inflate(R.layout.grid_item_anim_list, null);
- view.iv = (ImageView) listItem.findViewById(R.id.thumb_list);
- // view.tv = (TextView) listItem.findViewById(R.id.title);
- listItem.setTag(view);
- } else {
- view = (ViewHolder) listItem.getTag();
- }
- // Initialize the views in the layout
- // Set the views in the layout
- imageLoader.DisplayImage(mfeed.getItem(pos).getFeedImageUrl(), view.iv);
- // view.tv.setText(feed.getItem(pos).getTitle());
- // tvDate.setText(feed.getItem(pos).getDate());
- return listItem;
- }
- public class ViewHolder {
- public ImageView iv;
- public TextView tv;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement