android 瀑布流效果

本文介绍了一种结合Android与jQuery的方案来实现瀑布流效果,有效解决大量图片加载导致的内存溢出问题。通过异步加载图片,实现了平滑的滚动体验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

android 瀑布流效果

 

android加载图片最大的问题莫过于图片太多会报oom的错了,这其实是由于android本身的图片机制照成的,而瀑布流主要是用来加载大量的图片。从这一点上来说如果要想使用android本身的布局来实现瀑布流的效果,那么oom的问题无疑是最首要的问题了,那么你就要及时回收bitmap对象,但是这样会给用户带来不好的体验,那么如何绕过这个问题呢?这里有一个办法,使用的是android+jquery来组织图片形成瀑布流的效果,在滑动到底部的时候可以加载第二页,由于受到图片资源的影响,我只测试到第300张图片,丝毫没有卡顿的现象,图片详情查看采用了异步加载图片额方法,而且图片先从内存里去,取不到从sdcard去,还取不到则从网络下载并保存到sdcrad里。至于这种方法能否被接受,那就是仁者见仁智者见智的问题了,好了不多说了,先上图:

 

下面是html代码:

<!DOCTYPE html PUBLIC "-//W3C//DTDXHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type"content="text/html; charset=utf-8" />

<title>瀑布流</title>

<script type="text/javascript"language="javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7/jquery.min.js"></script>

<link type="text/css"rel="stylesheet" href="css/waterfall.css" />

<script type="text/javascript"language="javascript" src="js/waterfall.js"></script>

 

</head>

 

<body>

    <ul id="stage">

        <li></li>

        <li></li>

        <li></li>

    </ul>

</body>

</html>

 

js代码

var pageNo = 1;

$(window).scroll(

                function() {

                    if ($(document).height() -$(this).scrollTop()

                            -$(this).height()< 10)

                         android.getList(pageNo++);

                });

 

function fillDiv(imgtemp, nametemp) {

    var $row, iHeight,iTempHeight;

    var imgList = new Array(); // 定义一数组

    imgList= imgtemp.split(","); // 字符分割

    var nameList = new Array(); // 定义一数组

    nameList= nametemp.split(","); // 字符分割

 

    for ( var i = 0, l =imgList.length; i < l; i++) {

        iHeight= -1;

        $('#stage li').each(function() {

            iTempHeight= Number($(this).height());

            if (iHeight == -1 ||iHeight > iTempHeight) {

                iHeight= iTempHeight;

                $row= $(this);

            }

        });

       

        varimg=android.getImagePath(imgList[i]);

        $item= $(

                "<div class='bg'><divclass='item'><img src='" + img

                        +"' border='0'onclick='android.showImage(\""+((pageNo-1)*20+i)+"\")' /><br /><divclass='text'>"

                        +nameList[i] + "</div></div><div>").hide();

 

        $row.append($item);

        $item.fadeIn();

    }

   

    android.dismiss();

}

 

 

 

activity代码

 

    publicstaticfinalintID = Constants.SCHOOLVIEW_MAIN;

    private WebView mWebView;

    private PopupWindow popupWindow;

    private ListView popupListView;

    List<Map<String,String>> types;

    private String type;

    Buttonright;

    TextViewtitle;

    ArrayList<String>imageList= newArrayList<String>();

    ArrayList<String>nameList= newArrayList<String>();

    List<Image>tempList= newArrayList<Image>();

    @Override

    publicvoid onCreate(BundlesavedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.app_schoolview_main);

        findView();

        setTheme("校园风光");

        setRightButton(R.drawable.button_share);

        getList(1);

    }

 

    /**

     * 初始化控件.

     */

    privatevoid findView() {

        mWebView = (WebView)findViewById(R.id.detailview);

        WebSettingswebSetting = mWebView.getSettings();

        //设置js可用 

        webSetting.setJavaScriptEnabled(true);

        webSetting.setBuiltInZoomControls(false);

        webSetting.setLightTouchEnabled(true);

        webSetting.setSupportZoom(false);

        mWebView.setHapticFeedbackEnabled(false);

        mWebView.addJavascriptInterface(this, "android");

        //载入具体的web地址 

        mWebView.loadUrl("file:///android_asset/www/apps/demo/index.html");

        mWebView.setVisibility(View.VISIBLE);

        mWebView.requestFocus();

        title = (TextView)findViewById(R.id.title);

        right = (Button)findViewById(R.id.right);

        right.setOnClickListener(new OnClickListener() {

            publicvoid onClick(View v) {

                if (!popupWindow.isShowing()) {

                    popupWindow.showAsDropDown(right, 0, 0);

                }

            }

        });

 

    }

 

    /**

     * 添加右上角弹出按钮,并定义点击

     */

    privatevoid initControls() {

        if (types == null) {

            types = SchoolSceneryManager.getImageTypeList();

        }

 

        LayoutInflaterinflater = LayoutInflater.from(this);

        Viewview = inflater.inflate(R.layout.popupwindow_list, null);

 

        SimpleAdapteradapter = newSimpleAdapter(this,types,R.layout.popupwindow_item, newString[] { "text"},

                newint[] { R.id.item });

        popupListView = (ListView)view.findViewById(R.id.listview);

        popupListView.setAdapter(adapter);

 

        popupListView.setOnItemClickListener(new OnItemClickListener() {

            @Override

            publicvoidonItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {

                popupWindow.dismiss();

                if (!types.get(arg2).get("id").equals(type)) {

                    type = types.get(arg2).get("id");

                    title.setText(types.get(arg2).get("text"));

                    imageList.clear();

                    nameList.clear();

                    mWebView.loadUrl("file:///android_asset/www/apps/demo/index.html");

                    getList(1);

                }

            }

        });

 

        //自适配长、框设置

        popupWindow = new PopupWindow(view,LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);

        popupWindow.setBackgroundDrawable(getResources().getDrawable(R.drawable.privacy_spinner_pop_bg));

        popupWindow.setOutsideTouchable(true);

        popupWindow.setAnimationStyle(android.R.style.Animation_Dialog);

        popupWindow.update();

        popupWindow.setTouchable(true);

        popupWindow.setFocusable(true);

    }

 

    /**

     * 获取分页数据.

     * @param pageNo 页码

     */

    publicvoid getList(finalint pageNo) {

        showProgressDialog(this);

        new Thread(new Runnable() {

            @Override

            publicvoid run() {

                tempList = SchoolSceneryManager.getImageList(type, pageNo);

                for (Image image : tempList) {

                    imageList.add(image.getImage());

                    nameList.add(image.getName());

                }

                if (types == null) {

                    types = SchoolSceneryManager.getImageTypeList();

                    initControls();

                }

                handler.sendEmptyMessage(1);

            }

        }).start();

    }

 

    // 定义一个Handler,用来异步处理数据

    Handlerhandler= newHandler() {

        publicvoidhandleMessage(android.os.Message msg) {

            StringimgList=SchoolSceneryManager.formatImage(tempList);

            StringnameList=SchoolSceneryManager.formatName(tempList);

            mWebView.loadUrl("javascript:fillDiv('"+ imgList + "','"+nameList+"')");

        };

    };

   

/**

 * 关闭等待狂.  

 */

    publicvoid dismiss(){

        mProgressDialog.dismiss();

    }

 

    /**

     * 打开图片浏览工具.

     * @param index 初始化第几张选中

     */

    publicvoid showImage(String index){

        showMessage(index);

        Intentintent = newIntent();

        intent.putExtra("index",index+"");

        intent.putStringArrayListExtra("imageList",imageList);

        intent.putStringArrayListExtra("nameList",nameList);

        startActivity(intent,ShowImageActivity.ID, AnimUtil.ANIM_ZOOMIN_FADEOUT);

    }

 

    /**

     * 获取图片.

     * 从本地sdcard取图片,本地没有图片的话

     * 从网络上把图片取下来,保存在sdcard

     * @param fileUrl 图片网络地址

     * @return文件本地路径

     */

    public StringgetImagePath(String fileUrl) {

        return ImageUtil.getImageSdcardPath(fileUrl);

    }

 

下载地址:http://download.youkuaiyun.com/detail/chinawangw/4958353

 

 

 

 

内容概要:本文详细介绍了扫描单分子定位显微镜(scanSMLM)技术及其在三维超分辨体积成像中的应用。scanSMLM通过电调透镜(ETL)实现快速轴向扫描,结合4f检测系统将不同焦平面的荧光信号聚焦到固定成像面,从而实现快速、大视场的三维超分辨成像。文章不仅涵盖了系统硬件的设计与实现,还提供了详细的软件代码实现,包括ETL控制、3D样本模拟、体积扫描、单分子定位、3D重建和分子聚类分析等功能。此外,文章还比较了循环扫描与常规扫描模式,展示了前者在光漂白效应上的优势,并通过荧光珠校准、肌动蛋白丝、线粒体网络和感A病毒血凝素(HA)蛋白聚类的三维成像实验,验证了系统的性能和应用潜力。最后,文章深入探讨了HA蛋白聚类与病毒感染的关系,模拟了24小时内HA聚类的动态变化,提供了从分子到细胞尺度的多尺度分析能力。 适合人群:具备生物学、物理学或工程学背景,对超分辨显微成像技术感兴趣的科研人员,尤其是从事细胞生物学、病毒学或光学成像研究的科学家和技术人员。 使用场景及目标:①理解和掌握scanSMLM技术的工作原理及其在三维超分辨成像中的应用;②学习如何通过Python代码实现完整的scanSMLM系统,包括硬件控制、图像采集、3D重建和数据分析;③应用于单分子水平研究细胞内结构和动态过程,如病毒入侵机制、蛋白质聚类等。 其他说明:本文提供的代码不仅实现了scanSMLM系统的完整工作程,还涵盖了多种超分辨成像技术的模拟和比较,如STED、GSDIM等。此外,文章还强调了系统在硬件改动小、成像速度快等方面的优势,为研究人员提供了从理论到实践的全面指导。
内容概要:本文详细介绍了基于Seggiani提出的渣层计算模型,针对Prenflo气床气化炉中炉渣的积累和动进行了模拟。模型不仅集成了三维代码以提供气化炉内部的温度和浓度分布,还探讨了操作条件变化对炉渣行为的影响。文章通过Python代码实现了模型的核心功能,包括炉渣粘度模型、动速率计算、厚度更新、与三维模型的集成以及可视化展示。此外,还扩展了模型以考虑炉渣组成对特性的影响,并引入了Bingham体模型,更精确地描述了含未溶解颗粒的熔渣动。最后,通过实例展示了氧气-蒸汽量增加2%时的动态响应,分析了温度、动特性和渣层分布的变化。 适合人群:从事煤气化技术研究的专业人士、化工过程模拟工程师、以及对工业气化炉操作优化感兴趣的科研人员。 使用场景及目标:①评估不同操作条件下气化炉内炉渣的行为变化;②预测并优化气化炉的操作参数(如温度、氧煤比等),以防止炉渣堵塞;③为工业气化炉的设计和操作提供理论支持和技术指导。 其他说明:该模型的实现基于理论公式和经验数据,为确保模型准确性,实际应用中需要根据具体气化炉的数据进行参数校准。模型还考虑了多个物理场的耦合,包括质量、动量和能量守恒方程,能够模拟不同操作条件下的渣层演变。此外,提供了稳态求解器和动态模拟工具,可用于扰动测试和工业应用案例分析。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值