想实现一个图片水平滚动的效果

来源:互联网 发布:qrcode 生成算法 编辑:程序博客网 时间:2024/06/15 17:35
有点像网易或者凤凰那种查看新闻多张图的实现效果,通过滑动从网络加载下一张或者上一张图片,写了很久发现还是有问题,在线求解。。坐等大神。

图片加载不报错,但是就是没有显示图片,网络请求也是发送出去了的。这里用的是volley请求网络.

图片加载的Fragment:


import android.content.Context;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.view.PagerAdapter;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;

import java.util.Arrays;
import java.util.Calendar;
import java.util.Date;


/**
 * 图-Fragment.
 * <p>
 * Created by puruidong on 8/15/15.
 */
public class SimgFragment extends LazyFragment {


    protected static final String TAG = "MainActivity";
    private String[] mImgIds;
    private MyJazzyViewPager mViewPager;
    private Context context;
    private DateUtils dateutils = DateUtils.getInstance();


    public SimgFragment(Context context) {
        this.context = context;
    }

    // 标志位,标志已经初始化完成。
    private boolean isPrepared;
    private View view;
    private ImageView imageView;
    private View simgMainView ;


    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        if (view == null) {
            view = inflater.inflate(R.layout.simg_fragment, null);
        }
        if(simgMainView==null){
            simgMainView = inflater.inflate(R.layout.simg_main,null);
        }
        // 缓存的rootView需要判断是否已经被加过parent,如果有parent需要从parent删除,要不然会发生这个rootview已经有parent的错误。
        ViewGroup parent = (ViewGroup) view.getParent();
        if (parent != null) {
            parent.removeView(view);
            parent.removeView(simgMainView);
        }
        Log.i("IMAGE", "22222222222222222222222222222222222222222222******images");
        return view;
    }


    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        mImgIds = new String[]{
            "http://a.hiphotos.baidu.com/image/pic/item/3bf33a87e950352ad6465dad5143fbf2b2118b6b.jpg",
            "http://a.hiphotos.baidu.com/image/pic/item/c8177f3e6709c93d002077529d3df8dcd0005440.jpg",
            "http://f.hiphotos.baidu.com/image/pic/item/7aec54e736d12f2ecc3d90f84dc2d56285356869.jpg",
            "http://e.hiphotos.baidu.com/image/pic/item/9c16fdfaaf51f3de308a87fc96eef01f3a297969.jpg",
            "http://d.hiphotos.baidu.com/image/pic/item/f31fbe096b63f624b88f7e8e8544ebf81b4ca369.jpg",
            "http://h.hiphotos.baidu.com/image/pic/item/11385343fbf2b2117c2dc3c3c88065380cd78e38.jpg",
            "http://c.hiphotos.baidu.com/image/pic/item/3801213fb80e7bec5ed8456c2d2eb9389b506b38.jpg"
        };
        System.out.println("2222222222222222222222222222222222222222222222222"+Arrays.toString(mImgIds));

        mViewPager = (MyJazzyViewPager) view.findViewById(R.id.id_viewPager);
        mViewPager.setAdapter(new PagerAdapter() {

            @Override
            public boolean isViewFromObject(View arg0, Object arg1) {
                return arg0 == arg1;
            }

            @Override
            public void destroyItem(ViewGroup container, int position,
                                    Object object) {
                container.removeView((View) object);
            }

            @Override
            public Object instantiateItem(ViewGroup container, int position) {
                NetworkUtils network = new NetworkUtils(context);
                /*

                在下面这个方法里面请求网络图片,是传递一个ImageView过去然后直接将图片设置在ImageView上面的
                ,因为之前用ImageView加载一张图都是好用的,不知道为啥用ViewPager就不行了.
               




                */
                ImageView imageView = (ImageView) network.getImageByImageLoader(mImgIds[position], simgMainView, R.id.simg);
                container.addView(imageView);
                mViewPager.setObjectForPosition(imageView, position);
                Log.i("IMAGE", "111111111111111111111111111111111111111111111111111111111111111111111111111111111111******images");
                return imageView;
            }

            @Override
            public int getCount() {
                return mImgIds.length;
            }
        });


        Log.i("IMAGE", "5555555555555555555555555******images");
        imageView = (ImageView) view.findViewById(R.id.simg);
        isPrepared = true;
        lazyLoad();
    }

    @Override
    protected void lazyLoad() {
        if (!isPrepared || !isVisible) {
            return;
        }
    }

}


网络请求图片加载的方法:


下面是封装的加载图片的方法,在这个例子里面用的第一个方法:






     //在这个例子里面用的是这个方法!!!!!!
    /**   
     * 通过ImageLoader加载并设置网络图片
     *
     * @param url 图片url
     * @param view 图片控件所在的View对象
     * @param imgViewId ImageView或其它图片展示控件的Id
     */
    public View getImageByImageLoader(String url,View view,int imgViewId){
        if (!isOnline()) {
            showToast("目前无法访问网络,请稍候在试",R.mipmap.toast_info,Toast.LENGTH_SHORT);
        }
        ImageLoader loader = new ImageLoader(queue,new BitmapCache());
        ImageView imageView = (ImageView) view.findViewById(imgViewId);
        ImageLoader.ImageListener listener = ImageLoader.getImageListener(imageView, R.mipmap.image_loading,R.mipmap.image_loader_error);
        loader.get(url,listener);
        return imageView;
    }

    //在这个例子里面用的上面是这个方法!!!!!!

    /**
     * 通过ImageRequest加载并设置网络图片
     *
     * @param url 图片url
     * @param view 图片控件所在的View对象
     * @param imgViewId ImageView或其它图片展示控件的Id
     */
    public void getImageByImageRequest(String url, final View view, final int imgViewId){
        if (!isOnline()) {
            showToast("目前无法访问网络,请稍候在试",R.mipmap.toast_info,Toast.LENGTH_SHORT);
        }
        ImageRequest request = new ImageRequest(url, new Response.Listener<Bitmap>() {
            @Override
            public void onResponse(Bitmap response) {
                //显示加载成功的图片.
                ImageView img = (ImageView) view.findViewById(imgViewId);
                img.setImageBitmap(response);
            }
        }, 0, 0, ImageView.ScaleType.CENTER_INSIDE, Bitmap.Config.RGB_565, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                //显示加载失败的图片.
                ImageView img = (ImageView) view.findViewById(imgViewId);
                img.setImageResource(R.mipmap.image_loader_error);
            }
        });

    }

    /**
     * 通过NetworkImageView加载并设置网络图片
     *
     * @param url 图片url
     * @param view 图片控件所在的View对象activit
     * @param netWorkImgViewId ImageView或其它图片展示控件的Id
     */
    public void getImageByNetworkImageView(String url, final View view, final int netWorkImgViewId){
        if (!isOnline()) {
            showToast("目前无法访问网络,请稍候在试",R.mipmap.toast_info,Toast.LENGTH_SHORT);
        }
        ImageLoader loader = new ImageLoader(queue,new BitmapCache());
        NetworkImageView networkImageView = (NetworkImageView) view.findViewById(netWorkImgViewId);
        networkImageView.setDefaultImageResId(R.mipmap.image_loading);
        networkImageView.setErrorImageResId(R.mipmap.image_loader_error);
        networkImageView.setImageUrl(url,loader);
    }





布局文件:



viewpager的布局文件:

<?xml version="1.0" encoding="utf-8"?>
<com.demo.view.MyJazzyViewPager xmlns:android="http://schemas.android.com/apk/res/android"
                                         android:id="@+id/id_viewPager"
                                         android:orientation="vertical"
                                         android:layout_width="match_parent"
                                         android:layout_height="match_parent"
        >
</com.demo.view.MyJazzyViewPager>



里面内容项的布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:id="@+id/simgmain"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
        >

    <ImageView
            android:id="@+id/simg"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:scaleType="fitXY"
            />

</LinearLayout>



有一个重写的ViewPager类,代码贴不下了。。
0 0
原创粉丝点击