package android.widget; import java.awt.Color; import java.awt.Graphics; import java.awt.Image; import java.awt.event.FocusEvent; import java.awt.event.FocusListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import javax.swing.JComponent; import android.content.Context; import android.graphics.drawable.Drawable; import android.util.AttributeSet; import android.util.Log; import android.view.View; import static com.applang.Util.*; public class ImageView extends View { protected static final String TAG = ImageView.class.getSimpleName(); public ImageView(Context context) { super(context, null); } public ImageView(Context context, AttributeSet attrs) { super(context, attrs); } @Override protected void create() { Picture picture = new Picture(); setComponent(picture); } public Image getImage() { Picture picture = taggedComponent(); if (picture != null) return picture.getImage(); else return null; } public void setImage(Image image) { Picture picture = taggedComponent(); if (picture != null) { picture.setImage(image); imageChanged(); } } @Override public void applyAttributes() { if (attributeSet != null) { if (attributeSet.hasAttribute("android:src")) { Drawable drawable = attributeSet.getAttributeResourceItem("android:src"); if (drawable != null) { setImage(drawable.getImage()); } } } super.applyAttributes(); } private Job<JComponent> onImageChanged = null; private void imageChanged() { try { if (onImageChanged != null) onImageChanged.perform((JComponent) taggedComponent(), objects()); } catch (Exception e) { Log.e(TAG, "textChanged", e); } } public void setOnTextChanged(final Job<JComponent> onImageChanged) { this.onImageChanged = onImageChanged; } public static class Picture extends JComponent implements MouseListener, FocusListener { private Image image = null; public Image getImage() { return image; } public void setImage(Image image) { this.image = image; } public Picture() { setFocusable(true); addMouseListener(this); addFocusListener(this); } public void mouseClicked(MouseEvent e) { requestFocusInWindow(); } public void mouseEntered(MouseEvent e) { } public void mouseExited(MouseEvent e) { } public void mousePressed(MouseEvent e) { } public void mouseReleased(MouseEvent e) { } public void focusGained(FocusEvent e) { this.repaint(); } public void focusLost(FocusEvent e) { this.repaint(); } protected void paintComponent(Graphics graphics) { Graphics g = graphics.create(); g.setColor(Color.WHITE); g.fillRect(0, 0, image == null ? 125 : image.getWidth(this), image == null ? 125 : image.getHeight(this)); if (image != null) { g.drawImage(image, 0, 0, this); } if (isFocusOwner()) { g.setColor(Color.RED); } else { g.setColor(Color.BLACK); } g.drawRect(0, 0, image == null ? 125 : image.getWidth(this), image == null ? 125 : image.getHeight(this)); g.dispose(); } } }