Создание растрового изображения кликабельным с помощью холста - PullRequest
2 голосов
/ 25 мая 2011

Надеюсь, это последний шаг в завершении моего приложения.Мне нужно сделать растровое изображение внутри холста, кликабельное, которое будет вызывать новое действие, которое будет воспроизводить видео (mp4), или в рамках текущего действия воспроизводить видео.

Класс, который отображает холст и растровые изображения, - это класс, который я использую снова и снова для отображения полного изображения миниатюры.Идентификатор изображения передается через намерение.Вот код для работы с полным изображением (я очень нуб и собрал свой код по одному шагу за раз, используя этот сайт и другие, поэтому я извиняюсь, если он не чистый):

public class full_image extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(new BitmapView(this));
    getWindow().setBackgroundDrawableResource(R.drawable.bground);
    getWindow().setWindowAnimations(0);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,                           WindowManager.LayoutParams.FLAG_FULLSCREEN);
    }

class BitmapView extends View {
    public BitmapView(Context context) {
        super(context);
    }

    @Override
    public void onDraw(Canvas canvas) {
        int imgid = getIntent().getIntExtra("Full",0);
        Bitmap fullimage = BitmapFactory.decodeResource(getResources(),imgid);
        Bitmap playButton = BitmapFactory.decodeResource(getResources(), R.drawable.bt_play); //Added for Video
        Display display = getWindowManager().getDefaultDisplay();
        int fpWidth = fullimage.getWidth();
        int fpHeight = fullimage.getHeight();
        int playWidth = playButton.getWidth(); 
        int playHeight = playButton.getHeight(); 
        int screenWidth = display.getWidth();
        int screenHeight = display.getHeight();
        int leftPoint = screenWidth/2 - fpWidth/2;
        int topPoint = screenHeight/2 - fpHeight/2;
        int leftPlayPoint = screenWidth/2 - playWidth/2; 
        int topPlayPoint = screenHeight/2 - playHeight/2; 
        canvas.drawBitmap(fullimage,leftPoint,topPoint,null);
        canvas.drawBitmap(playButton,leftPlayPoint,topPlayPoint,null); 

    }
}  
}

Если возможно, я бы хотел, чтобы только playButton содержал onClickListener, но если это проще, я в порядке, чтобы сделать весь холст кликабельным (если это вообще возможно).

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

Спасибо, J

Дополнительные материалы:

вот фрагмент кодаЯ нашел в другом вопросе.Где бы я поместил этот код в код, указанный выше.

public boolean onTouchEvent(MotionEvent event){
int action = event.getAction();
int x = event.getX()  // or getRawX();
int y = event.getY();

switch(action){
case MotionEvent.ACTION_DOWN:
    if (x >= xOfYourBitmap && x < (xOfYourBitmap + yourBitmap.getWidth())
            && y >= yOfYourBitmap && y < (yOfYourBitmap + yourBitmap.getHeight())) {
        //tada, if this is true, you've started your click inside your bitmap
    }
    break;
}

}

1 Ответ

5 голосов
/ 25 мая 2011

Я думаю, что мы не можем установить OnClick на растровое изображение на холсте. Но мы можем использовать для этого метод onTouch. и проверьте касание на растровом изображении или не используйте x-y позицию касания.

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

if (x >= xOfYourBitmap && x < (xOfYourBitmap + yourBitmap.getWidth())
                && y >= yOfYourBitmap && y < (yOfYourBitmap + yourBitmap.getHeight())) {
            //tada, if this is true, you've started your click inside your bitmap
        }
...