我有一个关于谷歌眼镜的有趣问题!所以,我正在尝试制作一个应用程序,如果我向右滑动,它会改变我所使用的卡片的图像。我到处寻找,我只是找不到如何做到这一点。非常感谢帮助我解决这个问题以及是否可能!
答案 0 :(得分:0)
这当然可行。您只需要一个名为main_layout.xml
的布局,其中包含ImageView
,以及一个名为MainActivity.java
的活动,其中包含GestureDetector
,用于跟踪您何时展开以及你要循环的Image
。
首先,创建一个名为main_layout.xml
的xml文件,并在其中放置ImageView
,设置layout_width="match_parent
和layout_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;
}
这里要注意的重要一点是,对于大多数这些方法,您必须返回true
或false
。如果您已经消耗了该事件,则返回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);
}
就是这样。这些都是所有部分。你需要做的就是按照我的描述将它们组合在一起。一旦这样做,当您向右或向左滑动时,玻璃上的图像将循环。