注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

罔少年

QQ 332256483

 
 
 

日志

 
 

android ViewPager实现Gallery画廊  

2014-05-14 14:41:24|  分类: android |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
2014-05-14
android ViewPager实现Gallery画廊 - lanaiver6291 - lanaiver6291的博客
 
要实现如上效果,用了Gallery,发现默认图片从中间开始显示
找方法重写了Gallery,结果还是不行。以前记得做过的。
纠结了1天还是没搞明白为啥不行。后来群里有个朋友说,Gallery被google宣布过时了。查了下原因,大数据情况下会出现内存泄露问题。所以被无情的抛弃了。官方建议使用ViewPager和HorizontalScrollView替代

在这里先用ViewPager来实现功能---代码如下

package com.xx.activity;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.RelativeLayout;

/**
* ViewPager实现画廊效果
*
* @author Trinea 2013-04-03
*/
public class MainActivity_4 extends FragmentActivity {

private RelativeLayout viewPagerContainer;
private ViewPager viewPager;
private String[] imageUrls = new String[]{
"http://fanevent.vmta.com/virtual/mmz/main4_gallery_001.jpg",
"http://fanevent.vmta.com/virtual/mmz/main4_gallery_001.jpg",
"http://fanevent.vmta.com/virtual/mmz/main4_gallery_001.jpg",
"http://fanevent.vmta.com/virtual/mmz/main4_gallery_001.jpg",
"http://fanevent.vmta.com/virtual/mmz/main4_gallery_001.jpg",
"http://fanevent.vmta.com/virtual/mmz/main4_gallery_001.jpg",
"http://fanevent.vmta.com/virtual/mmz/main4_gallery_001.jpg",
};

private int TOTAL_COUNT = imageUrls.length;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_activity_4);

viewPager = (ViewPager)findViewById(R.id.view_pager);
viewPagerContainer = (RelativeLayout)findViewById(R.id.pager_layout);
viewPager.setAdapter(new MyPagerAdapter(this,imageUrls));
// to cache all page, or we will see the right item delayed
viewPager.setOffscreenPageLimit(TOTAL_COUNT);
viewPager.setPageMargin(3);
MyOnPageChangeListener myOnPageChangeListener = new MyOnPageChangeListener();
viewPager.setOnPageChangeListener(myOnPageChangeListener);

viewPagerContainer.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
// dispatch the events to the ViewPager, to solve the problem that we can swipe only the middle view.
return viewPager.dispatchTouchEvent(event);
}
});
}

/**
* this is a example fragment, just a imageview, u can replace it with your needs
*
* @author Trinea 2013-04-03
*/
class MyPagerAdapter extends PagerAdapter {

private Context context;
private String[] imageUrl;
private Bitmap[] bitmaps;
public MyPagerAdapter(Context context, String[] imageUrl){
this.context = context;
this.imageUrl = imageUrl;
bitmaps = new Bitmap[imageUrl.length];
int size = imageUrl.length;
for(int i=0; i<size; i++){
Resources res = context.getResources();
bitmaps[i] = BitmapFactory.decodeResource(res, R.drawable.main_gallery_001);
}
}

@Override
public int getCount() {
return TOTAL_COUNT;
}

@Override
public boolean isViewFromObject(View view, Object object) {
return (view == object);
}

@Override
public Object instantiateItem(ViewGroup container, int position) {
ImageView imageView = new ImageView(MainActivity_4.this);
// imageView.setImageResource(R.drawable.main4_gallery_001 + position);
imageView.setImageBitmap(bitmaps[position]);
((ViewPager)container).addView(imageView, position);
return imageView;

}

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

public class MyOnPageChangeListener implements OnPageChangeListener {

@Override
public void onPageSelected(int position) {
}

@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
// to refresh frameLayout
if (viewPagerContainer != null) {
viewPagerContainer.invalidate();
}
}

@Override
public void onPageScrollStateChanged(int arg0) {
}
}
}

activity_activity_4.xml

<RelativeLayout
android:id="@+id/pager_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clipChildren="false"
android:layerType="software" >

<android.support.v4.view.ViewPager
android:id="@+id/view_pager"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_gravity="center"
android:clipChildren="false" />
</RelativeLayout>


在这里说下注意点
1、在layout布局中 必须写上ViewPaper的父容器必须加上android:clipChildren="false" android:layerType="software"属性。
2、ViewPaper加上android:clipChildren="false"属性。
3、至于一页显示几张,就把ViewPaper的android:layout_width改小点。默认全屏,即一页显示一张图片。
4、还没研究出点击事件,欢迎找我来讨论270032162
  评论这张
 
阅读(875)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018