(六)ImageView及其使用 SeekBar及其使用 RatingBar及其使用 ProcessingBar及其使用

学习内容

(作为尝试,学习各位大拿,粘贴了完整版代码,初学者,程序应该还存在许多漏洞。仅作为个人记录,另外贴代码实在太长,考虑之后精简贴出,贴重点部分。)

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);
  }

 };

}

   
  

 

   
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值