8

Я нашел ссылку this, в которой говорится, как я мог бы сделать эффект свечения на моем ImageButton. Поэтому всякий раз, когда пользователь нажимает ImageButton, вызывается функция onTouchEvent() и там я вызываю функцию setImageBitmap(). Проблема в том, что эта функция (setImageBitmap()), похоже, не имеет никакого эффекта.Почему setImageBitmap не влияет на пользовательский ImageButton?

Что работает:

1) До сих пор я продлил ImageButton ниже

// Pen.java 
public class Pen extends ImageButton { 
    public Pen(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    @Override 
    public boolean onTouchEvent(MotionEvent event) { 
     System.out.println("Now I am setting Pen"); 
     return true; 
    } 


} 

Тогда внутри деятельности создать Pen (пользовательские ImageButton) экземпляра, определить setGlow() и вызвать setImageBitmap() из экземпляра Pen.

//MainActivity.java

public class MainActivity extends Activity { 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     Pen myImgbutton; 
     myImgbutton = (Pen) findViewById(R.id.pen); 

     myImgbutton.setImageBitmap(setGlow(R.drawable.pen)); 

    } 
} 

public Bitmap setGlow(int resourceId) { 
     ...... 
} 

Что не работает:

1) Все же, как и выше (расширяя ImageButton в андроиде), но на этот раз я вызываю функцию setImageBitmap изнутри onTouchEvent(). В этом случае я должен определить функцию setGlow в внутри Pen.java

// Pen.java 
public class Pen extends ImageButton { 
    public Pen(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    @Override 
    public boolean onTouchEvent(MotionEvent event) { 
     System.out.println("Now I am setting Pen"); 
     // Here I say to apply the glow effect to the image 
     setImageBitmap(setGlow(R.drawable.pen)); 
     return true; 
    } 

    public Bitmap setGlow(int resourceId) { 
     .... 
    } 
} 

Затем в XML-файле я:

..... 

    <com.example.testsetimagebmp.Pen 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/pen" 
     android:background="@drawable/pen" /> 

    .... 

Наконец в MainActivity

public class MainActivity extends Activity { 


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

Вызывается ли 'onTouchEvent'? – shhp

+0

@shhp Да, это – pokche

+0

Вы имеете в виду, если вы вызываете 'setImageBitmap' в' MainActivity', он работает. Однако это не работает в 'onTouchEvent'? – shhp

ответ

3

Я построил проект, как вы но он отлично работает. Он правильно устанавливает растровое изображение. Поэтому, возможно, метод getGlow() не работает. Сделайте несколько журналов ниже:

public Bitmap setGlow(int resourceId) { 
    Bitmap bm = BitmapFactory.decodeResource(getResources(),resourceId); 
    Log.e("tag", "Size: " + bm.getByteCount()); 
    return bm; 
} 

затем проверьте правильность возврата.

+0

Да Это сработало для меня тоже .. автоматически ..но проблема по-прежнему сохраняется с моим оригинальным проектом ... вопрос был немой версией моего проекта, хотя – pokche

+0

В исходном проекте у меня есть группа просмотра, которая содержит [viewgroup1 и canvas]. Viewgroup1 содержит кнопку buttonImage (pen), которая хотела бы светиться, когда пользователь прикасается к кнопке – pokche

5

Я думаю, что это может быть классическая проблема с памятью. Вы можете попробовать использовать растровое изображение значка программы запуска, если вы хотите, чтобы проверить, правда ли это:

public class Pen extends ImageButton { 
    public Pen(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    @Override 
    public boolean onTouchEvent(MotionEvent event) { 
     System.out.println("Now I am setting Pen"); 
     // Here I say to apply the glow effect to the image 
     setImageBitmap(setGlow(R.mipmap.ic_launcher)); 
     return true; 
    } 

    public Bitmap setGlow(int resourceId) { 
     .... 
    } 
} 

Если это проверка проблема это link.

+0

. Я не уверен, что это проблема с памятью, так как у меня это получается (исключение e) { \t // TODO Автогенерируемый блок catch \t e.printStackTrace(); \t} – pokche

+0

Вы проверили журналы adb? – jobbert

5

Вы не можете этого сделать, потому что вы потеряете память, если вы поместите setImageBitmap (setGlow (R.drawable.pen)) в onTouchEvent.

onTouchEvent будет запускаться с сервалов раз в секунду. И вы создадите растровые изображения сервалов в секунду в секунду. Это приведет к выходу из памяти до того, как вы установите SetImageBitmap успешно.

+0

, чтобы этого не случилось. Я попытался создать статическую логическую переменную и инициализировал ее в true и изменил переменную на false после вызова setImageBitmap() – pokche

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