想实现一个图片水平滚动的效果
来源:互联网 发布:qrcode 生成算法 编辑:程序博客网 时间:2024/06/15 17:35
有点像网易或者凤凰那种查看新闻多张图的实现效果,通过滑动从网络加载下一张或者上一张图片,写了很久发现还是有问题,在线求解。。坐等大神。
图片加载不报错,但是就是没有显示图片,网络请求也是发送出去了的。这里用的是volley请求网络.
图片加载的Fragment:
网络请求图片加载的方法:
下面是封装的加载图片的方法,在这个例子里面用的第一个方法:
布局文件:
有一个重写的ViewPager类,代码贴不下了。。
图片加载不报错,但是就是没有显示图片,网络请求也是发送出去了的。这里用的是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
- 想实现一个图片水平滚动的效果
- 图片水平滚动效果
- Android使用Recyclerview实现图片水平自动循环滚动效果
- js实现图片的点击滚动效果
- jQuery+CSS实现的图片滚动效果
- Jquery实现简单的图片滚动效果
- Android TextView实现水平滚动显示效果
- 图片的水平滚动和上下滚动
- JavaScript实现一个最基本的图片无缝横向滚动效果
- Android_ViewPager_实现多个图片水平滚动
- Android_ViewPager_实现多个图片水平滚动
- Android_ViewPager_实现多个图片水平滚动
- Android_ViewPager_实现多个图片水平滚动
- [iOS] UICollectionView实现图片水平滚动
- 水平滚动字幕的实现
- javascript实现图片滚动效果
- javascript实现图片滚动效果
- 实现图片滚动链接效果
- Java中的反射总结
- UVA 11383 Golden Tiger Claw(最佳二分图匹配)
- 深入理解支持向量机
- 使用封装好的分页代码,没有信息输出,也不报错,这是什么情况
- 关于android读取手机通讯录的原有分组
- 想实现一个图片水平滚动的效果
- web.xml组件加载顺序
- 【Android存储权限问题】AS开发的应用,manifest配置了读写SD卡权限,安装却无法创建文件夹
- pl/sql 试用期到了解决
- 怎样通过java调用IOS系统图片选择器?
- 回顾2016,工作总结!
- Netty学习规划
- # 网络
- 自己做的一个WIFI模块+app,监控蓄电池电量