当前位置:   article > 正文

Gallery 实现图片逐一展示 和 显示当前图片张数_gradio.gallery()

gradio.gallery()

          最近在帮学长写项目,当然分的任务就是简单的UI啦,不过还是挺有干劲的!

          就是一个展示图片的界面,同时要在图片上展示当前的图片页数和总的页数。功能看起来还是挺简单的。fighting!

------------------------------------------------------------我是分割线-----------------------------------------------------------------

         首先是选择用什么方式来实现,网上查了一下,主流的是viewpaper,但是viewpaper通常是和fragment两者结合,像那些展示三张图啊,下面还有小圆点的那一类。还有一种是使用gallery,这种事Google之前发布的,我买的书上都说好像要被淘汰不用了。项目本身的话展示图片的张数应该是不确定的,最后用的还是gallery,简单粗暴!

         好接下来介绍我的学习过程啦:

 查了网上大部分的资料,大部分的DEMO都是一个GALLERY展示小图片,点击之后显示,或者是有小圆点的翻页的那一种,借鉴思考,开工。

一、先的写一个GalleryAdapter,继承自baseadapter。

  1. public class GalleryAdapter extends BaseAdapter {
  2. private Context mContext;
  3. private Integer[] mImageIds = { R.drawable.img_00, R.drawable.img_01, R.drawable.img_02,
  4. R.drawable.img_03, R.drawable.img_04, R.drawable.img_05 };
  5. public GalleryAdapter(Context c)
  6. {
  7. mContext = c;
  8. }
  9. @Override
  10. public int getCount() {
  11. return mImageIds.length;
  12. }
  13. @Override
  14. public Object getItem(int position) {
  15. return position;
  16. }
  17. @Override
  18. public long getItemId(int position) {
  19. return position;
  20. }
  21. @Override
  22. public View getView(int position, View convertView, ViewGroup parent) {
  23. ImageView i = new ImageView(mContext);
  24. i.setImageResource(mImageIds[position]);//获取当前要展示的图片
  25. i.setLayoutParams(new Gallery.LayoutParams(Gallery.LayoutParams.FILL_PARENT, Gallery.LayoutParams.FILL_PARENT));//设置布局参数
  26. i.setScaleType(ImageView.ScaleType.FIT_XY);//设置尺寸类型,按什么方式放大
  27. return i;
  28. }
  29. }
这个getview方法里的这几句我特意查了其他的写法,不同的写法有不同的效果哦。比如setLayoutParams()方法,设置gallery的布局参数,我开始时直接传入两个int型参数,出现了问题(GG),在我的手机上一切运转正常,一派和谐的景象,然而机智的我用了另一部手机,问题来了,在另一部手机上原本是全屏显示,现在却成了中图大小,由于不同的手机分辨率的问题导致的。

这个适配的问题困扰了很久............先一股脑介绍完我是怎么实现的吧,下一篇介绍稍微研究一下的参数设置一遍遍实验得出的经验。

二、之前直接用Gallery,发现稍微划一下就会过去好几张图片,用户体验不好,所以找了一下一张张滑动的方法。重新定义Gallery

  1. public class MyGallery extends Gallery {
  2. public MyGallery(Context context, AttributeSet attrs) {
  3. super(context, attrs);
  4. }
  5. @Override
  6. public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
  7. return super.onScroll(e1, e2, distanceX/3, distanceY);//distance/3的意图是滑动距离大也只翻一页,相反*x则是滑一小段翻几页
  8. //可以自己调试一下
  1. @Override
  2. public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
  3. int kEvent;
  4. if (isScrollingLeft(e1, e2)) {
  5. // Check if scrolling left
  6. kEvent = KeyEvent.KEYCODE_DPAD_LEFT;
  7. } else {
  8. // Otherwise scrolling right
  9. kEvent = KeyEvent.KEYCODE_DPAD_RIGHT;
  10. }
  11. onKeyDown(kEvent, null);
  12. return true;
  13. }
  14. private boolean isScrollingLeft(MotionEvent e1, MotionEvent e2) {
  15. return e2.getX() > e1.getX();
  16. }
  17. @Override
  18. public boolean onTouchEvent(MotionEvent event) {
  19. return super.onTouchEvent(event);
  20. }
  21. }
三、主函数使用Gallery展示:

注释掉的不用在意,那是其他效果。

  1. public class MainActivity extends Activity {
  2. @Override
  3. protected void onCreate(Bundle savedInstanceState) {
  4. super.onCreate(savedInstanceState);
  5. // requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
  6. setContentView(R.layout.mian);
  7. // getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.activity_main);
  8. final MyGallery gallery = (MyGallery) findViewById(R.id.gallery1);
  9. final TextView textView = (TextView) findViewById(R.id.textView2);//用于展示图片的页数
  10. // final ImageButton imageButton = (ImageButton) findViewById(R.id.imageButton);
  11. gallery.setAdapter(new GalleryAdapter(this));//
  12. gallery.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
  13. <span style="white-space:pre"> </span>//每次滑动图片都会<span style="white-space:pre"> </span>调用的方法,显示当前的图片页数
  14. @Override
  15. public void onItemSelected(AdapterView<?> parent, View view,
  16. int position, long id) {
  17. textView.setText(" " + (position + 1) + " " + "/" + " " +
  18. gallery.getCount() + " ");
  19. textView.getBackground().setAlpha(200);//设置背景透明度,不透明是255
  20. }
  21. @Override
  22. public void onNothingSelected(AdapterView<?> parent) {
  23. // TODO Auto-generated method stub
  24. }
  25. });
  26. }
  27. }
XML文件:

这样的效果是全屏的,离底部50dp,布局相关知识就和其他控件一样。

  1. <com.single.ldm.imageview.MyGallery
  2. android:id="@+id/gallery1"
  3. android:layout_width="fill_parent"
  4. android:layout_height="fill_parent"
  5. android:layout_marginBottom="50dp"
  6. />
  7. <TextView
  8. android:layout_width="wrap_content"
  9. android:layout_height="wrap_content"
  10. android:textAppearance="?android:attr/textAppearanceSmall"
  11. android:text="Small Text"
  12. android:id="@+id/textView2"
  13. android:textSize="36px"
  14. android:textColor="#FFFFFF"
  15. android:background="@drawable/shape_btn"
  16. android:layout_marginBottom="51dp"
  17. android:layout_above="@+id/textView5"
  18. android:layout_centerHorizontal="true" />
在做这个UI的时候,虽然看起来简单,但是要考虑全面,考虑用户体验实现优化,还有很多地方做的不够好。

遇到了许多问题,查了资料研究每一个代码的效果,接下来就会介绍得到的知识,做个记录。

----------------------------------------------------我还是分割线---------------------------------------------------------------

以后还会做一些项目,慢慢学习咯~~~~~一起进步记录我的进阶之路~~~~~

欢迎大家评论哟,指导鼓励批评都是很开心的~~~




声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号