1.旋转listview和item
Listview
<com.MyListView android:layout_width="160px" android:layout_marginTop="220px" android:rotation="-90"//顺时针-90° />
Item往反方向转相同角度就行,旋转后滚动会有问题,得自定义TouchEvent
package com; import android.content.Context; import android.support.annotation.Nullable; import android.util.AttributeSet; import android.util.Log; import android.view.MotionEvent; import android.view.VelocityTracker; import android.widget.ListView; public class MyListView extends ListView { private float xPressed; private float yPressed; private VelocityTracker mVelocityTracker; public MyListView(Context context) { super(context); } public MyListView(Context context, AttributeSet attrs) { super(context, attrs); } public MyListView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } void addMovement(MotionEvent ev){ if (mVelocityTracker == null) { mVelocityTracker = VelocityTracker.obtain(); } mVelocityTracker.addMovement(ev); } int getScrollTime(int v){ v=abs(v); return v>1000?1500: Math.max(v, 200); } int abs(int i){ return i>0?i:-i; } @Override public boolean onTouchEvent(MotionEvent ev) { addMovement(ev); switch (ev.getActionMasked()) { case MotionEvent.ACTION_DOWN: mVelocityTracker.clear(); smoothScrollBy(0,0); xPressed= ev.getY(); yPressed=ev.getX(); break; case MotionEvent.ACTION_UP: if(abs((int) (ev.getY()-xPressed))<15 && abs((int) (ev.getX()-yPressed))<15) { break; } mVelocityTracker.computeCurrentVelocity(400); int v= (int) mVelocityTracker.getXVelocity(); int distanceX=(int) (ev.getY()-xPressed); if(abs(distanceX)<60){ if((distanceX>0&&v<0) || (distanceX<0&&v>0)){ v=-v; } } int scrollTime=getScrollTime(v); //Log.i("test","v is :"+v+"\t distance:"+distanceX); smoothScrollBy(-v*scrollTime/1000, scrollTime); mVelocityTracker.clear(); break; case MotionEvent.ACTION_MOVE: if(ev.getY()!=xPressed){ return super.onTouchEvent(ev); } break; } return super.onTouchEvent(ev); } }