我有一个用户安装的应用程序的列表视图。在每个列表项中,它都有应用程序名称、包名称、图标和末尾的复选框。当复选框被选中时,我希望它从该 listView 项目中获取应用程序图标(即,如果选中“新闻”应用程序,它将获取“新闻”应用程序的图标),然后将其转换为位图。
请注意,我正在加载这样的必要信息:
/ 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");
我需要关于如何做到这一点的第二意见。请帮忙!