为什么setImageBitmap对自定义ImageButton没有影响?

pok*_*che 8 android bitmap bitmapimage android-drawable android-bitmap

我找到了这个链接,说明我如何在我的身上发光效果ImageButton.因此,只要用户按下ImageButtononTouchEvent()功能被称为有我所说的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)

job*_*ert 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) {
       ....
    }
}
Run Code Online (Sandbox Code Playgroud)

如果这是问题,请检查此链接.


tin*_*ght 5

如果在onTouchEvent中放入setImageBitmap(setGlow(R.drawable.pen)),则无法执行此操作,因为内存不足.

onTouchEvent将每秒触发serval次数.您将在每秒内存中创建serval位图.在成功设置ImageBitmap之前,内存将不足.


zz-*_*z-m 3

我按照您发布的方式构建了该项目,但效果很好。它正确设置位图。所以也许 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)

然后检查返回是否正确。