Gallery3D各个界面可见范围计算方法

简介:这是Gallery3D各个界面可见范围计算方法的详细页面,介绍了和手机软件,Android Gallery3D各个界面可见范围计算方法有关的知识

 

computeVisibleRange算法分析:
第1步,计算出left,right,bottom,top

第2步,计算出numSlots,并除于2赋值给index


第3步,由index得position,判断position是否在第1步计算出的范围内,是的话,就把第2步计算得出的中间的index赋值给 firstVisibleSlotIndex,lastVisibleSlotIndex,否则,根据滑动窗口算法改变index直到求组所需index

第4步,在while循环中,用第3步得到的firstVisibleSlotIndex求出position,进行和第2步相反的判断,即 position若不在可视范围内,则将相应的index给firstVisibleSlotIndex,否则减 firstVisibleSlotIndex,直到找到最小的可视范围内的index作为firstVisibleSlotIndex。


第5步,在while循环中,用第3步得到的lastVisibleSlotIndex求出position,进行和第2步相反的判断,即 position若不在可视范围内,则将相应的index给lastVisibleSlotIndex,否则增 lastVisibleSlotIndex,直到找到可视范围内的最大的index作为lastVisibleSlotIndex。


第6步,进行firstVisibleSlotIndex,lastVisibleSlotIndex的越界判断。 outBufferedVisibleRange对应的是可见的。outBufferedVisibleRange对应的是0~文件夹的最大数。

computeVisibleItems算法分析:
第1步 由slot计算出position,set,当前set不为空且slot在有效范围,创建bestItems,计算sortedIntersection
第2步 计算这个slotindex中的图片数目,取这个文件中的前12张图片加到bestItems.
第3步  取bestItems里的图片对应的displayList中的displayItem,并赋值给displayItems数组,同时保存 position,及j,j是bestItems数组中一项,范围是0~12。
第四步  对于每一个文件夹,要在displayItems里有对应的12项,当文件夹内图片不足12时,余下的用null填充。
当绘制缩略图界面时,有些不同
在第1步中,slotindex不再表示文件夹,这时表示具体某一张图片了,所以由slot得到的set里始终只有1项,且会调 ArrayUtils.computeSortedIntersection(visibleItems, items, MAX_ITEMS_PER_SLOT, bestItems, sTempHash);给bestItems赋值,这样第2步就在bestItems加项动作不执行。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
介绍:效果不错的画廊控件 可以设置画廊一次可见图片的张数,和其他第三方Gallery控件不同的是,该控件直接继承自View,而不是sdk中的Gallery控件。如果想获得包含demo的可运行代码,请在本站的下载链接中下载。项目地址:https://github.com/dolphinwang/ImageCoverFlow效果图:使用说明:首先设置命名空间:xmlns:imageCoverFlow="http://schemas.android.com/apk/res-auto"在布局文件中添加ImageCoverFlow    <com.dolphinwang.imagecoverflow.CoverFlowView         android:id="@ id/coverflow"         android:layout_width="match_parent"         android:layout_height="match_parent"         android:paddingLeft="20dp"         android:paddingRight="20dp"         imageCoverFlow:coverflowGravity="center_vertical"         imageCoverFlow:coverflowLayoutMode="wrap_content"            imageCoverFlow:reflectionGap="10dp"         imageCoverFlow:reflectionHeight="30%"         imageCoverFlow:visibleImage="3" >     </com.dolphinwang.imagecoverflow.CoverFlowView>注意作者在github上的描述是有问题的,没有imageCoverFlow:enableReflection="true"和imageCoverFlow:reflectionShaderEnable="true"两个属性,作者根本就没有定义。另外,visibleImage属性的必须为基数,否则会报出异常,这个异常是作者有意抛出的。在Activity中初始化:package com.example.imagecoverflowdemo;    import java.util.ArrayList;   import com.dolphinwang.imagecoverflow.CoverFlowAdapter; import com.dolphinwang.imagecoverflow.CoverFlowView; import com.dolphinwang.imagecoverflow.CoverFlowView.CoverFlowGravity; import com.dolphinwang.imagecoverflow.CoverFlowView.CoverFlowLayoutMode;   import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Bundle; import android.support.v7.app.ActionBarActivity; import android.view.Menu; import android.view.MenuItem;   public class MainActivity extends ActionBarActivity {     private ArrayList<Bitmap> imgList;      @Override     protected void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         setContentView(R.layout.activity_main);                   CoverFlowView<MyCoverFlowAdapter> mCoverFlowView = (CoverFlowView<MyCoverFlowAdapter>)this.findViewById(R.id.coverflow);                      imgList = new ArrayList<Bitmap>();         imgList.add(BitmapFactory.decodeResource(this.getResources(), R.drawable.a));         imgList.add(BitmapFactory.decodeResource(this.getResources(), R.drawable.b));         imgList.add(BitmapFactory.decodeResource(this.getResources(), R.drawable.c));         imgList.add(BitmapFactory.decodeResource(this.getResources(), R.drawable.d));         imgList.add(BitmapFactory.decodeResource(this.getResources(), R.drawable.d));                   MyCoverFlowAdapter adapter = new MyCoverFlowAdapter();         mCoverFlowView.setAdapter(adapter);                      }           public class MyCoverFlowAdapter extends CoverFlowAdapter{         public int getCount(){             return 5;         }           public  Bitmap getImage(int position){             return imgList.get(position);         }     }     }
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值