学习内容
(作为尝试,学习各位大拿,粘贴了完整版代码,初学者,程序应该还存在许多漏洞。仅作为个人记录,另外贴代码实在太长,考虑之后精简贴出,贴重点部分。)
1、ImageView
官方定义:展示图片用,图片的来源比较广泛,可以来字resources或者content provider,可用于提供图片的拉伸,缩放以及图片渲染。
示例用到的XML属性:android:adjustViewBounds 为true表示保持原比例不变;android:cropToPadding(android:scrollX/android:scrollY),使图像符合padding大小。
Android:scaleType 使得图像符合textview大小的方式(拉伸,缩放,等比例放大),贴代码:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/text1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="scaleType:fitXY"/>
<ImageView
android:id="@+id/scale"
android:layout_width="300dip"
android:layout_height="100dip"
android:src="@drawable/ic_launcher"
android:scaleType="fitXY"
android:background="#F00"/>
<TextView
android:id="@+id/text2"
android:text="scaleType:Center"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<ImageView
android:id="@+id/scale2"
android:src="@drawable/ic_launcher"
android:layout_width="300dip"
android:layout_height="150dip"
android:adjustViewBounds="true"
android:scaleType="center"
android:background="#F00"/>
<TextView
android:id="@+id/text2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="scaleType:fitEnd"
/>
<ImageView
android:id="@+id/scale3"
android:layout_width="300dip"
android:layout_height="150dip"
android:src="@drawable/ic_launcher"
android:scaleType="fitEnd"
android:background="#F00"/>
<TextView
android:id="@+id/text4"
android:text="ScaleType:fitCenter"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<ImageView
android:id="@+id/scale4"
android:src="@drawable/ic_launcher"
android:layout_width="300dip"
android:layout_height="150dip"
android:scaleType="fitCenter"
android:background="#F00"/>
</LinearLayout>
2、SeekBar
官方定义:可拖拽式进度条,拖拽按钮可以自己上传图片,示例结果如下(40为当前进度,具体位置可以拖动)
贴示例代码:
1).XML布局文件
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity"
android:orientation="vertical"
android:background="@color/color" >
<SeekBar
android:id="@+id/seekbar"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:maxHeight="12dip"
android:minHeight="12dip"
android:paddingLeft="18dip"
android:paddingRight="18dip"
android:thumb="@drawable/cut"/>
<TextView
android:id="@+id/textview"
android:layout_width="fill_parent"
android:layout_height="wrap_content"/>
</LinearLayout>
2)、.java文件,
值得注意的是OnSeekBarChangeListener有三个方法:onStartTrackingTouch(),
onProgressChanged(),onStopTrackingTouch()需要进行完善,在监听器中将值传出到textview进行展示
package com.example.seekbar;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.View.OnClickListener;
import android.widget.EditText;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;
import android.widget.TextView;
public class MainActivity extends Activity {
// 定义xml里的控件
private SeekBar seekbar01;
private EditText edittext01;
private TextView textview01;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 获取组建的ID
seekbar01 = (SeekBar) this.findViewById(R.id.seekbar);
textview01 = (TextView) this.findViewById(R.id.textview);
// 设置监听器
seekbar01.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar arg0, int arg1, boolean arg2) {
// TODO Auto-generated method stub
int i = seekbar01.getProgress();
textview01.setText("" + i); /* 当需要char型却只有整型 */
}
@Override
public void onStartTrackingTouch(SeekBar arg0) {
// TODO Auto-generated method stub
}
@Override
public void onStopTrackingTouch(SeekBar arg0) {
// TODO Auto-generated method stub
int i = seekbar01.getProgress();
textview01.setText("" + i); /* 当需要char型却只有整型 */
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
3、RatingBar
官方定义:类似ProgressBar 与SeekBar 用星级来显示进度、进展。可以点击选择进度,ratingBarStyleSmall以及ratingBarStyleIndicator不允许用户自己更改,只能作为指示器使用。星个数用android:setNumStars 设置,每次选择多少距离用android:stepSize设置。
ratingBarStyleSmall设置方法:在 XML中 style="?android:attr/ratingBarStyleSmall",其中ratingBarStyleSmall在res/values/styles.xml设置。
代码:
<style name="ratingBarStyleSmall">
<item name="android:stepSize">5</item>
<item name="android:numStars">5</item>
</style>
整体布局示例结果以及参考代码如下:
1)、XML布局文件
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<!-- android:isIndicator="false"表示可以进行人工更改 -->
<TextView
android:id="@+id/textt1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="ratingbar01"/>
<RatingBar
android:id="@+id/ratingbar1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:numStars="4"
android:rating="2.5" />
<TextView
android:id="@+id/textt2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="ratingbar02"/>
<RatingBar
android:id="@+id/ratingbar2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:numStars="5"
android:rating="5.0" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical" >
<TextView
android:id="@+id/textview1"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<RatingBar
android:id="@+id/small"
style="?android:attr/ratingBarStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="40dip"
android:isIndicator="false" />
</LinearLayout>
<RatingBar
android:id="@+id/indacator"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:isIndicator="false"
android:numStars="6"
android:stepSize="0.5" />
<TextView
android:id="@+id/text02"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
2)、.java文件
src/com.example.ratingbar/MainActivity.java代码如下
package com.example.ratingbar;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.widget.RatingBar;
import android.widget.RatingBar.OnRatingBarChangeListener;
import android.widget.TextView;
//与seekbar有相同的父类:AbsSeekBar
public class MainActivity extends Activity {
// 定义XML控件
RatingBar ratingbar01;
RatingBar ratingbar02;
RatingBar small;
RatingBar indacator;
TextView textview01;
TextView textview02;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
small = (RatingBar) this.findViewById(R.id.small);
textview01 = (TextView) this.findViewById(R.id.textview1);
indacator = (RatingBar) this.findViewById(R.id.indacator);
ratingbar01 = (RatingBar) this.findViewById(R.id.ratingbar1);
ratingbar02 = (RatingBar) this.findViewById(R.id.ratingbar2);
textview02 = (TextView) this.findViewById(R.id.text02);
// 给ratingbar加监听
ratingbar01
.setOnRatingBarChangeListener(new OnRatingBarChangeListener() {
@Override
public void onRatingChanged(RatingBar ratingBar,
float rating, boolean fromUser) {
// TODO Auto-generated method stub
final int numStars = ratingbar01.getNumStars();
textview01.setText(getString(R.string.rating_bar) + ""
+ rating + "/" + numStars);
if (indacator.getNumStars() != numStars) {
// 给indacator,以及small设置默认星级
indacator.setNumStars(numStars);
small.setNumStars(numStars);
}
if (indacator.getRating() != rating) {
//把ratingbar01的进度赋给indacator以及small
indacator.setRating(rating);
small.setRating(rating);
}
}
});
ratingbar02
.setOnRatingBarChangeListener(new OnRatingBarChangeListener() {
@Override
public void onRatingChanged(RatingBar ratingBar,
float rating, boolean fromUser) {
// TODO Auto-generated method stub
final int numStar02 = ratingBar.getNumStars();
textview02.setText(getString(R.string.rating_bar) + ""
+ rating + "/" + numStar02);
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
4、ProcessingBar
官方定义:某操作的虚拟进度指示器,可以告知用户已经完成百分比。示例中使用到了线程来展示进度
示例结果:(单击button开始进入)
1)、XML文件
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity"
android:orientation="vertical" >
<TextView
android:id="@+id/text1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world"
android:textColor="@color/red" />
<ProgressBar
android:id="@+id/ProgressBar1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone"
/>
<Button
android:id="@+id/Button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="请单击"/>
</LinearLayout>
2)、.java文件
package com.example.progressbar;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.os.Message;
public class MainActivity extends Activity {
// 新建并初始化xml里面的view,button,progressbar
private TextView textview01 = null;
private Button button01;
private ProgressBar progressbar01;
// 新建计数器
private int intCounter = 0;
// 自定义Handler信息作为识别时间处理
private static final int ON_STOP = 0x108;
private static final int ON_Go = 0x109;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 设置控件对象
textview01 = (TextView) this.findViewById(R.id.text1);
button01 = (Button) this.findViewById(R.id.Button1);
progressbar01 = (ProgressBar) this.findViewById(R.id.ProgressBar1);
// 滚动条的当前值自动在最小到最大值之间来回移动,设置indeterminate赋值false;
progressbar01.setIndeterminate(false);
// 单击按钮后开始运行线程工作
button01.setOnClickListener(new Button.OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
textview01.setText("正在加载中");
progressbar01.setVisibility(View.VISIBLE);
progressbar01.setMax(100);
progressbar01.setProgress(0);
// 新建Handler
Handler myMessageHandler = new Handler() {
};
new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
// 默认0-4运行5次
for (int i = 0; i < 5; i++) {
// 加入异常处理
try {
// 识别加载进度
intCounter = (i + 1) * 80;
// 每运行一次暂停一秒
Thread.sleep(1000);
// 当运行2s后显示运行结果
if (i == 2) {
Message m = new Message();
m.what = MainActivity.ON_STOP;
MainActivity.this.myMessageHandler
.sendMessage(m);
break;
}
else {
Message m = new Message();
m.what = MainActivity.ON_Go;
MainActivity.this.myMessageHandler
.sendMessage(m);
}
} catch (Exception e) {
// 在命令行打印异常信息在程序中出错的位置及原因
e.printStackTrace();
}
};
}
}) {
};
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
private Handler myMessageHandler = new Handler() {
public void handlerMessage(Message m) {
// message处理,分为go以及stop
// 1、如果线程结束
switch (m.what) {
case MainActivity.ON_STOP:
textview01.setText("运行完毕!");
progressbar01.setVisibility(View.GONE);
Thread.currentThread().interrupted();
break;
// 2、如果线程没有结束
case MainActivity.ON_Go:
// 显示进度
progressbar01.setProgress(intCounter);
textview01.setText("正在加载" + "(" + Integer.toString(intCounter)
+ "%)\n" + "Progress:"
+ Integer.getInteger(null, progressbar01.getProgress())
+ "\n" + "Indeterminate:"
+ Boolean.toString(progressbar01.isIndeterminate()));
// 循环结束
break;
}
super.handleMessage(m);
}
};
}
| ||