Android函数zoomImageFromThum(param1,param2)使用了大量的RAM和CPU

时间:2015-11-02 16:58:59

标签: android image listview

当触摸拇指并启动功能时,如何避免40%的CPU使用率和70MB的RAM(以10MB开头)?

这是场景: 我有ListView可以包含文字或图片。 用户可以拍照并将照片保存到sdcard0并通过路径加载到相对ImageView。 我的表现存在一些问题。

保存图像或文本并将其放入列表视图的适配器: PS:我尝试使用ViewHolder来优化列表视图,但是我在使用Picasso加载图像时遇到了一些问题,所以我将其删除了!

@Override
public View getView(int position, View convertView, ViewGroup parent){
    LayoutInflater inflater = (LayoutInflater) getContext()
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    convertView = inflater.inflate(R.layout.evento_list_view_line, null);

    ImageView img = (ImageView)convertView.findViewById(R.id.compiti_imageView);
    TextView compito = (TextView)convertView.findViewById(R.id.compiti_text);

    Compiti m = getItem(position);

    if(m.getTestoCompito() != null){

        compito.setText(m.getTestoCompito());
        //Invisibile e non presente nel layout
        img.setVisibility(View.GONE);

    }else if(m.getPathFoto() != null){
        //load img
        Picasso.with(getContext())
                .load(m.getPathFoto())
                .resize(200, 200)
                .centerCrop()
                .into(img);
        //Set the tag for retrieve the path of image from listview
        img.setTag(m.getPathFoto());
    }


    return convertView;
}

如您所见,我使用setTag(ImgPath)从ImageView检索路径。

如果图像位于ImageView

,这就是我检索触摸图像的方法
// ListView Item Click Listener
    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

            ImageView image_to_zoom = (ImageView) view.findViewById(R.id.compiti_imageView);

            if (image_to_zoom.getDrawable() != null) {

                //Image IN
                String path = image_to_zoom.getTag().toString();
                zoomImageFromThumb(image_to_zoom, path);

            } else {
                //Imane nope
                Toast.makeText(getApplicationContext(), "No photo here!" , Toast.LENGTH_LONG).show();

            }
        }
    });
    // Retrieve and cache the system's default "short" animation time.
    mShortAnimationDuration = getResources().getInteger(
            android.R.integer.config_shortAnimTime);

我从google.developer找到了方法zoomImageFromThumb(image_to_zoom, path);,我做了一些更改,因为原始代码从R.resources获取图像,我需要从内存中获取图像(文件夹图片)。

我的改变:

private void zoomImageFromThumb(final View thumbView, String imagePath) {
    // If there's an animation in progress, cancel it
    // immediately and proceed with this one.
    if (mCurrentAnimator != null) {
        mCurrentAnimator.cancel();
    }

    // Load the high-resolution "zoomed-in" image.
    final ImageView expandedImageView = (ImageView) findViewById(
            R.id.expanded_image);
    //expandedImageView.setImageResource(imageResId);
    Picasso.with(this)
            .load(imagePath)
            .into(expandedImageView);

如果我在没有方法getTag()的情况下手动设置路径,则app会非常快地加载触摸的图像,但是使用方法getTag()来检索图像的路径,应用程序加载触摸图像的缩放非常慢。 一些建议或帮助?

还有另一种方法可以在ImageView中检索图像的路径吗?

0 个答案:

没有答案