1

im trying to figure out how i can make this work. I have perfectly working wallpaper selector, Which loads the wallpaper as a [1]:https://www.dropbox.com/s/phu0a6atue7vlsb/Screenshot_2013-01-03-23-35-06.png

However im trying to change the code to look something like this! The main interface like so. https://www.dropbox.com/s/0v0wd9sx41nh2oh/Screenshot_2013-01-03-23-38-34.png

And when the "Wallpaper" is selected it bring up a ImageView of the large wallpaper https://www.dropbox.com/s/dna7xxa1hzywwme/Screenshot_2013-01-03-23-38-55.png

Here is what i have for soure code.

Im suck on getting it changed from a Gallery to a GridView!

WallpaperChooser.java

public class WallpaperChooser extends Activity {
@SuppressWarnings("unused")
private static final String TAG = "Launcher.WallpaperChooser";

@Override
public void onCreate(Bundle icicle) {
    super.onCreate(icicle);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.wallpaper_chooser_base);

    Fragment fragmentView =
            getFragmentManager().findFragmentById(R.id.wallpaper_chooser_fragment);
    // TODO: The following code is currently not exercised. Leaving it here in case it
    // needs to be revived again.
    if (fragmentView == null) {
        /* When the screen is XLarge, the fragment is not included in the layout, so show it
         * as a dialog
         */
        DialogFragment fragment = WallpaperChooserDialogFragment.newInstance();
        fragment.show(getFragmentManager(), "dialog");
        }
    }
}

WallpaperChooserFragment.java

public class WallpaperChooserDialogFragment extends DialogFragment implements
    AdapterView.OnItemSelectedListener, AdapterView.OnItemClickListener {

private static final String TAG = "Launcher.WallpaperChooserDialogFragment";
private static final String EMBEDDED_KEY = "com.jaisonbrooks.theme.sony.xperia."
        + "WallpaperChooserDialogFragment.EMBEDDED_KEY";

private boolean mEmbedded;
private Bitmap mBitmap = null;

private ArrayList<Integer> mThumbs;
private ArrayList<Integer> mImages;
private WallpaperLoader mLoader;
private WallpaperDrawable mWallpaperDrawable = new WallpaperDrawable();

public static WallpaperChooserDialogFragment newInstance() {
    WallpaperChooserDialogFragment fragment = new WallpaperChooserDialogFragment();
    fragment.setCancelable(true);
    return fragment;
}


public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if (savedInstanceState != null && savedInstanceState.containsKey(EMBEDDED_KEY)) {
        mEmbedded = savedInstanceState.getBoolean(EMBEDDED_KEY);
    } else {
        mEmbedded = isInLayout();
    }
}

@Override
public void onSaveInstanceState(Bundle outState) {
    outState.putBoolean(EMBEDDED_KEY, mEmbedded);
}

private void cancelLoader() {
    if (mLoader != null && mLoader.getStatus() != WallpaperLoader.Status.FINISHED) {
        mLoader.cancel(true);
        mLoader = null;
    }
}

@Override
public void onDetach() {
    super.onDetach();

    cancelLoader();
}

@Override
public void onDestroy() {
    super.onDestroy();

    cancelLoader();
}

@Override
public void onDismiss(DialogInterface dialog) {
    super.onDismiss(dialog);
    /* On orientation changes, the dialog is effectively "dismissed" so this is called
     * when the activity is no longer associated with this dying dialog fragment. We
     * should just safely ignore this case by checking if getActivity() returns null
     */
    Activity activity = getActivity();
    if (activity != null) {
        activity.finish();
    }
}

/* This will only be called when in XLarge mode, since this Fragment is invoked like
 * a dialog in that mode
 */
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    findWallpapers();

    return null;
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    findWallpapers();

    /* If this fragment is embedded in the layout of this activity, then we should
     * generate a view to display. Otherwise, a dialog will be created in
     * onCreateDialog()
     */
    if (mEmbedded) {
        View view = inflater.inflate(R.layout.wallpaper_chooser, container, false);
        view.setBackground(mWallpaperDrawable);

        final Gallery gallery = (Gallery) view.findViewById(R.id.gallery);
        gallery.setCallbackDuringFling(false);
        gallery.setOnItemSelectedListener(this);
        gallery.setAdapter(new ImageAdapter(getActivity()));

        View setButton = view.findViewById(R.id.set);
        setButton.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {
                selectWallpaper(gallery.getSelectedItemPosition());
            }
        });
        return view;
    }
    return null;
}

private void selectWallpaper(int position) {
    try {
        WallpaperManager wpm = (WallpaperManager) getActivity().getSystemService(
                Context.WALLPAPER_SERVICE);
        wpm.setResource(mImages.get(position));
        Activity activity = getActivity();
        activity.setResult(Activity.RESULT_OK);
        activity.finish();
    } catch (IOException e) {
        Log.e(TAG, "Failed to set wallpaper: " + e);
    }
}

// Click handler for the Dialog's GridView

public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    selectWallpaper(position);
}

// Selection handler for the embedded Gallery view

public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
    if (mLoader != null && mLoader.getStatus() != WallpaperLoader.Status.FINISHED) {
        mLoader.cancel();
    }
    mLoader = (WallpaperLoader) new WallpaperLoader().execute(position);
}


public void onNothingSelected(AdapterView<?> parent) {
}

private void findWallpapers() {
    mThumbs = new ArrayList<Integer>(24);
    mImages = new ArrayList<Integer>(24);

    final Resources resources = getResources();
    // Context.getPackageName() may return the "original" package name,
    // com.android.launcher2; Resources needs the real package name,
    // com.android.launcher. So we ask Resources for what it thinks the
    // package name should be.
    final String packageName = resources.getResourcePackageName(R.array.wallpapers);

    addWallpapers(resources, packageName, R.array.wallpapers);
   // addWallpapers(resources, packageName, R.array.extra_wallpapers);
}

private void addWallpapers(Resources resources, String packageName, int list) {
    final String[] extras = resources.getStringArray(list);
    for (String extra : extras) {
        int res = resources.getIdentifier(extra, "drawable", packageName);
        if (res != 0) {
            final int thumbRes = resources.getIdentifier(extra + "_thumb",
                    "drawable", packageName);

            if (thumbRes != 0) {
                mThumbs.add(thumbRes);
                mImages.add(res);
                // Log.d(TAG, "add: [" + packageName + "]: " + extra + " (" + res + ")");
            }
        }
    }
}

private class ImageAdapter extends BaseAdapter implements ListAdapter, SpinnerAdapter {
    private LayoutInflater mLayoutInflater;

    ImageAdapter(Activity activity) {
        mLayoutInflater = activity.getLayoutInflater();
    }

    public int getCount() {
        return mThumbs.size();
    }

    public Object getItem(int position) {
        return position;
    }

    public long getItemId(int position) {
        return position;
    }

    public View getView(int position, View convertView, ViewGroup parent) {
        View view;

        if (convertView == null) {
            view = mLayoutInflater.inflate(R.layout.wallpaper_item, parent, false);
        } else {
            view = convertView;
        }

        ImageView image = (ImageView) view.findViewById(R.id.wallpaper_image);

        int thumbRes = mThumbs.get(position);
        image.setImageResource(thumbRes);
        Drawable thumbDrawable = image.getDrawable();
        if (thumbDrawable != null) {
            thumbDrawable.setDither(true);
        } else {
            Log.e(TAG, "Error decoding thumbnail resId=" + thumbRes + " for wallpaper #"
                    + position);
        }

        return view;
    }
}

class WallpaperLoader extends AsyncTask<Integer, Void, Bitmap> {
    BitmapFactory.Options mOptions;

    WallpaperLoader() {
        mOptions = new BitmapFactory.Options();
        mOptions.inDither = false;
        mOptions.inPreferredConfig = Bitmap.Config.ARGB_8888;
    }


    protected Bitmap doInBackground(Integer... params) {
        if (isCancelled()) return null;
        try {
            return BitmapFactory.decodeResource(getResources(),
                    mImages.get(params[0]), mOptions);
        } catch (OutOfMemoryError e) {
            return null;
        }
    }


    protected void onPostExecute(Bitmap b) {
        if (b == null) return;

        if (!isCancelled() && !mOptions.mCancel) {
            // Help the GC
            if (mBitmap != null) {
                mBitmap.recycle();
            }

            View v = getView();
            if (v != null) {
                mBitmap = b;
                mWallpaperDrawable.setBitmap(b);
                v.postInvalidate();
            } else {
                mBitmap = null;
                mWallpaperDrawable.setBitmap(null);
            }
            mLoader = null;
        } else {
           b.recycle();
        }
    }

    void cancel() {
        mOptions.requestCancelDecode();
        super.cancel(true);
    }
}

/**
 * Custom drawable that centers the bitmap fed to it.
 */
static class WallpaperDrawable extends Drawable {

    Bitmap mBitmap;
    int mIntrinsicWidth;
    int mIntrinsicHeight;

    /* package */void setBitmap(Bitmap bitmap) {
        mBitmap = bitmap;
        if (mBitmap == null)
            return;
        mIntrinsicWidth = mBitmap.getWidth();
        mIntrinsicHeight = mBitmap.getHeight();
    }


    public void draw(Canvas canvas) {
        if (mBitmap == null) return;
        int width = canvas.getWidth();
        int height = canvas.getHeight();
        int x = (width - mIntrinsicWidth) / 2;
        int y = (height - mIntrinsicHeight) / 2;
        canvas.drawBitmap(mBitmap, x, y, null);
    }


    public int getOpacity() {
        return android.graphics.PixelFormat.OPAQUE;
    }


    public void setAlpha(int alpha) {
        // Ignore
    }


    public void setColorFilter(ColorFilter cf) {
        // Ignore
        }
    }
}

Layouts

wallpaper_chooser.xml

 <?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/pinstripe_actionbar_tile_white"
android:orientation="vertical" >

<ImageView
    android:id="@+id/wallpaper"
    android:layout_width="fill_parent"
    android:layout_height="0dip"
    android:layout_weight="1.0"
    android:scaleType="fitCenter" />

<Gallery
    android:id="@+id/gallery"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" />

<Button
    android:id="@+id/set"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center_horizontal"
    android:text="@string/wallpaper_instructions"
    android:textColor="@color/roboto" />

</LinearLayout>

wallpaper_item.xml

<?xml version="1.0" encoding="utf-8"?>

<ImageView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/wallpaper_image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/gallery_item_background"
android:scaleType="fitXY"
android:focusable="true" />

I've should some of the following resources GridView | Android Developers:http://developer.android.com/guide/topics/ui/layout/gridview.html And a few others, I attempt to change everything over put end up bricking the entire code.

Any Help by Tips, Code, Example, Links, Support i'd extremely appreciate it all, Thank you.

4

0 回答 0