为什么 setImageBitmap 对自定义 ImageButton 没有影响?
Why does setImageBitmap has no effect on custom ImageButton?
我发现 this link 说明了如何在我的 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 中创建 Pen
(自定义 ImageButton
)实例,定义 setGlow()
并从 Pen
的实例调用 setImageBitmap()
.
//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),但这次我调用
onTouchEvent() 内部的 setImageBitmap 函数。对于这种情况,我在内部定义了 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);
}
// ....
}
我按照您的方式构建了项目 post,但它运行良好。它正确设置位图。所以也许 getGlow() 方法效果不佳。制作一些日志如下
public Bitmap setGlow(int resourceId) {
Bitmap bm = BitmapFactory.decodeResource(getResources(),resourceId);
Log.e("tag", "Size: " + bm.getByteCount());
return bm;
}
然后检查return是否正确。
我认为这可能是典型的内存不足问题。如果你想检查是否属实,你可以尝试使用启动器图标的位图:
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。
你不能那样做,因为如果你把 setImageBitmap(setGlow(R.drawable.pen)) 放在 onTouchEvent 中,你会内存不足。
onTouchEvent 将被触发 serval 次 second.And 您将在内存中创建 serval 位图 per second.It 将在您成功设置 ImageBitmap 之前内存不足。
我发现 this link 说明了如何在我的 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 中创建 Pen
(自定义 ImageButton
)实例,定义 setGlow()
并从 Pen
的实例调用 setImageBitmap()
.
//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),但这次我调用 onTouchEvent() 内部的 setImageBitmap 函数。对于这种情况,我在内部定义了 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);
}
// ....
}
我按照您的方式构建了项目 post,但它运行良好。它正确设置位图。所以也许 getGlow() 方法效果不佳。制作一些日志如下
public Bitmap setGlow(int resourceId) {
Bitmap bm = BitmapFactory.decodeResource(getResources(),resourceId);
Log.e("tag", "Size: " + bm.getByteCount());
return bm;
}
然后检查return是否正确。
我认为这可能是典型的内存不足问题。如果你想检查是否属实,你可以尝试使用启动器图标的位图:
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。
你不能那样做,因为如果你把 setImageBitmap(setGlow(R.drawable.pen)) 放在 onTouchEvent 中,你会内存不足。
onTouchEvent 将被触发 serval 次 second.And 您将在内存中创建 serval 位图 per second.It 将在您成功设置 ImageBitmap 之前内存不足。