0

私はAndroid開発に不慣れです。次のコードを使用して、すべてのホーム画面に壁紙を設定しています。このコードでは、最初にホーム画面の可用性番号を入力するようにユーザーに求めます。

3つのホーム画面があることをユーザーが入力すると、SDカードから3つの壁紙を選択するように求められます。その3つの画像を取得し、デバイスのデフォルトの画面サイズに変更して、そのビットマップ画像を組み合わせてホーム画面として設定します。壁紙。

  public void onCreate(Bundle savedInstanceState) {
         Display display = getWindowManager().getDefaultDisplay();
    dwidth = display.getWidth();
    dheight = display.getHeight();
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main1);          
    Log.i("WALLPAPER", "" + dwidth);
    Log.i("WALLPAPER", "" + dheight);
    width1 = dwidth;
    height1 = dheight;
    scno = (EditText) findViewById(R.id.screenno);
    image = (ImageView) findViewById(R.id.imageview1);
    wallpaper=(Button) findViewById(R.id.setwallpaper);
    selectimage = (Button) findViewById(R.id.selectimg);
    selectimage.setVisibility(View.VISIBLE);
    selectimage.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            if(scno.getText().toString().length()<=0){
        Toast.makeText(getApplicationContext(),"Enter The number Of Screen",Toast.LENGTH_LONG).show();
            }
            else{
            nmscreen = scno.getText().toString();               
            noofscreen = Integer.parseInt(nmscreen);            
            Log.i("WALLPAPERDEMO", "" + noofscreen);                
            Intent intent1=new Intent();
            intent1.setType("image/*");
            intent1.setAction(Intent.ACTION_GET_CONTENT);
            startActivityForResult(Intent.createChooser(intent1, "Complete action using"), PICK_FROM_FILE);             
            }
        }
    });

    wallpaper.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            if(scno.getText().toString().length()<=0){
                Toast.makeText(getApplicationContext(),"Enter The Number Of Screen",Toast.LENGTH_LONG).show();
            }
            else{
            WallpaperManager mywallpapermanager=WallpaperManager.getInstance(getApplicationContext());

            try{
                mywallpapermanager.setBitmap(change);
                selectimage.setEnabled(true);

            }catch (IOException e) {
                // TODO: handle exception
                e.printStackTrace();
            }
            image.setImageBitmap(null);
            scno.setText("");
        }
        }

    });
}

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (resultCode != RESULT_OK)return;
    Log.d("WALLPAPERDEMO", "Count: " + count);
    switch (requestCode) {
        case PICK_FROM_FILE:
            mImageCaptureUri = data.getData();
            Log.i("WALLPAPERDEMO","Calling doCrop() "+mImageCaptureUri.toString());
            doCrop();
            break;
        case CROP_FROM_CAMERA:          
            Bundle extras = data.getExtras();
            if (extras != null) {               
                photo = extras.getParcelable("data");               
                Log.d("WALLPAPERDEMO",""+photo.getWidth());                 
                Log.d("WALLPAPERDEMO",""+photo.getWidth());
                bitmapArray.add(photo);
                 count++;
                 Log.d("WALLPAPERDEMO","Count"+count);
                 if(count<noofscreen){
                        Log.d("WALLPAPERDEMO","Outside Switch"+count);
                        Intent intent1=new Intent();
                        intent1.setType("image/*");
                    intent1.setAction(Intent.ACTION_GET_CONTENT);
                        startActivityForResult(Intent.createChooser(intent1, "Complete action using"), PICK_FROM_FILE);
                 }else{
                     firstimage = new Bitmap[count];
                        for (i = 0; i <count; i++) {
                            firstimage[i] = bitmapArray.get(i);
                        }
                        setImage(firstimage);
                        selectimage.setEnabled(false);
                 }
                File f = new File(mImageCaptureUri.getPath());            
                if (f.exists()) f.delete();
                break;
        }           
    }               
}       

private void setImage(Bitmap[] firstimage) {

    change = Bitmap.createScaledBitmap(firstimage[0], width1, height1, true);
    for(int i=1;i<firstimage.length;i++){
            Log.d("WALLPAPERDEMO", "" + firstimage[i].getWidth());
            Log.d("WALLPAPERDEMO", "change " + change.getWidth());
            change1 = Bitmap.createScaledBitmap(firstimage[i], width1, height1, true);
            Log.d("WALLPAPERDEMO", "change1 " + change1.getWidth());
            change = combineImages(change, change1);
            Log.d("WALLPAPERDEMO", ""+change.getWidth());
    }

    image.setImageBitmap(change);

}

public Bitmap combineImages(Bitmap change1, Bitmap change) {
    Bitmap cs = null;
    int width, height = 0;

    if (change1.getWidth() > change.getWidth()) {
        width = change1.getWidth() + change.getWidth();
        height = change1.getHeight();
    } else {
        width = change.getWidth() + change1.getWidth();
        height = change.getHeight();
    }
    cs = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);

    Canvas comboImage = new Canvas(cs);

    comboImage.drawBitmap(change, 0f, 0f, null);
    comboImage.drawBitmap(change1, change.getWidth(), 0f, null);
    return cs;

}

私はこのアプリケーションを実行し、実際のデバイスでいくつかのデバイスが完全に機能しているかどうかを確認します。ただし、一部のデバイスでは、画面サイズが適合していません。私のコードの問題は何ですか。デバイスのデフォルトの画面サイズを取得しています。画像を結合するために、選択したビットマップ画像をデフォルトの画面サイズに変更してから、画像を結合して壁紙として設定するだけです。

すべてのホーム画面に壁紙を設定するのを手伝ってください。前もって感謝します。

4

1 に答える 1

0

特大画面は 960dp x 720dp 以上 大画面は 640dp x 480dp 以上 通常の画面は 470dp x 320dp 以上 小画面は 426dp x 320dp 以上

リソースをこのフォルダーに保存します。

于 2012-07-03T07:01:07.377 に答える