android图像裁剪和壁纸设置页面

时间:2013-01-23 19:02:39

标签: java android live-wallpaper

我想实现动态壁纸,用户可以在手机桌面上设置自己的照片。

现在我已经成功实现了逻辑,用户可以从Android图库或相机本身裁剪任何照片。

在动态壁纸设置页面上,我想实现裁剪的照片预览。为此,我实现了SelectImagePreference

public class SelectImagePreference extends Preference {

    public SelectImagePreference(Context context, AttributeSet attributeSet) {
        this(context, attributeSet, 0);
    }

    public SelectImagePreference(Context context, AttributeSet attributeSet, int paramInt) {
        super(context, attributeSet, paramInt);
        setLayoutResource(R.layout.select_image_preference);
    }

}

布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:attr/theme"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:gravity="center_vertical"
    android:minHeight="?android:listPreferredItemHeight"
    android:paddingRight="?android:scrollbarSize" >

    <ImageView
            android:id="@+id/picture"
            android:layout_width="200px"
            android:layout_height="250px"
            android:layout_margin="5dp"
            android:background="@drawable/pic_border"
            android:contentDescription="@string/picture" />    

</LinearLayout>

在onActivityResult方法的WallpaperSettings活动中,我试图将返回的Bitmap设置为我的ImageView

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {

        if (resultCode != RESULT_OK) {
            return;
        } else if (requestCode == PICK_CROP) {
            try {
                Bundle extras = data.getExtras();
            Bitmap croppedPicture = extras.getParcelable("data");

            File saveFilePath = FileUtils.createNewFile(this, FOLDER, FileUtils.getUniqueFileName(CROPPED_IMAGE_PREFIX, CROPPED_IMAGE_EXTENSION));
            FileOutputStream out = new FileOutputStream(saveFilePath);
            croppedPicture.compress(Bitmap.CompressFormat.JPEG, 100, out);

            saveCroppedImageUrl(saveFilePath.getAbsolutePath());

            ImageView pictureView = (ImageView) findViewById(R.id.picture);
            pictureView.setImageBitmap(croppedPicture);

        } catch (Exception e) {
                e.printStackTrace();
            }

        }

在我的三星Note 2上预览图片显示可能从~10开始一次。

我确定磁盘上存在图片,而Bitmap不为空。如何解决这个问题?感谢

1 个答案:

答案 0 :(得分:0)

看看这个壁纸幻灯片源代码:

android-wallpaper-slideshow