android 流式页面

  这两天研究了下流式页面,记录一下。

public class CascadeActivity extends Activity {
 private static final String TAG = "TestCascadeActivity";
 private static Map<String, Drawable> drawableMap = new LinkedHashMap<String, Drawable>();
 private LinearLayout llCcasecade;
 private LinearLayout lvCasecade1;
 private LinearLayout lvCasecade2;
 private LinearLayout lvCasecade3;
 
 private int mlineMin1=0;
 private int mlineMin2=0;
 private int mlineMin3=0;
 private Display display;
 private AssetManager assetManager;
 private List<String> iamgePaths;
 private static final String imgspath = "imgs";
 private int casecadeWidth;
   List<String> picPath;
 int j;
 // Handler handler ;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(cn.image.com.R.layout.main);
        display = this.getWindowManager().getDefaultDisplay();
        casecadeWidth = display.getWidth()/3;
        assetManager = this.getAssets();
     
  try {
   picPath = Arrays.asList(assetManager.list("imgs"));
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
   Drawable dravable=MyDrawableManager.getInstance().fetchDrawableOnThread(picPath, assetManager, handler);
 
        findView();
    }
   
  Handler  handler = new Handler() {
  @Override
  public void handleMessage(Message message) {
   //imageCallback.imageLoaded((Drawable) message.obj, urlString);
   if(message.what==1){
   
    List<PictureInfo> picInfos= (List<PictureInfo>) message.obj;
    for(int n=0;n<picInfos.size();n++){
     ImageView iv = (ImageView)LayoutInflater.from(TestCascadeActivity.this).inflate(cn.image.com.R.layout.item, null);
      j=minLine();
         if(j==1){
          lvCasecade1.addView(iv);
         }else if(j==2){
          lvCasecade2.addView(iv);
         }else{
          lvCasecade3.addView(iv);
         }
     Drawable drawable=picInfos.get(n).getDrawable();
     if(iv!=null && drawable!=null){
      int oldwidth = drawable.getIntrinsicWidth();
      int oldheight = drawable.getIntrinsicHeight();
      
      LayoutParams lp = iv.getLayoutParams();
      lp.height = (oldheight * casecadeWidth)/oldwidth;
      //修改line的高度
      if(j==1){
       mlineMin1+=lp.height;
      }else if(j==2){
       mlineMin2+=lp.height;
      }else if(j==3){
       mlineMin3+=lp.height;
      }
      iv.setPadding(0, 2, 0, 0);
      iv.setLayoutParams(lp);
      iv.setImageDrawable(drawable);
     }
    }
    
   }
   
  }
 };
 //初始化,页面各个图片链的宽度定义
    private void findView(){
     llCcasecade = (LinearLayout)this.findViewById(cn.image.com.R.id.llCcasecade);
     lvCasecade1 = (LinearLayout)this.findViewById(cn.image.com.R.id.casecade1);
     lvCasecade2 = (LinearLayout)this.findViewById(cn.image.com.R.id.casecade2);
     lvCasecade3 = (LinearLayout)this.findViewById(cn.image.com.R.id.casecade3);
     LayoutParams lp1 = lvCasecade1.getLayoutParams();
     lp1.width = casecadeWidth;
     lvCasecade1.setLayoutParams(lp1);
     
     LayoutParams lp2 = lvCasecade2.getLayoutParams();
     lp2.width = casecadeWidth;
     lvCasecade2.setLayoutParams(lp2);
     
     LayoutParams lp3 = lvCasecade3.getLayoutParams();
     lp3.width = casecadeWidth;
     lvCasecade3.setLayoutParams(lp3);
  
    }
   
    //算出当前那条显示的图片高度最少
    public int minLine(){
     int lineNum=0;
     if((mlineMin1<=mlineMin2)&&(mlineMin1<=mlineMin3)){
      lineNum=1;
      Log.i("testcastdsaljf=====", mlineMin1+"----11");
     }else if((mlineMin2<mlineMin1)&&(mlineMin2<=mlineMin3)){
      lineNum=2;
      Log.i("testcastdsaljf=====", mlineMin1+"----22");
     }else if((mlineMin3<mlineMin1)&&(mlineMin3<mlineMin2)){
      lineNum=3;
      Log.i("testcastdsaljf=====", mlineMin1+"----33");
     }
       return lineNum;
    }
 

}

 

//取图片 这次是在本地弄个文件夹下 (服务端不知道怎么写就省了)

public class MyDrawableManager {
 
 private static MyDrawableManager instance;
 private List<PictureInfo> listPic=new ArrayList<PictureInfo>();
 private static final String imgspath = "imgs";
 
 private MyDrawableManager() {
 }

 public static MyDrawableManager getInstance() {
  if (instance == null) {
   instance = new MyDrawableManager();
  }
  return instance;
 }

 public Drawable fetchDrawableOnThread(final List<String> picUrl,final AssetManager assetManager,
   final Handler handler) {
  Thread thread = new Thread() {
   @Override
   public void run() {
    for(int i=0;i<picUrl.size();i++){
     String urlString=imgspath+"/"+picUrl.get(i);
     Drawable drawable = fetchDrawable(urlString,assetManager);
      PictureInfo picInfo=new PictureInfo(urlString, drawable);
      listPic.add(picInfo);
    }
    Message message = handler.obtainMessage(1, listPic);
    handler.sendMessage(message);
   }
  };
  thread.start();
  return null;
 }
 

 private Drawable fetchDrawable(String urlString,AssetManager assetManager) {
  Log.d(this.getClass().getSimpleName(), "image url:" + urlString);
  InputStream is = null;
  try {
   is = assetManager.open(urlString);
   Drawable drawable = Drawable.createFromStream(is, "src");
  } catch (Exception e) {
   Log.e(this.getClass().getSimpleName(), "fetchDrawable failed", e);
  } finally{//关闭流
   try {
    if(is!=null)
     is.close();
   } catch (IOException e) {
    e.printStackTrace();
   }
  }
  return null;
 }

}

//实体类用于封装获取到的图片数据

public class PictureInfo {
 private int id;
 private String picUrl;
 private Drawable drawable;
 
 public PictureInfo(String picUrl, Drawable drawable) {
  super();
  this.picUrl = picUrl;
  this.drawable = drawable;
 }
 public int getId() {
  return id;
 }
 public void setId(int id) {
  this.id = id;
 }
 public String getPicUrl() {
  return picUrl;
 }
 public void setPicUrl(String picUrl) {
  this.picUrl = picUrl;
 }
 public Drawable getDrawable() {
  return drawable;
 }
 public void setDrawable(Drawable drawable) {
  this.drawable = drawable;
 }
 

}

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值