在谷歌玻璃应用程序中链接图像

时间:2015-01-18 08:27:17

标签: android google-glass

我有一个关于谷歌眼镜的有趣问题!所以,我正在尝试制作一个应用程序,如果我向右滑动,它会改变我所使用的卡片的图像。我到处寻找,我只是找不到如何做到这一点。非常感谢帮助我解决这个问题以及是否可能!

1 个答案:

答案 0 :(得分:0)

这当然可行。您只需要一个名为main_layout.xml的布局,其中包含ImageView,以及一个名为MainActivity.java的活动,其中包含GestureDetector,用于跟踪您何时展开以及你要循环的Image

首先,创建一个名为main_layout.xml的xml文件,并在其中放置ImageView,设置layout_width="match_parentlayout_height="match_parent"

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal">

    <ImageView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/displayImageView" />
</LinearLayout>

这将保存并显示我们的图像。然后创建一个名为MainActivity.java的活动。确保将其添加到AndroidManifest.xml文件中,如下所示:

<activity
    android:name=".MainActivity"
    android:label="@string/app_name"
    android:screenOrientation="landscape"
    android:theme="@android:style/Theme.DeviceDefault.Wallpaper.NoTitleBar"
    android:windowSoftInputMode="stateHidden" >
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
        <action android:name="com.google.android.glass.action.VOICE_TRIGGER" />
    </intent-filter>
</activity>

完成活动后,您需要创建GestureDetector来检测幻灯片。我们将创建一个为我们生成GestureDetector的方法。它看起来很复杂,但实际上只是覆盖了GestureDetector的所有部分:

private GestureDetector createGestureDetector(Context context) {
    GestureDetector gestureDetectorTemp = new GestureDetector(context, new GestureDetector.OnGestureListener() {
                        //we are creating our gesture detector here
        @Override
        public boolean onDown(MotionEvent motionEvent) {

            return false;
        }

        @Override
        public void onShowPress(MotionEvent motionEvent) {

        }

        @Override
        public boolean onSingleTapUp(MotionEvent motionEvent) {
            return false;
        }
        @Override
        public boolean onScroll(MotionEvent motionEvent, MotionEvent motionEvent2, float distanceX, float distanceY) {
            return false;
        }
        @Override
        public void onLongPress(MotionEvent motionEvent) {
        }

        @Override
        public boolean onFling(MotionEvent motionEvent, MotionEvent motionEvent2, float v, float v2) { //fling = a single slide
            int dx = (int) (motionEvent2.getX() - motionEvent.getX());   //figure out the distance moved horizontally
            int dy = (int) (motionEvent2.getY() - motionEvent.getY());   //figure out the distance moved vertically

            if(Math.abs(dx) > 100) 

            if (dx < -100) { //move to the right.
                updateImage(true);
            } else if (dx > 100) { //move to the left
                updateImage(false);
            }
            return true;
        }
    });

    return gestureDetectorTemp;
}
@Override
public boolean onGenericMotionEvent(MotionEvent event) {
    if (gestureDetector != null) {
        return gestureDetector.onTouchEvent(event);
    }
    return false;
}

这里要注意的重要一点是,对于大多数这些方法,您必须返回truefalse。如果您已经消耗了该事件,则返回true,这意味着您不想通知事件的其他默认方法,并且您已按照您希望的方式处理它。如果您希望默认操作像往常一样发生,请返回false。第二个函数首先通过MotionEvent传递所有GestureDetector,如滑动或点击。确保在顶部有正确的导入,以便识别第二种方法:

import android.view.MotionEvent;

现在我们还有两个问题。首先,我们需要创建gestureDetector。这只是在onCreate()方法中完成,GestureDetector作为全局变量。在这个过程中,我们还将创建我们的ArrayList可绘制的id来更新图像,以及一个变量来跟踪当前的索引,当然还有ImageView我们要去的要更新:

public class MainActivity extends Activity {

    private GestureDetector gestureDetector;
    private ArrayList<Integer> drawableIdList = new ArrayList<Integer>();
    private int currentDrawableIndex = 0;
    private ImageView displayImageView;

    @Override
    protected void onCreate(Bundle bundle) {
        super.onCreate(bundle);
        setContentView(R.layout.main_activity);

        displayImageView = (ImageView) findViewById(R.id.displayImageView);

        gestureDetector = createGestureDetector(this);

        drawableIdList.add(R.drawable.name_of_drawable_1);
        drawableIdList.add(R.drawable.name_of_drawable_2);
        drawableIdList.add(R.drawable.name_of_drawable_3);
        drawableIdList.add(R.drawable.name_of_drawable_4);
        drawableIdList.add(R.drawable.name_of_drawable_5);

        displayImageView.setImageResource(drawableIdList.get(currentDrawableIndex);

    }

...

}

这样就完成了一个完整工作的最后一步 - 添加了我们滑动时调用的updateImage()方法。如果传入true,我们只需向索引添加1,如果传入false则减1,然后检查以确保该数字不大于数组或负数,然后将ImageView更新为正确的图像:

private void updateImage(boolean direction) {
    if(direction) {
        currentDrawableIndex++;
    } else {
        currentDrawableIndex--;
    }
    if(currentDrawableIndex > (drawableIdList.size() - 1)) {
       currentDrawableIndex = 0;
    }
    if(currentDrawableIndex < 0) {
        currentDrawableIndex = (drawableIdList.size() - 1);
    }
    displayImageView.setImageResource(drawableIdList.get(currentDrawableIndex);
}

就是这样。这些都是所有部分。你需要做的就是按照我的描述将它们组合在一起。一旦这样做,当您向右或向左滑动时,玻璃上的图像将循环。