我已经实现了一个带有图像视图的应用程序。当用户将图像向右移动时,我想要实现获取下一个活动页面的功能。
我已经使用以下代码来创建imageView:
(ImageView)findViewById(R.id.slide) //event for move right here
Intent it = new Intent(Slide.this,NextActivity.class);
startActivity(it);
请有人帮帮我...
如果我理解正确,您想在屏幕上移动并拖动ImageView,在某个特定的位置停止,并启动另一个活动?
如果是这样,您可以尝试使用以下代码...它允许您拖动图像视图在屏幕上移动/拖动
只需将onTouchListener添加到要滑动(移动/拖动)的imageView即可
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);
}
}
}
}
以上代码应该能够使您的ImageView在屏幕上拖动。
您还可以在MotionEvent.ACTION_MOVE事件中实现...以限制ImageView在屏幕上的移动。因此,请检查手指在屏幕上的新坐标,并检查它们是否超出了边界。如果是,则不执行任何操作。如果没有超出边界,则更改ImaveView的左和上边距。
此外,在MotionEvent.ACTION_UP事件中,检查ImaveView的左边距是否超过预定义的限制(这意味着用户将imageView滑动到了您想要的位置)。如果是,您可以继续进行任何操作,例如启动活动。或者,如果您不想在用户拖动时打开活动,而只想在他从imageView中移除手指后才这样做,则只需在MotionEvent.ACTION_MOVE事件下插入我编写的if()语句即可。在那里插入您想要的间隔,因此当imageView在该间隔内被拖动时,活动将开始。
如果您感到困惑,请问 :) 现在已经很晚了,我很累,所以可能没有正确地解释它:D
我不太明白你的问题,但我理解为你想将一个包含Activity的ImageView滑动到另一个Activity中。
如果是这样,我建议将这些Activity转换为Fragment,然后使用ViewPager。这里有一篇很好的Google开发者博客文章介绍了这个概念:http://android-developers.blogspot.com/2011/08/horizontal-view-swiping-with-viewpager.html
你需要实现一个FragmentPagerAdapter,其中getCount是用户可以在其间滑动的页面数。然后getItem应该返回一个包含第一个ImageView的Fragment,位置为0,以及包含NextActivity内容的Fragment,位置为1。你可以返回更多的Fragments,用于位置2及更高位置,以便拥有一个可以左右滑动的界面。这希望能给你所寻找的滑动用户体验。
包 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;
}
关于 OnCreate
Customview.setmBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.ImageSlide);