У меня есть listView из установленных пользователями приложений. В каждом элементе списка он имеет имя приложения, имя пакета, значок и флажок в конце. Когда флажок установлен, я хочу, чтобы он взял значок приложения из этого элемента listView (т. Е., Если проверено приложение для «Новости», оно примет значок приложения «Новости»), а затем превратит его в растровое изображение.onClick метод checkbox превращает значок в растровое изображение
Пожалуйста, обратите внимание, что я загружая необходимую информацию, как это:
/ 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 нужно второе мнение о путях этого. Пожалуйста помоги!
Да, это была проблема, с которой я столкнулся (ну ... ее часть). Тем не менее, я действительно подтверждаю полный ответ, потому что это помогло мне преодолеть то, что я полностью пытаюсь сделать (единственное отличие состоит в том, что я получаю растровое изображение из потока в другом классе). Я не смогу проверить это до завтра, поэтому я буду держать вас в курсе. Еще раз спасибо! :) – user2909006