本文目錄一覽:
- 1、android垂直TextView怎麼能讓它自動滾動
- 2、java怎樣設置表格滾動條
- 3、Android中TextView如何實現水平和垂直滾動
- 4、java 添加一個豎滾動條
- 5、Java swing 如何讓垂直滾動條始終在最下面
- 6、JAVA 如何使JScrollPane中的JTextArea自動滾動到最後一行
android垂直TextView怎麼能讓它自動滾動
這是跑馬燈的效果。實現該功能步驟:
1、自定義Views,繼承自TextView。
2、重寫onDrow方法,計算每次的滾動的距離。
3、計算view的Y軸的重點,讓當前顯示的處於高亮顯示狀態。
4、定時的刷新View使其界面不斷的刷先,出現滾動的效果。
5、實現數據結構,將數據傳給view。
幾個步驟代碼可以參考下面
下面看看主要代碼:
1、創建一個類繼承TextView
/**
* @author xushilin
*
* 垂直滾動的TextView Widget
*/
public class VerticalScrollTextView extends TextView
2、實現構造函數:
public VerticalScrollTextView(Context context) {
super(context);
init();
}
public VerticalScrollTextView(Context context, AttributeSet attr) {
super(context, attr);
init();
}
public VerticalScrollTextView(Context context, AttributeSet attr, int i) {
super(context, attr, i);
init();
}
private void init() {
setFocusable(true);
//這裡主要處理如果沒有傳入內容顯示的默認值
if(list==null){
list=new ArrayListNotice();
Notice sen=new Notice(0,”暫時沒有通知公告”);
list.add(0, sen);
}
//普通文字的字號,以及畫筆顏色的設置
mPaint = new Paint();
mPaint.setAntiAlias(true);
mPaint.setTextSize(16);
mPaint.setColor(Color.BLACK);
mPaint.setTypeface(Typeface.SERIF);
//高亮文字的字號,以及畫筆顏色的設置
mPathPaint = new Paint();
mPathPaint.setAntiAlias(true);
mPathPaint.setColor(Color.RED);
mPathPaint.setTextSize(16);
mPathPaint.setTypeface(Typeface.SANS_SERIF);
}
3、從寫onDraw方法,並計算文字的行距,並且將將普通文字和高亮文字,在這個方法中繪製出來
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawColor(0xEFeffff);
Paint p = mPaint;
Paint p2 = mPathPaint;
p.setTextAlign(Paint.Align.CENTER);
if (index == -1)
return;
p2.setTextAlign(Paint.Align.CENTER);
canvas.drawText(list.get(index).getName(), mX, middleY, p2);
float tempY = middleY;
for (int i = index – 1; i = 0; i–) {
tempY = tempY – DY;
if (tempY 0) {
break;
}
canvas.drawText(list.get(i).getName(), mX, tempY, p);
}
tempY = middleY;
for (int i = index + 1; i list.size(); i++) {
tempY = tempY + DY;
if (tempY mY) {
break;
}
canvas.drawText(list.get(i).getName(), mX, tempY, p);
}
}
4、計算Y軸中值以及更新索引
protected void onSizeChanged(int w, int h, int ow, int oh) {
super.onSizeChanged(w, h, ow, oh);
mX = w * 0.5f;
mY = h;
middleY = h * 0.5f;
}
private long updateIndex(int index) {
if (index == -1)
return -1;
this.index=index;
return index;
}
5、定時更新view,並將接口暴露給客戶程序調用。
public void updateUI(){
new Thread(new updateThread()).start();
}
class updateThread implements Runnable {
long time = 1000;
int i=0;
public void run() {
while (true) {
long sleeptime = updateIndex(i);
time += sleeptime;
mHandler.post(mUpdateResults);
if (sleeptime == -1)
return;
try {
Thread.sleep(time);
i++;
if(i==getList().size())
i=0;
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
Handler mHandler = new Handler();
Runnable mUpdateResults = new Runnable() {
public void run() {
invalidate();
}
};
6、xml布局文件中調用:
?xml version=”1.0″ encoding=”utf-8″?
!– Demonstrates scrolling with a ScrollView. —
LinearLayout xmlns:android=””
android:layout_width=”fill_parent”
android:layout_height=”fill_parent”
android:orientation=”vertical”
com.demo.xsl.text.SampleView
android:id=”@+id/sampleView1″
android:layout_width=”fill_parent”
android:layout_height=”fill_parent”
android:background=”@drawable/selector”
/
/LinearLayout
7、java代碼中調用,傳遞數據:
package com.demo.xsl.text;
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
public class VerticalScrollTextActivity extends Activity {
SampleView mSampleView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mSampleView = (SampleView) findViewById(R.id.sampleView1);
List lst=new ArrayListSentence();
for(int i=0;i30;i++){
if(i%2==0){
Sentence sen=new Sentence(i,i+”、金球獎三甲揭曉 C羅梅西哈維入圍 “);
lst.add(i, sen);
}else{
Sentence sen=new Sentence(i,i+”、公牛欲用三大主力換魔獸?????”);
lst.add(i, sen);
}
}
//給View傳遞數據
mSampleView.setList(lst);
//更新View
mSampleView.updateUI();
}
}
java怎樣設置表格滾動條
用swing類里的JScrollPane實現
JScrollPane(Component view,int vsbPolicy,int hsbPolicy)
創建一個 JScrollPane,它將視圖組件顯示在一個視口中,視圖位置可使用一對滾動條控制。滾動條策略指定滾動條在何時顯示,例如,如果 vsbPolicy 為 VERTICAL_SCROLLBAR_AS_NEEDED,則只有在垂直查看無法完全顯示時,垂直滾動條才顯示。可用的策略設定在
setVerticalScrollBarPolicy(int) 和 setHorizontalScrollBarPolicy(int) 中列出。
參數:
view – 將顯示在滾動窗格視口中的組件
vsbPolicy – 指定垂直滾動條策略的一個整數
hsbPolicy – 指定水平滾動條策略的一個整數
JScrollPane scrollPane = new JScrollPane(你要添加的表格,ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED ,ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER
)
Android中TextView如何實現水平和垂直滾動
殤 殤雲的專欄 雲的專欄軟件開發 軟件開發一 一、只想讓TextView顯示一行,但是文字超過 、只想讓TextView顯示一行,但是文字超過在開頭顯示省略號android:singleLine=”true”android:ellipsize=”start”在結尾顯示省略號android:singleLine=”true”android:ellipsize=”end”在中間顯示省略號android:singleLine=”true”android:ellipsize=”middle”橫向自動滾動(跑馬燈效果)android:singleLine=”true”android:ellipsize=”marquee”android:marqueeRepeatLimit=”marquee_forever”android:focusable=”true”android:focusableInTouchMode=”true”以上4個效果都要加上�0�2android:singleLine=”true”,因為TextView默認是會自動換行的android:marqueeRepeatLimit=”marquee_forever”是設置永遠重複,當然你也可以設置具體的數字android:focusable=”true”和android:focusableInTouchMode=”true”一定要加上,不然滾動效果出不來在Java代碼中加入下面一句話就可以實現垂直滾動
java 添加一個豎滾動條
滾動條使用類似於下面的代碼創建:
redSlider=new Scrollbar(Scrollbar.VERTICAL, 0, 1, 0, 255);
add(redSlider);
當用戶改變滾動條的值時,滾動條接收一個 AdjustmentEvent 實例。滾動條處理此事件,將它傳遞給所有已註冊的偵聽器。
任何希望滾動條值發生變化時被通知的對象都應該實現包 java.awt.event 中定義的 AdjustmentListener接口。調用 addAdjustmentListener 和 removeAdjustmentListener 方法能動態地添加或刪除偵聽器。
AdjustmentEvent 類定義了五種調整事件,如下所示:
當用戶拖動滾動條的滑動塊時,發送 AdjustmentEvent.TRACK。
當用戶單擊水平滾動條的左箭頭或垂直滾動條的上箭頭,或從鍵盤做出等效動作時,發送AdjustmentEvent.UNIT_INCREMENT。
當用戶單擊水平滾動條的右箭頭或垂直滾動條的下箭頭,或從鍵盤做出等效動作時,發送AdjustmentEvent.UNIT_DECREMENT。
當用戶單擊水平滾動條滑動塊左邊的軌道,或垂直滾動條滑動塊上邊的軌道時,發送AdjustmentEvent.BLOCK_INCREMENT。按照慣例,如果用戶使用定義了 Page Up 鍵的鍵盤,則Page Up 鍵是等效的。
當用戶單擊水平滾動條滑動塊右邊的軌道,或垂直滾動條滑動塊下邊的軌道時,發送AdjustmentEvent.BLOCK_DECREMENT。按照慣例,如果用戶使用定義了 Page Down 鍵的鍵盤,則Page Down 鍵是等效的。
Java swing 如何讓垂直滾動條始終在最下面
實現:
(1)設置JTextPane 的策略
DefaultCaret caret = (DefaultCaret)resultTextPane.getCaret();
caret.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE);
(2)當JTextPane 動態增加內容時
resultTextPane.setSelectionStart(resultTextPane.getText().length());
JScrollBar vertical = scrollPane.getVerticalScrollBar();
vertical.setValue( vertical.getMaximum());
說明:
(1)resultTextPane 的類型是JTextPane;
(2)JTextPane和JTextArea的區別:
JTextPane 可以設置html樣式;
JTextArea無法設置成為html樣式
JAVA 如何使JScrollPane中的JTextArea自動滾動到最後一行
JTextArea經常和JScrollPane 搭配使用. 這樣可以通過滾動條顯示更多的內容.
如果要使文本域顯示最後1行, 有2種方式:
第一種方式:
操控垂直滾動條, 把垂直滾動條移動到最後面即可
JTextArea jta = new JTextArea();
jta.setText(“添加很多行的文字”);
JScrollPane jsp = new JScrollPane(jta);
jsp.getVerticalScrollBar().setValue(jsp.getVerticalScrollBar().getMaximum());//控制垂直滾動條到最後面
第二種方式:
操作文本域, 把文本域的位置設置到文本的最後.並讓文本域獲得焦點即可
JTextArea jta = new JTextArea();
jta.setText(“添加很多行的文字”);
JScrollPane jsp = new JScrollPane(jta);
//下面的代碼就是移動到文本域的最後面
jta.selectAll();
if (jta.getSelectedText() != null) {
jta.setCaretPosition(jta.getSelectedText().length());
jta.requestFocus();
}
完整的代碼
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class JTPDemo extends JFrame implements ActionListener {
JTextArea jta;
JButton jbHome;
JButton jbEnd;
JScrollPane jsp;
final String NEW_LINE =System.getProperty(“line.separator”);
public JTPDemo() {
jbHome = new JButton(“開始位置”);
jbHome.addActionListener(this);
jbEnd = new JButton(“最後一行”);
jbEnd.addActionListener(this);
JPanel jpsouth = new JPanel();
jpsouth.add(jbHome);
jpsouth.add(jbEnd);
add(jpsouth, BorderLayout.SOUTH);
jta = new JTextArea();
jta.setLineWrap(true);
jta.append(“開始”+NEW_LINE);
for (int i = 1; i 50; i++) {
jta.append(i+NEW_LINE);
}
jta.append(“最後一行”);
jsp =new JScrollPane(jta);
add(jsp);
setTitle(“文本域測試”);
setSize(360, 320);
setLocationRelativeTo(null);//窗口居中
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
public static void main(String[] args) {
new JTPDemo();
}
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() == jbHome) {//跳到開始的位置
jsp.getVerticalScrollBar().setValue(jsp.getVerticalScrollBar().getMinimum());
// jta.setCaretPosition(0);
// jta.requestFocus();
} else if (e.getSource() == jbEnd) {//跳到最後一行的位置
jsp.getVerticalScrollBar().setValue(jsp.getVerticalScrollBar().getMaximum());
// jta.selectAll();
// if (jta.getSelectedText() != null) {
// jta.setCaretPosition(jta.getSelectedText().length());
// jta.requestFocus();
// }
}
}
}
效果圖
原創文章,作者:KBGJT,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/317620.html