Как переместить изображение в право получить активность в Android? - PullRequest
3 голосов
/ 10 марта 2012

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

Я использовал код imageView как:

   (ImageView)findViewById(R.id.slide) //event for move right here

     Intent it = new Intent(Slide.this,NextActivity.class);
     startActivity(it);  

Пожалуйста, помогите мне любым телом ...

Ответы [ 3 ]

4 голосов
/ 10 марта 2012

Итак, если я вас правильно понял, вы хотите переместить ImageView по экрану, перетащить его, а когда вы попадаете в определенное место, вы хотите начать другое занятие?

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

Просто добавьте onTouchListener к изображению, которое вы пытаетесь скользить (перемещать / перетаскивать)

yourSlideImageViewObject.setOnTouchListener(new View.OnTouchListener() 
{
          @Override
          public boolean onTouch(View v, MotionEvent event) 
          {
                onSlideTouch(v, event);
                return false;
          }
});

Затем добавьте этот код для обработки событий касания

public void onSlideTouch( View view, MotionEvent event )
{
    //When the user pushes down on an ImageView
    if ( event.getAction() == MotionEvent.ACTION_DOWN )
    {
       inDragMode = true; //Set a variable so we know we started draggin the imageView
       //Set the selected ImageView X and Y exact position
       selectedImageViewX = Math.abs((int)event.getRawX()-((ImageView)view).getLeft());
       selectedImageViewY = Math.abs((int)event.getRawY()-((ImageView)view).getTop());
       //Bring the imageView in front
       ((ImageView)view).bringToFront();
    }

    //When the user let's the ImageView go (raises finger)
    if ( event.getAction() == MotionEvent.ACTION_UP )
    {
       inDragMode = false; //Reset the variable which let's us know we're not in drag mode anymore
    }

    //When the user keeps his finger on te screen and drags it (slides it)
    if ( event.getAction() == MotionEvent.ACTION_MOVE )
    {
        //If we've started draggin the imageView
        if ( inDragMode )
        {
            //Get the imageView object
            ImageView slide = (ImageView)findViewById(R.id.slide);
            //Get a parameters object (THIS EXAMPLE IS FOR A RELATIVE LAYOUT)
            RelativeLayout.LayoutParams params = RelativeLayout.LayoutParams)slide.getLayoutParams();
            //Change the position of the imageview accordingly
            params.setMargins((int)event.getRawX()-selectedImageViewX, (int)event.getRawY()-selectedImageViewY, 0, 0);
            //Set the new params
            slide.setLayoutParams(params);

            //If we hit a limit with our imageView position
            if( slideImageView_position is inside an interval )
            {
                //Open another activity
                Intent it = new Intent(Slide.this,NextActivity.class);
                startActivity(it);
            }
        }
    }

}

Приведенное выше должно перетащить ваше изображение через экран.

Вы можететакже реализовать в событии MotionEvent.ACTION_MOVE .... чтобы ограничить перемещение ImageView по экрану.Поэтому проверьте новые координаты пальца по экрану и убедитесь, что они выходят за пределы.Если так, то ничего не делай.Если они не выходят за пределы, измените левое и верхнее поля ImaveView.

Кроме того, в событии MotionEvent.ACTION_UP проверьте, не превышает ли левое поле ImaveView предопределенный предел (что означает, что пользователь переместил imageView над вашей предполагаемой позицией).Если это так, вы можете продолжать делать все, что вы хотите, что означает начало деятельности.ИЛИ, если вы не хотите открывать действие во время перетаскивания пользователя, не только после того, как он убрал палец из imageView, то просто сделайте это, если () я написал в событии MotionEvent.ACTION_MOVE.Вставьте туда нужный интервал, чтобы при перетаскивании изображения в этот интервал началось действие.

Если вы в замешательстве, пожалуйста, спросите :) Здесь очень поздно, и я устал, поэтому, возможно, я не объяснил это должным образом: D

0 голосов
/ 10 марта 2012

Я не совсем понимаю ваш вопрос, но я понимаю, что вы хотите вставить ImageView, содержащий действие, в другое действие.

Если бы это было так, я бы фактически преобразовал эти действия вФрагменты, а затем использовать ViewPager.Вот хороший пост в блоге разработчиков Google, который представляет эту концепцию: http://android -developers.blogspot.com / 2011/08 / горизонтальный просмотр-просмотр-с-viewpager.html

Вы захотите реализовать FragmentPagerAdapter, где getCount - это количество страниц, между которыми пользователь может пролистать.Затем getItem должен вернуть Fragment, содержащий первый ImageView для позиции 0, и Fragment, содержащий то, что находится в вашей NextActivity для позиции 1. Вы можете вернуть больше фрагментов для позиций 2 и выше, чтобы иметь интерфейс, который вы можете перемещать между левой и правой сторонами.Надеемся, что это дает вам тот самый удобный пользовательский интерфейс, который вы ищете.

0 голосов
/ 10 марта 2012

пакет avatar.view.view;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.View;

public class customview extends View {

private int PanX, PanY;
private GestureDetector gestureDetector;
private Bitmap mBitmap;
private final Paint mPaint = new Paint(Paint.FILTER_BITMAP_FLAG);

public customview(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
    // TODO 自動生成されたコンストラクター・スタブ
}

public customview(Context context, AttributeSet attrs) {
    super(context, attrs);
    // TODO 自動生成されたコンストラクター・スタブs
}

public customview(Context context) {
    super(context);
    // TODO 自動生成されたコンストラクター・スタブ
}

private float pointX = 0, pointY = 0;

private void setPoint(MotionEvent e) {
    pointX = e.getX();
    pointY = e.getY();
}

@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    if (mBitmap != null) {
        pointX = PanX - (mBitmap.getWidth() / 2);
        pointY = PanY - (mBitmap.getHeight() / 2);
        canvas.drawBitmap(mBitmap, pointX, pointY, mPaint);
    }
}

/*
 * (非 Javadoc)
 * 
 * @see android.view.View#onMeasure(int, int)
 */
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    // ビューのサイズを設定する
    setMeasuredDimension(MeasureSpec.getSize(widthMeasureSpec), MeasureSpec
            .getSize(heightMeasureSpec));
}

public void setPanX(int panX) {
    PanX = panX;
}

public int getPanX() {
    return PanX;
}

public void setPanY(int panY) {
    PanY = panY;
}

public int getPanY() {
    return PanY;
}

public void setmBitmap(Bitmap mBitmap) {
    this.mBitmap = mBitmap;
}

public Bitmap getmBitmap() {
    return mBitmap;
}

}

Пользовательский вид. Затем в основной деятельности

 @Override
public boolean onTouch(View v, MotionEvent e) {
    // TODO 自動生成されたメソッド・スタブ
    if (isSelected == false) {
        return false;
    }
    final int action = e.getAction();
    switch (action) {
    case MotionEvent.ACTION_DOWN:
        panX = (int) e.getX();
        panY = (int) e.getY();

        ctview.setPanX(panX);
        ctview.setPanY(panY);
        ctview.invalidate();
        Log.v("ACTION_DOWN", "ACTION_DOWN");

        break;
    case MotionEvent.ACTION_MOVE:
        panX = (int) e.getX();
        panY = (int) e.getY();

        ctview.setPanX(panX);
        ctview.setPanY(panY);
        ctview.invalidate();
        Log.v("ACTION_MOVE", "ACTION_MOVE");
        break;
    case MotionEvent.ACTION_UP:
        Log.v("ACTION_UP", "ACTION_UP");
        if (isSelected) {
            isSelected = false;
            ctview.setmBitmap(null);
            ctview.invalidate();
        }
        break;
    default:
        break;
    }
    return true;
}

и создать

Customview.setmBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.ImageSlide);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...