Внедрение слайдера в Android

Я хочу реализовать слайдер, который в основном состоит из двух линий: одной вертикальной и одной горизонтальной, пересекающей границу экрана. Мне удалось сделать один, но мне нужно:

  1. Ползунок не очень гладкий, есть небольшая задержка, когда я двигаю пальцем
  2. Если я помещаю два ползунка, это не мультитач, и я бы хотел использовать оба из них одновременно

Вот код:

public class Slider extends View { private Controller controller = new Controller(); private boolean initialisedSlider; private int sliderWidth, sliderHeight; private Point pointStart; private Paint white; private int mode; final static int VERTICAL = 0, HORIZONTAL = 1, BOTH = 2; public Slider(Context context) { super(context); setFocusable(true); // TODO Auto-generated constructor stub } public Slider(Context context, AttributeSet attrs) { super(context, attrs); setFocusable(true); pointStart = new Point(); initialisedSlider = false; mode = Slider.BOTH; } @Override protected void onDraw(Canvas canvas) { if(!initialisedSlider) { initialisedSlider = true; sliderWidth = getMeasuredWidth(); sliderHeight = getMeasuredHeight(); pointStart.x = (int)(sliderWidth/2.0); pointStart.y = (int)(sliderHeight/2.0); controller = new Controller(pointStart, 3); white = new Paint(); white.setColor(0xFFFFFFFF); } canvas.drawLine(controller.getCoordX(),0, controller.getCoordX(),sliderHeight, white); canvas.drawLine(0, controller.getCoordY(), sliderWidth, controller.getCoordY(), white); } public boolean onTouchEvent(MotionEvent event) { int eventaction = event.getAction(); int X = (int)event.getX(); int Y = (int)event.getY(); switch (eventaction) { case MotionEvent.ACTION_DOWN: if(isInBounds(X,Y)) { updateController(X, Y); } break; case MotionEvent.ACTION_MOVE: if(isInBounds(X,Y)) { updateController(X, Y); } break; case MotionEvent.ACTION_UP: if(isInBounds(X,Y)) { updateController(X, Y); } break; } invalidate(); return true; } private boolean isInBounds(int x, int y) { return ((x<=(sliderWidth)) && (x>=(0)) && (y<=(sliderHeight)) && (y>=(0))); } private void updateController(int x, int y) { switch(mode) { case Slider.HORIZONTAL: controller.setCoordX(x); break; case Slider.VERTICAL: controller.setCoordY(y); break; case Slider.BOTH: controller.setCoordX(x); controller.setCoordY(y); break; } } private class Controller { private int coordX, coordY; Controller() { } Controller(Point point, int width) { setCoordX(point.x); setCoordY(point.y); } public void setCoordX(int coordX) { this.coordX = coordX; } public int getCoordX() { return coordX; } public void setCoordY(int coordY) { this.coordY = coordY; } public int getCoordY() { return coordY; } } } 

И файл XML:

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" /> <com.android.lasttest.Slider android:id="@+id/slider" android:layout_width="100dp" android:layout_height="100dp" android:layout_gravity="center_horizontal" android:adjustViewBounds="true"/> <com.android.lasttest.Slider android:id="@+id/slider" android:layout_width="150dp" android:layout_height="150dp" android:layout_gravity="center_horizontal" android:adjustViewBounds="true"/> <com.android.lasttest.Slider android:id="@+id/slider" android:layout_width="200dp" android:layout_height="200dp" android:layout_gravity="center_horizontal" android:adjustViewBounds="true"/> </LinearLayout> 

Благодарю вас и веселого Рождества!

Solutions Collecting From Web of "Внедрение слайдера в Android"

Android обеспечивает слайдер, который является горизонтальным

И реализовать OnSeekBarChangeListener

Если вы хотите вертикальный Seekbar, то перейдите по этой ссылке