2013-02-27 2 views
1

Я делаю рабочий стол и получаю значок приложения. Но он становится туманным, чем оригинальный рабочий стол. Я не знаю почему. Размер значка тот же. Расположение:Обои для рабочего стола Android постепенно становятся неопределенными

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:gravity="center" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:paddingTop="15dip"> 

    <ImageView 
    android:id="@+id/appIcon" 
    android:layout_gravity="center" 
    android:layout_width="40dip" 
    android:layout_height="40dip"/> 

    <TextView 
    android:id="@+id/appName" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:ellipsize="marquee" 
    android:textColor="#FFFF" 
    android:maxLines="1" 
    android:fadingEdge="horizontal" 
    android:gravity="center" 
    android:paddingTop="10dip" 
    android:paddingBottom="10dip"/> 

</LinearLayout> 

Получить приложение Код:

final PackageManager packageManager = getPackageManager(); 
     final Intent mainIntent = new Intent(Intent.ACTION_MAIN, null); 
     mainIntent.addCategory(Intent.CATEGORY_LAUNCHER); 

     //get all apps 
     final List<ResolveInfo> apps = packageManager.queryIntentActivities(mainIntent, 0); 

     GridView appPage = (GridView) findViewById(R.id.all_app_grid); 
     appPage.setAdapter(new AppAdapter(this, apps)); 

И я получаю код значок приложения от монитора:

Bitmap bmp = Utilities.createIconBitmap(appInfo.loadIcon(pm), mContext);   
appItem.mAppIcon.setImageDrawable(appInfo.loadIcon(pm)); 
static Bitmap createIconBitmap(Drawable icon, Context context) { 
synchronized (sCanvas) { // we share the statics :-(
if (sIconWidth == -1) { 
initStatics(context); 
} 

     int width = sIconWidth; 
     int height = sIconHeight; 

     if (icon instanceof PaintDrawable) { 
      PaintDrawable painter = (PaintDrawable) icon; 
      painter.setIntrinsicWidth(width); 
      painter.setIntrinsicHeight(height); 
     } else if (icon instanceof BitmapDrawable) { 
      // Ensure the bitmap has a density. 
      BitmapDrawable bitmapDrawable = (BitmapDrawable) icon; 
      Bitmap bitmap = bitmapDrawable.getBitmap(); 
      if (bitmap.getDensity() == Bitmap.DENSITY_NONE) { 
       bitmapDrawable.setTargetDensity(context.getResources().getDisplayMetrics()); 
      } 
     } 
     int sourceWidth = icon.getIntrinsicWidth(); 
     int sourceHeight = icon.getIntrinsicHeight(); 

     if (sourceWidth > 0 && sourceHeight > 0) { 
      // There are intrinsic sizes. 
      if (width < sourceWidth || height < sourceHeight) { 
       // It's too big, scale it down. 
       final float ratio = (float) sourceWidth/sourceHeight; 
       if (sourceWidth > sourceHeight) { 
        height = (int) (width/ratio); 
       } else if (sourceHeight > sourceWidth) { 
        width = (int) (height * ratio); 
       } 
      } else if (sourceWidth < width && sourceHeight < height) { 
       // Don't scale up the icon 
       width = sourceWidth; 
       height = sourceHeight; 
      } 
     } 

     // no intrinsic size --> use default size 
     int textureWidth = sIconTextureWidth; 
     int textureHeight = sIconTextureHeight; 

     final Bitmap bitmap = Bitmap.createBitmap(textureWidth, textureHeight, 
       Bitmap.Config.ARGB_8888); 
     final Canvas canvas = sCanvas; 
     canvas.setBitmap(bitmap); 

     final int left = (textureWidth-width)/2; 
     final int top = (textureHeight-height)/2; 

     if (false) { 
      // draw a big box for the icon for debugging 
      canvas.drawColor(sColors[sColorIndex]); 
      if (++sColorIndex >= sColors.length) sColorIndex = 0; 
      Paint debugPaint = new Paint(); 
      debugPaint.setColor(0xffcccc00); 
      canvas.drawRect(left, top, left+width, top+height, debugPaint); 
     } 

     sOldBounds.set(icon.getBounds()); 
     icon.setBounds(left, top, left+width, top+height); 
     icon.draw(canvas); 
     icon.setBounds(sOldBounds); 
     canvas.setBitmap(null); 

     return bitmap; 
    } 
} 

ответ

0

используют это, чтобы проверить, если плотность экрана справа: context.getResources(). GetDisplayMetrics(). Плотность;

Если нет, установите манифест вашего рабочего стола, сделайте свой андроид: targetSdkVersion больше, чем 4. тогда плотность экрана будет правильной.

Смежные вопросы