Android рисует изображение при нажатии кнопки - PullRequest
1 голос
/ 21 июля 2011

В основном, у меня есть кнопка, при нажатии на которую изображение будет отображаться в произвольной координате.

Вот мой код:

public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        //mDrawable = getResources().getDrawable(R.drawable.icon);
        Log.i("Info", "Resource got !!");

        mBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.icon);
        mCanvas = new Canvas();
        invoker = (Button) findViewById (R.id.invoke);
        invoker.setOnClickListener(this);
    }

public void onClick(View v) {
        if (v.getId() == R.id.invoke) {
            Log.i("Info", "Button Clicked !!");
            Display d = getWindowManager().getDefaultDisplay();
            Log.i("Info", "Returning window Info !!");
            // TODO Auto-generated method stub
            xPos = randInt.nextInt(d.getWidth());
            yPos = randInt.nextInt(d.getHeight() - invoker.getHeight())+ invoker.getHeight();
            Log.i("Info", "Coord got !!, xPos = "+xPos+", yPos = "+yPos);

            mCanvas.drawBitmap(mBitmap, yPos, xPos, null);
            Log.i ("Info", "Image drawn at ("+xPos+", "+yPos+")");
        }
    }

Вот проблема. Всякий раз, когда я нажимал на кнопку, изображение рисовалось, но его нигде не было видно ... при нажатии кнопки изображение не отображается на экране ...

Пожалуйста, укажите мою ошибку ?? THX

примечание: нет ошибки в моем LogCat

1 Ответ

1 голос
/ 21 июля 2011

То, что вы создали холст, не означает, что оно связано с чем-либо на дисплее, этот холст - это просто виртуальная поверхность рисования, как вы это делали.

Есть несколько способов сделать это, самый простой из них, вероятно, просто создать собственное представление, переопределить метод onDraw и затем отобразить там свое растровое изображение.

Добавьте ваш собственный вид в макет с помощью fill_parent для высоты и ширины

Когда ваша кнопка нажата, просто установите ваш x / y для изображения и сделайте вид недействительным

Обновление

Хорошо, вот пользовательский вид. Это становится вашей поверхностью рисования для вашего изображения, вставьте его в основной макет, если хотите, сделайте его полноэкранным (если вы используете RelativeLayout, вы также можете добавлять другие виды, кнопки и т. Д. В любом месте). Вы хотите)

Расширьте его, поместив код для рисования в соответствующий блок if /. Затем получите пользовательский класс, используя findviewbyid, как вы делаете это для кнопки.

Теперь, когда вы хотите нарисовать свое изображение на основе нажатия кнопки, вызовите методы в экземпляре пользовательского представления. Это один из тривиальных способов сделать это в любом случае.

Вы также можете расширить класс макета (независимо от того, что вы используете в main) и делать то же самое, не добавляя дочерний вид.

public class myView extends View {

    private boolean imageShow = false; 
    private int x = 0;
    private int y = 0;

    public myView(Context context, AttributeSet attrs, int defStyle) { 
        super(context, attrs, defStyle);

    }
    public myView(Context context) { this(context,null,0); }
    public myView(Context context, AttributeSet attrs) { this(context, attrs,0); }

    public void drawImageRandom()
    {
        imageShow = true; 
        invalidate(); 

    }

    public void hideImage()
    {
        imageShow = false; 
        invalidate(); 
    }

    @Override 
    public void onDraw(Canvas canvas)
    {
        super.onDraw(canvas);
        if (imageShow) {

            // do your drawing code in here 
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...