2013-12-14 1 views
0

사용자가 설치 한 응용 프로그램의 listView가 있습니다. 각 목록 항목에는 끝에 응용 프로그램 이름, 패키지 이름, 아이콘 및 체크 상자가 있습니다. 확인란을 선택하면 listView 항목에서 애플리케이션 아이콘을 가져 오려면 (예 : '뉴스'의 애플리케이션을 선택하면 '뉴스'애플리케이션 아이콘이 표시됨) 비트 맵으로 바뀝니다.체크 상자의 onClick 메서드는 아이콘을 비트 맵으로 변환합니다.

이 같은 필요한 정보를로드하고 있습니다 :

/ load controls from layout resources 
    ImageView ivAppIcon = (ImageView) v.findViewById(R.id.ivIcon); 
    TextView tvAppName = (TextView) v.findViewById(R.id.tvName); 
    TextView tvPkgName = (TextView) v.findViewById(R.id.tvPack); 
    final CheckBox addCheckbox = (CheckBox) v 
      .findViewById(R.id.addCheckbox); 
    Log.d("AppInfoAdapter", "Controls from layout Resources Loaded"); 

    // set data to display 
    ivAppIcon.setImageDrawable(entry.loadIcon(mPackManager)); 
    tvAppName.setText(entry.activityInfo.loadLabel(mPackManager)); 
    tvPkgName.setText(entry.activityInfo.packageName); 

    Log.d("AppInfoAdapter", "Data Set To Display"); 

나는 이미 한 가지 방법을 시도했다, 그러나 나는 그것이 내가 생각하는 방법을 작동하지 않는 것을 의심하고, 그래서 내가 원하는 두 번째 의견.

addCheckbox 
      .setOnClickListener(new View.OnClickListener() { 

       @Override 
       public void onClick(View v) { 
        if (addCheckbox.isChecked()) { 
         System.out.println("Checked"); 
         PackageManager pm = mContext.getPackageManager(); 
         Drawable icon = null; 
         try { 
          icon = pm 
          .getApplicationIcon(entry.activityInfo.packageName); 
         } catch (NameNotFoundException e) { 
          // TODO Auto-generated catch block 
          e.printStackTrace(); 
         } 
         Drawable default_icon = pm.getDefaultActivityIcon(); 
         if (icon instanceof BitmapDrawable 
           && default_icon instanceof BitmapDrawable) { 
          BitmapDrawable icon_bd = (BitmapDrawable) icon; 
          Bitmap icon_b = icon_bd.getBitmap(); 
          BitmapDrawable default_bd = (BitmapDrawable) pm 
            .getDefaultActivityIcon(); 
          Bitmap default_b = default_bd.getBitmap(); 
          if (icon_b == default_b) { 
           // It's the default icon 
           scaleDownBitmap(default_b, 100, v.getContext()); 
           Log.d("AppInfoAdapter", "Scale Bitmap Chosen"); 

을하지만 그것에 대해 생각 후에, 나는이?

if (addCheckbox.isChecked()) { 
         System.out.println("Checked"); 
         ImageView imgV = (ImageView) findViewById(R.id.ivIcon); 
         imgV.buildDrawingCache(); 
         Bitmap default_b = imgV.getDrawingCache(); 
           // It's the default icon 
           scaleDownBitmap(default_b, 100, v.getContext()); 
           Log.d("AppInfoAdapter", "Scale Bitmap Chosen"); 

또는이 같은도 뭔가 같이 할 수 있습니다 :

if (addCheckbox.isChecked()) { 
         System.out.println("Checked"); 
         Bitmap default_b = ((BitmapDrawable)ivAppIcon.getDrawable()).getBitmap(); 
           // It's the default icon 
           scaleDownBitmap(default_b, 100, v.getContext()); 
           Log.d("AppInfoAdapter", "Scale Bitmap Chosen"); 

I를 여기에 내가 현재하고있는 무슨이다 이를 수행하는 방법에 대한 두 번째 의견이 필요합니다. 도와주세요!

답변

0

드로어 블 비트 맵 변환에 문제가 있다고 생각합니까? 나는 (아직) 의견을 게시하고 이것을 묻지 않습니다. 그러므로 나는 완전한 대답의 위험을 무릅 쓸 것이다.

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    final int DEST_IMAGE_WIDH = 100; 
    final int DEST_IMAGE_HEIGHT = 100; 
    PackageManager   pm = getPackageManager(); 
    ApplicationInfo  appInfo = getApplicationInfo(); 
    Drawable   appIcon = pm.getApplicationIcon(appInfo); 
    Bitmap    appBmp = Bitmap.createBitmap(
       DEST_IMAGE_WIDH 
      , DEST_IMAGE_HEIGHT 
      , Config.ARGB_8888 
      ); 
    // Creates a new canvas based on the image specifications 
    // create just above. 
    Canvas canvas    = new Canvas(appBmp); 
    // (optional) Fills the entire canvas 
    canvas.drawColor(Color.WHITE); 
    // You need to set bounds otherwise a 0,0 sized image would be draw. 
    appIcon.setBounds(0, 0, DEST_IMAGE_WIDH, DEST_IMAGE_HEIGHT); 
    appIcon.draw(canvas); 

    /// Let's save to a .jpg file ... 
    File file = new File(getFilesDir().getAbsolutePath() + "/test2.jpg"); 
    FileOutputStream out; 
    try 
    { 
     file.createNewFile(); 
     out = new FileOutputStream(file); 
     appBmp.compress(Bitmap.CompressFormat.JPEG, 80, out); 
     out.close(); 

     // Load back the image file to confirms it works 
     Bitmap bitmap = BitmapFactory.decodeFile(file.getAbsolutePath()); 
     ImageView imageView1 = (ImageView)findViewById(R.id.imageView1); 
     imageView1.setImageBitmap(bitmap);    
    } 
    catch (FileNotFoundException e1) 
    { 
     // TODO Auto-generated catch block 
     e1.printStackTrace(); 
    } 
    catch (IOException e2) 
    { 
     // TODO Auto-generated catch block 
     e2.printStackTrace();   
    } 
} 
+0

예, 그게 문제였습니다. 그러나, 나는 완전히 대답하려고 애를 썼다. 왜냐하면 그것은 내가 완전히하려고하는 것을 통과하는데 도움이 되었기 때문이다 (유일한 차이점은 다른 클래스의 스트림에서 비트 맵을 얻는다는 것이다). 내일까지이 내용을 테스트 할 수 없으므로 계속 업데이트 해 드리겠습니다. 다시 한번 감사드립니다. :) – user2909006

관련 문제