কম্পিউটার টিউটোরিয়াল

অ্যান্ড্রয়েডে ভার্টিক্যাল SeekBar তৈরি করার পদ্ধতি

রোটেশন ব্যবহার করে হরিজন্টাল SeekBar-কে ভার্টিক্যাল করা

অ্যান্ড্রয়েডে নেটিভ ভার্টিক্যাল SeekBar নেই। কিন্তু হরিজন্টাল SeekBar-কে ২৭০ ডিগরি রোটেট করে ভার্টিক্যাল SeekBar হিসেবে ব্যবহার করা যায়। এটি সহজ এবং কার্যকর পদ্ধতি।

ধাপ ১: প্রজেক্ট তৈরি করুন

স্ট্যান্ডার্ড অ্যান্ড্রয়েড প্রজেক্ট।

ধাপ ২: লেআউটে রোটেটেড SeekBar

res/layout/activity_main.xml - `android:rotation="270"` ব্যবহার করুন:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:tools="https://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">
    <SeekBar
        android:id="@+id/seekBar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:rotation="270" />
    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:text=""
        android:textSize="16sp" />
</RelativeLayout>

ধাপ ৩: SeekBar লজিক

src/MainActivity.java:

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.SeekBar;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {
    SeekBar seekBar;
    TextView textView;
    int min = 0, max = 100, current = 50;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        textView = findViewById(R.id.textView);
        seekBar = findViewById(R.id.seekBar);
        
        // ম্যাক্স এবং কারেন্ট ভ্যালু সেট করুন
        seekBar.setMax(max - min); // ১০০
        seekBar.setProgress(current - min); // ৫০
        
        textView.setText(String.valueOf(current));
        
        seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            @Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
                current = progress + min;
                textView.setText(String.valueOf(current));
            }
            
            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {
                // টাচ শুরু হলে
            }
            
            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {
                // টাচ শেষ হলে
            }
        });
    }
}

গুরুত্বপূর্ণ বিবেচনা

  • রোটেশন ২৭০°: ঘড়ির ডিকের দিকে ৯০° বা বামে ২৭০° - দুটোই কাজ করে
  • লেআউট হাইট/উইডথ: রোটেশনের কারণে `layout_width="match_parent"` ভার্টিক্যাল হাইট বানায়
  • প্যাডিং/মার্জিন: রোটেশনের কারণে প্যাডিং/মার্জিন আচরণ ভিন্ন হতে পারে, টেস্ট করুন
  • টাচ ইভেন্ট: রোটেশন টাচ কোঅর্ডিনেট প্রভাবিত করে না, নরমাল কাজ করে

বিকল্প পদ্ধতি: কাস্টম ভিউ (আধুনিক)

আধুনিক অ্যাপের জন্য কাস্টম `VerticalSeekBar` ক্লাস তৈরি করুন:

public class VerticalSeekBar extends AppCompatSeekBar {
    public VerticalSeekBar(Context context) { super(context); }
    public VerticalSeekBar(Context context, AttributeSet attrs) { super(context, attrs); }
    public VerticalSeekBar(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); }
    
    @Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
        super.onSizeChanged(h, w, oldh, oldw); // সোয়াপ
    }
    
    @Override
    protected synchronized void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(heightMeasureSpec, widthMeasureSpec);
        setMeasuredDimension(getMeasuredHeight(), getMeasuredWidth());
    }
    
    @Override
    protected void onDraw(Canvas c) {
        c.rotate(-90);
        c.translate(-getHeight(), 0);
        super.onDraw(c);
    }
    
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        // টাচ কোঅর্ডিনেট রোটেট করুন
        return super.onTouchEvent(event);
    }
}

Material Slider (Material Components)

Material Design লাইব্রেরি ব্যবহার করলে:

<com.google.android.material.slider.Slider
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:valueFrom="0"
    android:valueTo="100"
    android:value="50" />
অ্যান্ড্রয়েডে ভার্টিক্যাল SeekBar তৈরি করার পদ্ধতি
  1. অ্যান্ড্রয়েডে একশনবারের সাবটাইটেল (Subtitle) কীভাবে পেতে হয়?

  2. অ্যান্ড্রয়েডে বর্তমান থ্রেডের আইডি (ID) পাওয়ার পদ্ধতি

  3. অ্যান্ড্রয়েডে Spinner ভ্যালু পাওয়ার পদ্ধতি

  4. অ্যান্ড্রয়েডে ফ্লিং জেসচার ডিটেকশন ইমপ্লিমেন্ট করার পদ্ধতি