我找到this链接,说明如何在我的ImageButton
上制作发光效果。因此,每当用户按下ImageButton
onTouchEvent()
函数时,我都会调用setImageBitmap()
函数。问题是这个函数(setImageBitmap()
)似乎根本没有效果。
什么有效:
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;
}
}
然后在Activity I中创建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)所有与上面相同(在android中扩展一个ImageButton),但这次我调用了 fromTouchEvent()里面的setImageBitmap函数。对于这种情况,我在Pen.java中定义了setGlow函数
// 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 :(得分: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。
答案 1 :(得分:5)
你不能这样做,因为如果在onTouchEvent中放入setImageBitmap(setGlow(R.drawable.pen)),你将会内存不足。
onTouchEvent将每秒触发serval次数。您将在内存中每秒创建serval位图。在成功设置ImageBitmap之前,内存将会不足。
答案 2 :(得分:3)
我在发布时构建了项目,但它运行正常。它正确设置了位图。所以也许getGlow()方法不能很好地工作。制作一些日志如下
public Bitmap setGlow(int resourceId) {
Bitmap bm = BitmapFactory.decodeResource(getResources(),resourceId);
Log.e("tag", "Size: " + bm.getByteCount());
return bm;
}
然后检查返回是否正确。