效果图
项目结构
关于图片查看器在http://blog.csdn.net/zhaihaohao1/article/details/76142706
中已经讲过,但是当时的思路是把图片查看器的ViewPager和图片列表写在同一界面,
并盖在列表上面,当点击图片时隐藏列表,显示ViewPager的图片查看器。
现在的思路是图片列表在一个activity中,点击图片后跳到ViewPagerActivity中查看图片
并加入图片缩放和出入动画
MainActivity中
activity_main.xml中package com.example.viewpagetest5; import android.app.Activity; import android.content.Intent; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.ImageView; import android.widget.ListView; import android.widget.TextView; import android.widget.Toast; import com.orhanobut.logger.Logger; import com.squareup.picasso.Picasso; import java.io.Serializable; import java.util.ArrayList; import java.util.List; /** * viewPager实现图片查看器 */ public class MainActivity extends Activity { // 列表控件 private ListView lvPhoto; // 存放资源的list List<String>list; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); myOnclick(); } // 初始化控件 private void initView(){ lvPhoto = (ListView)findViewById(R.id.lvPhoto); // 拿到数据资源 List list=getData(); Logger.t("111").d("list"+list.size()); LvAdapter lvAdapter = new LvAdapter(list,MainActivity.this); lvPhoto.setAdapter(lvAdapter); } // 点击事件 private void myOnclick(){ lvPhoto.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { List<String> listImagePath = getData(); Intent intent = new Intent(); // 传递当前点击的位置 intent.putExtra("position",position); // 传递图片链接的列表数据 intent.putExtra("listImagePath", (Serializable) listImagePath); intent.setClass(MainActivity.this,ViewPagerActivity.class); startActivity(intent); // 进入动画 MyCutscenes.myEntryAnim(MainActivity.this); } }); } // 制造一组数据 private List<String> getData(){ list = new ArrayList<>(); list.add("http://pic.58pic.com/58pic/15/36/26/12J58PICuz4_1024.jpg"); list.add("http://pic.58pic.com/58pic/15/14/14/18e58PICMwt_1024.jpg"); list.add("http://pic.58pic.com/58pic/15/36/26/12J58PICuz4_1024.jpg"); list.add("http://pic.58pic.com/58pic/15/14/14/18e58PICMwt_1024.jpg"); return list; } }
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.viewpagetest5.MainActivity" android:orientation="vertical" > <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent" > <ListView android:id="@+id/lvPhoto" android:layout_width="match_parent" android:layout_height="wrap_content"> </ListView> </RelativeLayout> </LinearLayout>
LvAdapter中
item_layout.xml中package com.example.viewpagetest5; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import com.orhanobut.logger.Logger; import com.squareup.picasso.Picasso; import java.util.List; /** * Created by 16838 on 2017/7/26. */ public class LvAdapter extends BaseAdapter{ private Context context; private List<String>list; private ViewHolder viewHolder; public LvAdapter(List<String>list,Context context){ this.list=list; this.context=context; } @Override public int getCount() { return list.size(); } @Override public Object getItem(int position) { return list.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { if(convertView==null) { viewHolder=new ViewHolder(); convertView =LayoutInflater.from(context).inflate(R.layout.item_layout,null); viewHolder.ivPhoto= (ImageView) convertView.findViewById(R.id.ivPhoto); convertView.setTag(viewHolder); }else { viewHolder= (ViewHolder) convertView.getTag(); } Picasso.with(context) .load(list.get(position)) .into(viewHolder.ivPhoto); return convertView; } class ViewHolder{ ImageView ivPhoto; } }
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <ImageView android:id="@+id/ivPhoto" android:layout_width="match_parent" android:layout_height="wrap_content" android:scaleType="fitXY" /> </LinearLayout>
ViewPagerActivity中
activity_view_pager.xmlpackage com.example.viewpagetest5; import android.app.Activity; import android.content.Intent; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; import com.bm.library.PhotoView; import com.orhanobut.logger.Logger; import com.squareup.picasso.Picasso; import java.util.ArrayList; import java.util.List; /** * ViewPager页面 */ public class ViewPagerActivity extends Activity { private ViewPager viewPager; // viewPager,装view的数组 private View[] viewArray; // 上个页面点击图片的位置 private int position; // 上个页面传过来的图片路径的list List<String> listImagePath; // 初始化左下角的页数 TextView tvYeShu; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_view_pager); Intent intent = getIntent(); // 图片位置 position = intent.getIntExtra("position", 0); // 拿到上个页面传递过来list listImagePath = intent.getStringArrayListExtra("listImagePath"); // 初始化控件 initView(); // 点击事件 myOnClick(); // 存放view布局的list viewArray = getViewPagerData(); // 绑定数据 viewPager.setAdapter(new MyAdapter()); // 显示页面 viewPager.setCurrentItem(position); //显示页数 tvYeShu = (TextView) viewArray[position].findViewById(R.id.tvYeShu); tvYeShu.setText(position + 1 + "/" + viewArray.length); } /** * 初始化控件 */ private void initView() { viewPager = (ViewPager) findViewById(R.id.viewPager); } /** * 点击事件 */ private void myOnClick() { // viewPager翻页点击事件 viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { // 这个方法会在屏幕滚动过程中不断被调用。 @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } // 代表哪个页面被选中。 @Override public void onPageSelected(int position) { // 显示页数 tvYeShu = (TextView) viewArray[position].findViewById(R.id.tvYeShu); tvYeShu.setText(position + 1 + "/" + listImagePath.size()); } // 这个方法在手指操作屏幕的时候发生变化。有三个值:0(END),1(PRESS) , 2(UP) 。 @Override public void onPageScrollStateChanged(int state) { } }); } /** * 适配器绑定图片 */ public class MyAdapter extends PagerAdapter { @Override public int getCount() { return viewArray.length; } @Override public void destroyItem(ViewGroup container, int position, Object object) { View view = viewArray[position]; container.removeView(view); } @Override public boolean isViewFromObject(View view, Object object) { return view == object; } @Override public Object instantiateItem(ViewGroup container, int position) { View view = viewArray[position]; container.addView(view); return view; } } // 存放viewPager的数据 private View[] getViewPagerData() { viewArray = new View[listImagePath.size()]; // 实例化布局,加载图片,并放到数组中 for (int i = 0; i < viewArray.length; i++) { // 存放布局 LayoutInflater layoutInflater = getLayoutInflater(); View view = layoutInflater.inflate(R.layout.activity_lay, null); PhotoView photoView = (PhotoView) view.findViewById(R.id.imageView); photoView.enable(); Picasso.with(this).load(listImagePath.get(i)).into(photoView); viewArray[i] = view; } return viewArray; } /** * * @param keyCode * @param event * @return * 监听返回键 */ @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { Logger.t("111").d("onKeyDown>>>"); // 退出动画 MyCutscenes.myOutAnim(ViewPagerActivity.this); // 销毁 ViewPagerActivity.this.finish(); } return false; } }
activity_lay.xml<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.viewpagetest5.ViewPagerActivity" android:orientation="vertical" > <android.support.v4.view.ViewPager android:id="@+id/viewPager" android:layout_width="match_parent" android:layout_height="match_parent" > </android.support.v4.view.ViewPager> </LinearLayout>
源码下载:<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <com.bm.library.PhotoView android:id="@+id/imageView" android:layout_width="fill_parent" android:layout_height="fill_parent" android:src="@drawable/b1" android:scaleType="fitXY" /> <TextView android:id="@+id/tvYeShu" android:layout_width="match_parent" android:layout_height="30dp" android:layout_alignParentBottom="true" android:text="页面" android:textColor="#000000" /> </RelativeLayout>
http://download.csdn.net/detail/zhaihaohao1/9915538