关闭

朋友圈一个简单的看图功能

标签: android
325人阅读 评论(0) 收藏 举报
分类:

       最近做项目的时候有大图片,需要查看,怎么解决?

我想的是在一个页面里边使用一个ImageView就可以了,如果需要实现左右滑动的功能就监听一下滑动监听事件。嗯嗯,既然这么想了那就去做吧!

首先在页面中添加一个Imageview,然后监听屏幕的滑动事件(代码比较简单,贴出部分代码):

float x1;
@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
// 拿到按下时的坐标
x1 = (int) event.getX();
break;
case MotionEvent.ACTION_UP:
// 拿到抬起的坐标
float moveX = x1 - event.getX();
// 左滑
if (moveX > 50) {
// 左边滑动-->判断当前图片在数组中的位置
if (index < LSharepicArr.length) {
index++;
myAdapter.notifyDataSetChanged();
} else {
T.shortToast(getApplicationContext(), "当前是最后一张图片");
}
}
// 右滑
else if (moveX < -50) {
// 右边滑动-->判断当前图片在数组中的位置
if (index > -1) {
index--;
myAdapter.notifyDataSetChanged();
} else {
T.shortToast(getApplicationContext(), "当前是第一张图片");
}
}
break;
}
return false;
}

运行一下,效果如下:



但是,理想很丰满,显示很骨感。在滑动的时候发现图片就在一瞬间就切换了,根本不给我这种反应慢的人留下思考的事件。唉,所以是不是应该考虑加点动画呢?但是好像又有点麻烦,还是用ViewPager来实现吧!

这个的实现思路也很简单:

1、首先我需要知道我应该创建多少个view,

2、然后再在view里边加一个imageview,所以就需要一个item布局。

3、在加载视图的时候把图片加到imageview里边。

实现起来也很简单,这里就不贴图片了。但是又有新的问题来了,我每次点击图片看大图的时候都是从第一张图片开始看,这很不爽啊!怎么解决?
让我传一个index进去,但是发现总是显示一张图片。然后就开始查viewpager的左右滑动的监听!发现无果,各种请教之后,发现viewPager还有一个setCurrentItem方法!

这个方法有啥作用呢?就是告诉viewpager我要把那个view放在第一张显示,然后其他的左右滑动的操作就不用自己来控制了,viewpager会当你实现的!谢谢爱调频的大叔的帮助!

效果图还和上边一样,具体代码如下:

public class ShejiaoShareShowPicActivity extends Activity {
int index;// 当前图片在数组中的位置
String LSharepicArr[];// 存放图片地址的数组
String LShareSmallPicArr[];// 存放缩略图的数组
private ViewPager pager;
String path = "";// 图片缓存地址
private ArrayList<View> myViews = new ArrayList<View>();
private MyAdapter myAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_shejiao_share_show_pic);
initView();
initDate();
path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES) + "/Qm";
}

private void initView() {
pager=(ViewPager)  this.findViewById(R.id.shejiao_share_showpic_img);
index = PublicStaticData.shejiaoShareLSharepicposition;// 当前选中的对象图片的位置
// 截取图片地址
LSharepicArr = PublicStaticData.shejiaoShareLSharepic.split(",");
LShareSmallPicArr = PublicStaticData.shejiaoShareLShareSmallPic
.split(",");
}
// 加载数据 
public void initDate() {
for (int i = 0; i < LSharepicArr.length; i++) {
View view =LayoutInflater.from(ShejiaoShareShowPicActivity.this).inflate(R.layout.shejiao_share_showpic_item,null); 
myViews.add(view);
}
myAdapter = new MyAdapter(myViews,LSharepicArr);
pager.setAdapter(myAdapter);
pager.setCurrentItem(index);
}


class MyAdapter extends PagerAdapter {
private ArrayList<View> myviews;
private String myLSharepicArr[];
public MyAdapter(ArrayList<View> views,String myLSharepicArr[]) {
super();
this.myviews = views;
this.myLSharepicArr = myLSharepicArr;
}
@Override
public int getCount() {
return myviews.size();
}
// 实例化选项卡
@Override
public Object instantiateItem(final ViewGroup container, int position) {
View myview = myviews.get(position);
ImageView imgImageView=(ImageView) myview.findViewById(R.id.asd_pic);
BitmapUtils bitmapUtils = new BitmapUtils(ShejiaoShareShowPicActivity.this, path);
bitmapUtils.display(imgImageView, myLSharepicArr[position]);
container.addView(myview);
return myview;
}
// 删除选项卡
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView(myviews.get(position));
}
// 判断当前视图是否为返回的对象
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
return arg0 == arg1;
}
}
}


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:23801次
    • 积分:471
    • 等级:
    • 排名:千里之外
    • 原创:25篇
    • 转载:11篇
    • 译文:0篇
    • 评论:8条
    文章分类
    最新评论