0

我正在创建一个壁纸应用程序,我想在其中使用 Android 默认壁纸裁剪选项来设置壁纸。

我的意思是,在我的应用程序中,当我点击设置壁纸按钮时,它会要求我裁剪壁纸选项。

注意我想调用默认的内置壁纸裁剪选项。就像我们从 android 默认的 Image Gallery App 设置壁纸一样

看截图:

这是默认壁纸应用截图,我想调用它来设置我的应用壁纸

在此处输入图像描述

这就是我试过的这个代码直接设置壁纸/图像中心

// set wallpaper on button click
        Button b1 = (Button) findViewById(R.id.wll);
        b1.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v2) {
                // // TODO Auto-generated method stub

                WallpaperManager myWallpaperManager = WallpaperManager
                        .getInstance(getApplicationContext());
                try {
                    myWallpaperManager
                            .setResource(MainActivity.ICONS[curruntPosition]);
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

            }
        });

完整代码:

package com.td.gridview;

import java.io.IOException;
import android.app.Activity;
import android.app.WallpaperManager;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageView;

public class SwipeActivity extends Activity {

    protected int curruntPosition;
    protected int hh;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.swipe_view);

        // get intent data
        Intent i = getIntent();

        // Selected image id
        final int position = i.getExtras().getInt("id");

        final ViewPager viewPager = (ViewPager) findViewById(R.id.view_pager);
        ImagePagerAdapter adapter = new ImagePagerAdapter();
        viewPager.setAdapter(adapter);
        viewPager.setCurrentItem(position);
        viewPager.setOnPageChangeListener(new OnPageChangeListener() {


            @Override
            public void onPageSelected(int arg0) {
                // TODO Auto-generated method stub
                // Here you can set the wallpaper
                curruntPosition = arg0;
                if(curruntPosition==arg0){
                hh = 1;
                }
            }

            @Override
            public void onPageScrolled(int arg0, float arg1, int arg2) {
                // TODO Auto-generated method stub

            }

            @Override
            public void onPageScrollStateChanged(int arg0) {
                // TODO Auto-generated method stub

            }
        });
        //
        Button bx = (Button) findViewById(R.id.xoom);
        bx.setOnClickListener(new View.OnClickListener() {
            public void onClick(View vx) {
                // // TODO Auto-generated method stub

                if(hh==1)
                {
                    // Sending image id to FullScreenActivity
                    Intent i2 = new Intent(getApplicationContext(),
                            Full_Zoom.class);
                    // passing array index
                    i2.putExtra("id", curruntPosition);
                    startActivity(i2);
                }
                else
                {
                    // get intent data
                    Intent i3 = getIntent();

                    // Selected image id
                    int position = i3.getExtras().getInt("id");
                    // Sending image id to FullScreenActivity
                    Intent i2 = new Intent(getApplicationContext(), Full_Zoom.class);
                    // passing array index
                    i2.putExtra("id", position);
                    startActivity(i2);
                }
            }
        });
        //

        // set wallpaper on button click
        Button b1 = (Button) findViewById(R.id.wll);
        b1.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v2) {
                // // TODO Auto-generated method stub

                WallpaperManager myWallpaperManager = WallpaperManager
                        .getInstance(getApplicationContext());
                try {
                    myWallpaperManager
                            .setResource(MainActivity.ICONS[curruntPosition]);
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        });
    }

    public class ImagePagerAdapter extends PagerAdapter {
        int[] icons = MainActivity.ICONS;

        @Override
        public int getCount() {
            return icons.length;
        }

        @Override
        public boolean isViewFromObject(View view, Object object) {
            return view == ((ImageView) object);
        }

        @Override
        public Object instantiateItem(ViewGroup container, int position) {
            Context context = SwipeActivity.this;
            ImageView imageView = new ImageView(context);
            // int padding = context.getResources().getDimensionPixelSize(
            // R.dimen.padding_large);
            // imageView.setPadding(padding, padding, padding, padding);
            imageView.setScaleType(ImageView.ScaleType.FIT_CENTER);
            imageView.setImageResource(icons[position]);
            ((ViewPager) container).addView(imageView, 0);
            return imageView;
        }

        @Override
        public void destroyItem(ViewGroup container, int position, Object object) {
            ((ViewPager) container).removeView((ImageView) object);
        }
    }
}
4

1 回答 1

1

我已经实现了它的裁剪功能,这是它的代码。

只需调用 doCrop(); 在 btn 点击任何其他你需要的请告诉我。

Button b1 = (Button) findViewById(R.id.wll);
    b1.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v2) {
            // // TODO Auto-generated method stub

            WallpaperManager myWallpaperManager = WallpaperManager
                    .getInstance(getApplicationContext());
            try {
                myWallpaperManager
                        .setResource(MainActivity.ICONS[curruntPosition]);
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            doCrop();

        }
    });

    private void doCrop() {
    final ArrayList<CropOption> cropOptions=new ArrayList<CropOption>();
    /**
     * Open image crop app by starting an intent
     * ‘com.android.camera.action.CROP‘.
     */
    Intent intent = new Intent("com.android.camera.action.CROP");
    intent.setType("image/*");

    /**
     * Check if there is image cropper app installed.
     */
    List<ResolveInfo> list = getPackageManager().queryIntentActivities(intent, 0);

    int size = list.size();

    /**
     * If there is no image cropper app, display warning message
     */
    if (size == 0) {
        Toast.makeText(this,"Can not find image crop app",Toast.LENGTH_SHORT).show();
        return;
    } else {
        /**
         * Specify the image path, crop dimension and scale
         */
        intent.setData(mImageCaptureUri);

        intent.putExtra("outputX", 200);
        intent.putExtra("outputY", 200);
        intent.putExtra("aspectX", 1);
        intent.putExtra("aspectY", 1);
        intent.putExtra("scale", true);
        intent.putExtra("return-data", true);
        /**
         * There is posibility when more than one image cropper app exist,
         * so we have to check for it first. If there is only one app, open
         * then app.
         */

        if (size == 1) {
            Intent i = new Intent(intent);
            ResolveInfo res = list.get(0);
            i.setComponent(new ComponentName(res.activityInfo.packageName,res.activityInfo.name));
            startActivityForResult(i,CROP_FROM_CAMERA);
        } else {
            /**
             * If there are several app exist, create a custom chooser to
             * let user selects the app.
             */
            for (ResolveInfo res : list) {
                final CropOption co = new CropOption();

                co.title = getPackageManager().getApplicationLabel(res.activityInfo.applicationInfo);
                co.icon = getPackageManager().getApplicationIcon(res.activityInfo.applicationInfo);
                co.appIntent = new Intent(intent);

                co.appIntent.setComponent(new ComponentName(res.activityInfo.packageName,res.activityInfo.name));

                cropOptions.add(co);
            }

            CropOptionAdapter adapter = new CropOptionAdapter(getApplicationContext(), cropOptions);

            AlertDialog.Builder builder = new AlertDialog.Builder(this);
            builder.setTitle("Choose Crop App");
            builder.setAdapter(adapter,new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int item) {
                            startActivityForResult(cropOptions.get(item).appIntent,CROP_FROM_CAMERA);
                        }
                    });

            builder.setOnCancelListener(new DialogInterface.OnCancelListener() {
                @Override
                public void onCancel(DialogInterface dialog) {

                    if (mImageCaptureUri != null) {
                        getContentResolver().delete(mImageCaptureUri, null,null);
                        mImageCaptureUri = null;
                    }
                }
            });
            AlertDialog alert = builder.create();
            alert.show();
        }
    }
}

public class CropOption {
    public CharSequence title;
    public Drawable icon;
    public Intent appIntent;
}

public class CropOptionAdapter extends ArrayAdapter<CropOption> {
    private ArrayList<CropOption> mOptions;
    private LayoutInflater mInflater;

    public CropOptionAdapter(Context context, ArrayList<CropOption> options) {
        super(context, R.layout.crop_selector, options);
        mOptions = options;
        mInflater = LayoutInflater.from(context);
    }

    @Override
    public View getView(int position, View convertView, ViewGroup group) {
        if (convertView == null)
            convertView = mInflater.inflate(R.layout.crop_selector, null);

        CropOption item = mOptions.get(position);

        if (item != null) {
            ((ImageView)convertView.findViewById(R.id.iv_icon)).setImageDrawable(item.icon);
            ((TextView)convertView.findViewById(R.id.tv_name)).setText(item.title);

            return convertView;
        }
        return null;
    }
}
于 2014-07-11T09:17:17.620 回答