GridView的放大图片 [英] GridView Zoom Images

查看:256
本文介绍了GridView的放大图片的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个GridView和我试图缩小在GridView的项目点击图片。使用从谷歌 http://developer.android.com/training/animation/zoom此样本。 HTML 。我的问题是,你如何传递到R.drawableINT imageResId。看看我的$ C $以下CS。

MainActivity.java

 公共类GridViewActivity延伸活动{    @覆盖
    公共无效的onCreate(捆绑savedInstanceState){
        super.onCreate(savedInstanceState);        的setTitle(GridView的);
        的setContentView(R.layout.grid_view);
       GridView控件的GridView =(GridView控件)findViewById(R.id.gridview);
        gridview.setAdapter(新ImageAdapter(本));    }
    @覆盖
    公共布尔onCreateOptionsMenu(菜单菜单){
        。getMenuInflater()膨胀(R.menu.activity_grid_view,菜单);
        返回true;
    }
}

gridview.xml

 < GridView控件的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
    机器人:ID =@ + ID / GridView控件
    机器人:layout_width =FILL_PARENT
    机器人:layout_height =FILL_PARENT
    机器人:columnWidth时=90dp
    机器人:为numColumns =auto_fit
    机器人:verticalSpacing =10dp
    机器人:horizo​​ntalSpacing =10dp
    机器人:stretchMode =columnWidth时
    机器人:比重=中心
/>

ImageAdapter.java

 公共类ImageAdapter延伸BaseAdapter {    民营动画mCurrentAnimator;    私人诠释mShortAnimationDuration;    私人语境mContext;    公共ImageAdapter(上下文C){
        mContext = C;
    }    公众诠释的getCount(){
        返回mThumbIds.length;
    }    公共对象的getItem(INT位置){
        返回mThumbIds [位置]
    }    众长getItemId(INT位置){
        返回0;
    }    公共查看getView(最终诠释的立场,观点convertView,父母的ViewGroup){
        ImageView的ImageView的;
        如果(convertView == NULL){
            ImageView的=新ImageView的(mContext);
            imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
        }其他{
            ImageView的=(ImageView的)convertView;
        }        imageView.setImageResource(mThumbIds [位置]);
        imageView.setTag(mThumbIds [位置]);
        imageView.setOnClickListener(新OnClickListener(){            @覆盖
            公共无效的onClick(查看为arg0){
                INT ID =(整数)arg0.getTag();
                zoomImageFromThumb(arg0中,ID);
            }
        });
        返回ImageView的;
    }    //引用我们在res&GT图像;绘制
    公共整数[] = mThumbIds {R.drawable.sample_0,R.drawable.sample_1,
            R.drawable.sample_2,R.drawable.sample_3,R.drawable.sample_4,
            R.drawable.sample_5,R.drawable.sample_6,R.drawable.sample_7,
            R.drawable.sample_8,R.drawable.sample_9,R.drawable.sample_10,
            R.drawable.sample_11,R.drawable.sample_12,R.drawable.sample_13,
            R.drawable.sample_14,R.drawable.sample_15,R.drawable.sample_16,
            R.drawable.sample_17,R.drawable.sample_18};    私人无效zoomImageFromThumb(最终查看thumbView,诠释imageResId){        如果(mCurrentAnimator!​​= NULL){
            mCurrentAnimator.cancel();
        }        最后ImageView的expandedImageView =(ImageView的)thumbView.findViewById(R.id.expanded_image);
        expandedImageView.setImageResource(imageResId);        最后矩形startBounds =新的矩形();
        最后矩形finalBounds =新的矩形();
        最后一点globalOffset =新点();        thumbView.getGlobalVisibleRect(startBounds);
        thumbView.findViewById(R.id.container).getGlobalVisibleRect(finalBounds,globalOffset);
        startBounds.offset(-globalOffset.x,-globalOffset.y);
        finalBounds.offset(-globalOffset.x,-globalOffset.y);        浮startScale;
        如果((浮点)finalBounds.width()/ finalBounds.height()>(浮点)startBounds
                .WIDTH()/ startBounds.height()){
            //沿水平方向延伸的边界开始
            startScale =(浮点)startBounds.height()/ finalBounds.height();
            浮startWidth = startScale * finalBounds.width();
            浮deltaWidth =(startWidth - startBounds.width())/ 2;
            startBounds.left - = deltaWidth;
            startBounds.right + = deltaWidth;
        }其他{
            //开始扩展垂直范围
            startScale =(浮点)startBounds.width()/ finalBounds.width();
            浮startHeight = startScale * finalBounds.height();
            浮deltaHeight =(startHeight - startBounds.height())/ 2;
            startBounds.top - = deltaHeight;
            startBounds.bottom + = deltaHeight;
        }        thumbView.setAlpha(0F);
        expandedImageView.setVisibility(View.VISIBLE);        expandedImageView.setPivotX(0F);
        expandedImageView.setPivotY(0F);        AnimatorSet套=新AnimatorSet();
        set.play(
                ObjectAnimator.ofFloat(expandedImageView,View.X,
                        startBounds.left,finalBounds.left))
                。随着(ObjectAnimator.ofFloat(expandedImageView,View.Y,
                        startBounds.top,finalBounds.top))
                。随着(ObjectAnimator.ofFloat(expandedImageView,View.SCALE_X,
                        startScale,1F))
                。随着(ObjectAnimator.ofFloat(expandedImageView,View.SCALE_Y,
                        startScale,1F));
        set.setDuration(mShortAnimationDuration);
        set.setInterpolator(新DecelerateInterpolator());
        set.addListener(新AnimatorListenerAdapter(){
            @覆盖
            公共无效onAnimationEnd(动画动画){
                mCurrentAnimator = NULL;
            }            @覆盖
            公共无效onAnimationCancel(动画动画){
                mCurrentAnimator = NULL;
            }
        });
        set.start();
        mCurrentAnimator =集;        最终浮动startScaleFinal = startScale;
        expandedImageView.setOnClickListener(新View.OnClickListener(){
            @覆盖
            公共无效的onClick(查看视图){
                如果(mCurrentAnimator!​​= NULL){
                    mCurrentAnimator.cancel();
                }                AnimatorSet套=新AnimatorSet();
                set.play(
                        ObjectAnimator.ofFloat(expandedImageView,View.X,
                                startBounds.left))
                        。随着(ObjectAnimator.ofFloat(expandedImageView,View.Y,
                                startBounds.top))
                        。随着(ObjectAnimator.ofFloat(expandedImageView,
                                View.SCALE_X,startScaleFinal))
                        。随着(ObjectAnimator.ofFloat(expandedImageView,
                                View.SCALE_Y,startScaleFinal));
                set.setDuration(mShortAnimationDuration);
                set.setInterpolator(新DecelerateInterpolator());
                set.addListener(新AnimatorListenerAdapter(){
                    @覆盖
                    公共无效onAnimationEnd(动画动画){
                        thumbView.setAlpha(1F);
                        expandedImageView.setVisibility(View.GONE);
                        mCurrentAnimator = NULL;
                    }                    @覆盖
                    公共无效onAnimationCancel(动画动画){
                        thumbView.setAlpha(1F);
                        expandedImageView.setVisibility(View.GONE);
                        mCurrentAnimator = NULL;
                    }
                });
                set.start();
                mCurrentAnimator =集;
            }
        });
    }
}

activity_zoom.xml

 <的FrameLayout的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
    机器人:ID =@ + ID /容器
    机器人:layout_width =match_parent
    机器人:layout_height =match_parent>    < ImageView的
        机器人:ID =@ + ID / expanded_image
        机器人:layout_width =match_parent
        机器人:layout_height =match_parent
        机器人:知名度=隐形/>< /&的FrameLayout GT;

logcat的:

  13 06-14:58:47.667:E / AndroidRuntime(14860):致命异常:主要
06-14 13:58:47.667:E / AndroidRuntime(14860):显示java.lang.NullPointerException
06-14 13:58:47.667:E / AndroidRuntime(14860):在com.example.gridview.ImageAdapter.zoomImageFromThumb(ImageAdapter.java:79)
06-14 13:58:47.667:E / AndroidRuntime(14860):在com.example.gridview.ImageAdapter.access $ 0(ImageAdapter.java:72)
06-14 13:58:47.667:E / AndroidRuntime(14860):在com.example.gridview.ImageAdapter $ 1.onClick(ImageAdapter.java:57)
06-14 13:58:47.667:E / AndroidRuntime(14860):在android.view.View.performClick(View.java:3620)
06-14 13:58:47.667:E / AndroidRuntime(14860):在android.view.View $ PerformClick.run(View.java:14292)
06-14 13:58:47.667:E / AndroidRuntime(14860):在android.os.Handler.handleCallback(Handler.java:605)
06-14 13:58:47.667:E / AndroidRuntime(14860):在android.os.Handler.dispatchMessage(Handler.java:92)
06-14 13:58:47.667:E / AndroidRuntime(14860):在android.os.Looper.loop(Looper.java:137)
06-14 13:58:47.667:E / AndroidRuntime(14860):在android.app.ActivityThread.main(ActivityThread.java:4507)
06-14 13:58:47.667:E / AndroidRuntime(14860):在java.lang.reflect.Method.invokeNative(本机方法)
06-14 13:58:47.667:E / AndroidRuntime(14860):在java.lang.reflect.Method.invoke(Method.java:511)
06-14 13:58:47.667:E / AndroidRuntime(14860):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:980)
06-14 13:58:47.667:E / AndroidRuntime(14860):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:747)
06-14 13:58:47.667:E / AndroidRuntime(14860):在dalvik.system.NativeStart.main(本机方法)


解决方案

尝试这个为例的,你发现你的扩展点击视图中查看

 最后的ImageView expandedImageView =(ImageView的)findViewById(R.id.expanded_image);
        expandedImageView.setImageResource(imageResId);

zoomImageFromThumb(最终查看thumbView,INT imageResId)

或者,你可能需要找到像

在主片段观点,看法

 最后的ImageView expandedImageView =(ImageView的)mainView.findViewById(R.id.expanded_image);
            expandedImageView.setImageResource(imageResId);

不是 thumbView

编辑:

更改 gridview.xml 如下,把双方意见相同的布局

 < GridView控件的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
    机器人:ID =@ + ID / GridView控件
    机器人:layout_width =FILL_PARENT
    机器人:layout_height =FILL_PARENT
    机器人:columnWidth时=90dp
    机器人:为numColumns =auto_fit
    机器人:verticalSpacing =10dp
    机器人:horizo​​ntalSpacing =10dp
    机器人:stretchMode =columnWidth时
    机器人:比重=中心
/>< ImageView的
        机器人:ID =@ + ID / expanded_image
        机器人:layout_width =match_parent
        机器人:layout_height =match_parent
        机器人:知名度=隐形/>

您可以使用相对布局包装为这样一个与其他重叠

和使用

 最后的ImageView expandedImageView =(ImageView的)findViewById(R.id.expanded_image);
            expandedImageView.setImageResource(imageResId);

zoomImageFromThumb(最终查看thumbView,INT imageResId)

如果你的符号没有找到 findViewById()错误,再加入

公共静态活动getActivity(){
   返回此;
}
GridViewActivity.java

,然后用

 最后的ImageView expandedImageView =(ImageView的)GridViewActivity.getActivity()findViewById(R.id.expanded_image)。
                expandedImageView.setImageResource(imageResId);

zoomImageFromThumb(最终查看thumbView,INT imageResId)

I've got a gridview and I'm trying to zoom the image on GridView Item Click. Using this sample from google http://developer.android.com/training/animation/zoom.html .My question is how do you pass a R.drawable into "int imageResId" . Check out my codes below.

MainActivity.java

public class GridViewActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setTitle("GridView");
        setContentView(R.layout.grid_view);


       GridView gridview = (GridView) findViewById(R.id.gridview);
        gridview.setAdapter(new ImageAdapter(this));

    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_grid_view, menu);
        return true;
    }
}

gridview.xml

<GridView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/gridview"
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"
    android:columnWidth="90dp"
    android:numColumns="auto_fit"
    android:verticalSpacing="10dp"
    android:horizontalSpacing="10dp"
    android:stretchMode="columnWidth"
    android:gravity="center"
/>

ImageAdapter.java

 public class ImageAdapter extends BaseAdapter {

    private Animator mCurrentAnimator;

    private int mShortAnimationDuration;

    private Context mContext;

    public ImageAdapter(Context c) {
        mContext = c;
    }

    public int getCount() {
        return mThumbIds.length;
    }

    public Object getItem(int position) {
        return mThumbIds[position];
    }

    public long getItemId(int position) {
        return 0;
    }

    public View getView(final int position, View convertView, ViewGroup parent) {
        ImageView imageView;
        if (convertView == null) {
            imageView = new ImageView(mContext);
            imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
        } else {
            imageView = (ImageView) convertView;
        }

        imageView.setImageResource(mThumbIds[position]);
        imageView.setTag(mThumbIds[position]);
        imageView.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {
                int id = (Integer) arg0.getTag();
                zoomImageFromThumb(arg0, id);
            }
        });
        return imageView;
    }

    // References to our images in res > drawable
    public Integer[] mThumbIds = { R.drawable.sample_0, R.drawable.sample_1,
            R.drawable.sample_2, R.drawable.sample_3, R.drawable.sample_4,
            R.drawable.sample_5, R.drawable.sample_6, R.drawable.sample_7,
            R.drawable.sample_8, R.drawable.sample_9, R.drawable.sample_10,
            R.drawable.sample_11, R.drawable.sample_12, R.drawable.sample_13,
            R.drawable.sample_14, R.drawable.sample_15, R.drawable.sample_16,
            R.drawable.sample_17, R.drawable.sample_18 };

    private void zoomImageFromThumb(final View thumbView, int imageResId) {

        if (mCurrentAnimator != null) {
            mCurrentAnimator.cancel();
        }

        final ImageView expandedImageView = (ImageView) thumbView.findViewById(R.id.expanded_image);
        expandedImageView.setImageResource(imageResId);

        final Rect startBounds = new Rect();
        final Rect finalBounds = new Rect();
        final Point globalOffset = new Point();

        thumbView.getGlobalVisibleRect(startBounds);
        thumbView.findViewById(R.id.container).getGlobalVisibleRect(finalBounds, globalOffset);
        startBounds.offset(-globalOffset.x, -globalOffset.y);
        finalBounds.offset(-globalOffset.x, -globalOffset.y);

        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;
        }

        thumbView.setAlpha(0f);
        expandedImageView.setVisibility(View.VISIBLE);

        expandedImageView.setPivotX(0f);
        expandedImageView.setPivotY(0f);

        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;

        final float startScaleFinal = startScale;
        expandedImageView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (mCurrentAnimator != null) {
                    mCurrentAnimator.cancel();
                }

                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;
            }
        });
    }
}

activity_zoom.xml

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <ImageView
        android:id="@+id/expanded_image"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:visibility="invisible" />

</FrameLayout>

LOGCAT :

  06-14 13:58:47.667: E/AndroidRuntime(14860): FATAL EXCEPTION: main
06-14 13:58:47.667: E/AndroidRuntime(14860): java.lang.NullPointerException
06-14 13:58:47.667: E/AndroidRuntime(14860):    at com.example.gridview.ImageAdapter.zoomImageFromThumb(ImageAdapter.java:79)
06-14 13:58:47.667: E/AndroidRuntime(14860):    at com.example.gridview.ImageAdapter.access$0(ImageAdapter.java:72)
06-14 13:58:47.667: E/AndroidRuntime(14860):    at com.example.gridview.ImageAdapter$1.onClick(ImageAdapter.java:57)
06-14 13:58:47.667: E/AndroidRuntime(14860):    at android.view.View.performClick(View.java:3620)
06-14 13:58:47.667: E/AndroidRuntime(14860):    at android.view.View$PerformClick.run(View.java:14292)
06-14 13:58:47.667: E/AndroidRuntime(14860):    at android.os.Handler.handleCallback(Handler.java:605)
06-14 13:58:47.667: E/AndroidRuntime(14860):    at android.os.Handler.dispatchMessage(Handler.java:92)
06-14 13:58:47.667: E/AndroidRuntime(14860):    at android.os.Looper.loop(Looper.java:137)
06-14 13:58:47.667: E/AndroidRuntime(14860):    at android.app.ActivityThread.main(ActivityThread.java:4507)
06-14 13:58:47.667: E/AndroidRuntime(14860):    at java.lang.reflect.Method.invokeNative(Native Method)
06-14 13:58:47.667: E/AndroidRuntime(14860):    at java.lang.reflect.Method.invoke(Method.java:511)
06-14 13:58:47.667: E/AndroidRuntime(14860):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:980)
06-14 13:58:47.667: E/AndroidRuntime(14860):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:747)
06-14 13:58:47.667: E/AndroidRuntime(14860):    at dalvik.system.NativeStart.main(Native Method)

解决方案

try this as in example, you were finding that expanded view inside your clicked view

final ImageView expandedImageView = (ImageView) findViewById(R.id.expanded_image);
        expandedImageView.setImageResource(imageResId);

in zoomImageFromThumb(final View thumbView, int imageResId)

Or you may need to find that view in main fragment view like

final ImageView expandedImageView = (ImageView) mainView.findViewById(R.id.expanded_image);
            expandedImageView.setImageResource(imageResId);

not in thumbView.

EDIT:

Change your gridview.xml as follows, put both views in same layout

<GridView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/gridview"
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"
    android:columnWidth="90dp"
    android:numColumns="auto_fit"
    android:verticalSpacing="10dp"
    android:horizontalSpacing="10dp"
    android:stretchMode="columnWidth"
    android:gravity="center"
/>

<ImageView
        android:id="@+id/expanded_image"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:visibility="invisible" />

you can use Relative layout wrapper for both so that one overlaps with other

and use

final ImageView expandedImageView = (ImageView) findViewById(R.id.expanded_image);
            expandedImageView.setImageResource(imageResId);

in zoomImageFromThumb(final View thumbView, int imageResId)

if you get symbol not find findViewById() error, then add

public static Activity getActivity(){ return this; } in GridViewActivity.java

and then use

final ImageView expandedImageView = (ImageView) GridViewActivity.getActivity().findViewById(R.id.expanded_image);
                expandedImageView.setImageResource(imageResId);

in zoomImageFromThumb(final View thumbView, int imageResId)

这篇关于GridView的放大图片的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆