pok*_*che 8 android bitmap bitmapimage android-drawable android-bitmap
我找到了这个链接,说明我如何在我的身上发光效果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;
}
}
Run Code Online (Sandbox Code Playgroud)
然后在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) {
......
}
Run Code Online (Sandbox Code Playgroud)
什么行不通:
1)所有与上面相同(在android中扩展一个ImageButton),但这次我从onTouchEvent()内部调用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) {
....
}
}
Run Code Online (Sandbox Code Playgroud)
然后在xml文件中我做:
.....
<com.example.testsetimagebmp.Pen
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/pen"
android:background="@drawable/pen" />
....
Run Code Online (Sandbox Code Playgroud)
最后在MainActivity中
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
// ....
}
Run Code Online (Sandbox Code Playgroud)
我认为这可能是经典的内存不足问题.如果要检查是否为真,可以尝试使用启动器图标的位图:
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) {
....
}
}
Run Code Online (Sandbox Code Playgroud)
如果这是问题,请检查此链接.
如果在onTouchEvent中放入setImageBitmap(setGlow(R.drawable.pen)),则无法执行此操作,因为内存不足.
onTouchEvent将每秒触发serval次数.您将在每秒内存中创建serval位图.在成功设置ImageBitmap之前,内存将不足.
我按照您发布的方式构建了该项目,但效果很好。它正确设置位图。所以也许 getGlow() 方法不能很好地工作。制作一些日志如下
public Bitmap setGlow(int resourceId) {
Bitmap bm = BitmapFactory.decodeResource(getResources(),resourceId);
Log.e("tag", "Size: " + bm.getByteCount());
return bm;
}
Run Code Online (Sandbox Code Playgroud)
然后检查返回是否正确。
| 归档时间: |
|
| 查看次数: |
380 次 |
| 最近记录: |