关于android的SeekBar

关于android的SeekBar,第1张

SeekBar不可以显示文字

(可以去查阅SDK资料看其并没有SetText或直接在布局设置的时候把SeekBar拉进去,看其属性中,没有Text属性这一个)

但你可以用一个SeekBar和一个TextView组合成一个自定义的组合控件

这样子来通过这个组合控件的属性来达成你所想要的显示文字的效果。

android中用SeekBar控制视频播放的进度其实现方法如下:

1:第一个类是自定义的一个类 也就是SeekBar上方会跟随其一块移动的控件,其实非常简单的一个类

package com.example.textmovebyseekbar

import android.content.Context

import android.util.AttributeSet

import android.view.ViewGroup

//import android.widget.AbsoluteLayout

public class TextMoveLayout extends ViewGroup {

public TextMoveLayout(Context context) {

super(context)

// TODO Auto-generated constructor stub

}

public TextMoveLayout(Context context, AttributeSet attrs, int defStyle) {

super(context, attrs, defStyle)

// TODO Auto-generated constructor stub

}

public TextMoveLayout(Context context, AttributeSet attrs) {

super(context, attrs)

// TODO Auto-generated constructor stub

}

@Override

protected void onLayout(boolean changed, int l, int t, int r, int b) {

// TODO Auto-generated method stub

}

}

?

2: 第二类就是MainActivity了,代码很简单!

package com.example.textmovebyseekbar

import android.app.Activity

import android.graphics.Color

import android.os.Bundle

import android.view.ViewGroup

import android.widget.SeekBar

import android.widget.TextView

public class MainActivity extends Activity {

private SeekBar seekbar = null

private String startTimeStr = "19:30:33"

private String endTimeStr = "21:23:21"

private TextView text, startTime, endTime

/**

* 视频组中第一个和最后一个视频之间的总时长

*/

private int totalSeconds = 0

/**

* 屏幕宽度

*/

private int screenWidth

/**

* 自定义随着拖动条一起移动的空间

*/

private TextMoveLayout textMoveLayout

private ViewGroup.LayoutParams layoutParams

/**

* 托动条的移动步调

*/

private float moveStep = 0

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState)

setContentView(R.layout.video_fast_search)

screenWidth = getWindowManager().getDefaultDisplay().getWidth()

text = new TextView(this)

text.setBackgroundColor(Color.rgb(245, 245, 245))

text.setTextColor(Color.rgb(0, 161, 229))

text.setTextSize(16)

layoutParams = new ViewGroup.LayoutParams(screenWidth, 50)

textMoveLayout = (TextMoveLayout) findViewById(R.id.textLayout)

textMoveLayout.addView(text, layoutParams)

text.layout(0, 20, screenWidth, 80)

/**

* findView

*/

seekbar = (SeekBar) findViewById(R.id.seekbar)

startTime = (TextView) findViewById(R.id.start_time)

endTime = (TextView) findViewById(R.id.end_time)

/**

* setListener

*/

seekbar.setOnSeekBarChangeListener(new OnSeekBarChangeListenerImp())

searchVideos()

}

public void searchVideos() {

startTime.setText(startTimeStr)

endTime.setText(endTimeStr)

text.setText(startTimeStr)

totalSeconds = totalSeconds(startTimeStr, endTimeStr)

seekbar.setEnabled(true)

seekbar.setMax(totalSeconds)

seekbar.setProgress(0)

moveStep = (float) (((float) screenWidth / (float) totalSeconds) * 0.8)

}

private class OnSeekBarChangeListenerImp implements

SeekBar.OnSeekBarChangeListener {

// 触发 *** 作,拖动

public void onProgressChanged(SeekBar seekBar, int progress,

boolean fromUser) {

text.layout((int) (progress * moveStep), 20, screenWidth, 80)

text.setText(getCheckTimeBySeconds(progress, startTimeStr))

}

// 表示进度条刚开始拖动,开始拖动时候触发的 *** 作

public void onStartTrackingTouch(SeekBar seekBar) {

}

// 停止拖动时候

public void onStopTrackingTouch(SeekBar seekBar) {

// TODO Auto-generated method stub

}

}

/**

* 计算连个时间之间的秒数

*/

private static int totalSeconds(String startTime, String endTime) {

String[] st = startTime.split(":")

String[] et = endTime.split(":")

int st_h = Integer.valueOf(st[0])

int st_m = Integer.valueOf(st[1])

int st_s = Integer.valueOf(st[2])

int et_h = Integer.valueOf(et[0])

int et_m = Integer.valueOf(et[1])

int et_s = Integer.valueOf(et[2])

int totalSeconds = (et_h - st_h) * 3600 + (et_m - st_m) * 60

+ (et_s - st_s)

return totalSeconds

}

/**

* 根据当前选择的秒数还原时间点

*

* @param args

*/

private static String getCheckTimeBySeconds(int progress, String startTime) {

String return_h = "", return_m = "", return_s = ""

String[] st = startTime.split(":")

int st_h = Integer.valueOf(st[0])

int st_m = Integer.valueOf(st[1])

int st_s = Integer.valueOf(st[2])

int h = progress / 3600

int m = (progress % 3600) / 60

int s = progress % 60

if ((s + st_s) >= 60) {

int tmpSecond = (s + st_s) % 60

m = m + 1

if (tmpSecond >= 10) {

return_s = tmpSecond + ""

} else {

return_s = "0" + (tmpSecond)

}

} else {

if ((s + st_s) >= 10) {

return_s = s + st_s + ""

} else {

return_s = "0" + (s + st_s)

}

}

if ((m + st_m) >= 60) {

int tmpMin = (m + st_m) % 60

h = h + 1

if (tmpMin >= 10) {

return_m = tmpMin + ""

} else {

return_m = "0" + (tmpMin)

}

} else {

if ((m + st_m) >= 10) {

return_m = (m + st_m) + ""

} else {

return_m = "0" + (m + st_m)

}

}

if ((st_h + h) <10) {

return_h = "0" + (st_h + h)

} else {

return_h = st_h + h + ""

}

return return_h + ":" + return_m + ":" + return_s

}

}

3: 接下来这个就是布局文件了,其中会用到一些色值!

<?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:background="@color/bg_whitef5"

android:orientation="vertical" >

<LinearLayout

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:orientation="vertical" >

<com.example.textmovebyseekbar.TextMoveLayout

android:id="@+id/textLayout"

android:layout_width="fill_parent"

android:layout_height="40dp" />

<SeekBar

android:id="@+id/seekbar"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:focusable="true"

android:maxHeight="4dp"

android:minHeight="4dp"

android:paddingLeft="5dp"

android:paddingRight="5dp"

android:progressDrawable="@drawable/po_seekbar"

android:thumb="@drawable/seekbar_thumb" />

</LinearLayout>

<RelativeLayout

android:layout_width="fill_parent"

android:layout_height="wrap_content" >

<TextView

android:id="@+id/start_time"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_alignParentLeft="true"

android:layout_marginLeft="14dp"

android:textColor="@color/bg_lin_95" />

<TextView

android:id="@+id/end_time"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_alignParentRight="true"

android:layout_marginRight="14dp"

android:textColor="@color/bg_lin_95" />

</RelativeLayout>

</LinearLayout>

4:android:progressDrawable="@drawable/po_seekbar"这句会引用一个xml文件

<?xml version="1.0" encoding="utf-8"?>

<layer-list

xmlns:android="http://schemas.android.com/apk/res/android">

<item android:id="@*android:id/background">

<shape>

<solid android:color="#c6c6c6" />

</shape>

</item>

<item android:id="@*android:id/secondaryProgress">

<clip>

<shape>

<solid android:color="#c6c6c6" />

</shape>

</clip>

</item>

<item android:id="@*android:id/progress">

<clip>

<shape>

<solid android:color="#06a7fa" />

</shape>

</clip>

</item>

</layer-list>

5:android:thumb="@drawable/seekbar_thumb"也会引用一个xml文件 这其中又有用到两张图片

<?xml version="1.0" encoding="utf-8"?>

<selector xmlns:android="http://schemas.android.com/apk/res/android">

<item android:drawable="@drawable/video_fast_search_nomal" android:state_focused="true" android:state_pressed="false"/>

<item android:drawable="@drawable/video_fast_search_press" android:state_focused="true" android:state_pressed="true"/>

<item android:drawable="@drawable/video_fast_search_press" android:state_focused="false" android:state_pressed="true"/>

<item android:drawable="@drawable/video_fast_search_nomal"/>

</selector>


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/11372083.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-15
下一篇 2023-05-15

发表评论

登录后才能评论

评论列表(0条)

保存