android click on textview drawable,Android: TextView添加图片(drawable)及动画实例

1、首先是界面的UI layout: main.xml(片段)

Android:text="@string/start_button"

android:id="@+id/startButton"

android:layout_width="wrap_content"

android:layout_height="wrap_content">

android:text="@string/finish_button"

android:id="@+id/finishButton"

android:layout_width="wrap_content"

android:layout_height="wrap_content">

android:id="@+id/statusTextView"

android:layout_width="fill_parent"

android:layout_height="70px"

android:textColor="#FFFFFFFF"

android:textSize="18px"

android:paddingLeft="30px"

android:gravity="center_vertical">

2、Activity代码:

public class TextViewDemo extends Activity {

private TextView statusTextView;

private Drawable statusIcon;

private Drawable arrowIcon;

private LayerDrawable layerDrawable;

private Animation anim_start;

private Animation anim_finish;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

init();

}

private void init(){

Button startButton = (Button)findViewById(R.id.startButton);

startButton.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

setStartStatus();

}

});

Button finishButton = (Button)findViewById(R.id.finishButton);

finishButton.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

setFinishStstus();

}

});

statusTextView = (TextView)findViewById(R.id.statusTextView);

statusTextView.setCompoundDrawablePadding(10);

anim_start = AnimationUtils.loadAnimation(this, R.anim.status_view_enter);

anim_finish = AnimationUtils.loadAnimation(this, R.anim.status_view_enter);

statusIcon = zoomDrawable(getResources().getDrawable(R.drawable.status_icon),60, 60) ;

arrowIcon = zoomDrawable(getResources().getDrawable(R.drawable.arrow), 40, 30);

Drawable[] icons = new Drawable[2];

icons[0] = statusIcon;

icons[1] = arrowIcon;

layerDrawable = new LayerDrawable(icons);

layerDrawable.setLayerInset(0, 0, 0, 20, 0);

layerDrawable.setLayerInset(1, 40, 20, 0, 0);

}

private void setStartStatus(){

statusTextView.setText(R.string.start_text);

statusTextView.setCompoundDrawablesWithIntrinsicBounds(layerDrawable.getDrawable(0), null, null, null);

statusTextView.startAnimation(anim_start);

}

private void setFinishStstus(){

statusTextView.setText(R.string.finish_text);

statusTextView.setCompoundDrawablesWithIntrinsicBounds(layerDrawable, null, null, null);

statusTextView.startAnimation(anim_finish);

}

private Drawable zoomDrawable(Drawable drawable, int w, int h)

{

int width = drawable.getIntrinsicWidth();

int height= drawable.getIntrinsicHeight();

// drawable转换成bitmap

Bitmap oldbmp = drawableToBitmap(drawable);

// 创建操作图片用的Matrix对象

Matrix matrix = new Matrix();

// 计算缩放比例

float scaleWidth = ((float)w / width);

float scaleHeight = ((float)h / height);

// 设置缩放比例

matrix.postScale(scaleWidth, scaleHeight);

// 建立新的bitmap,其内容是对原bitmap的缩放后的图

Bitmap newbmp = Bitmap.createBitmap(oldbmp, 0, 0, width, height, matrix, true);

// 把bitmap转换成drawable并返回

return new BitmapDrawable(newbmp);

}

/*  drawable 转换成bitmap */

private Bitmap drawableToBitmap(Drawable drawable)

{

int width = drawable.getIntrinsicWidth();

int height = drawable.getIntrinsicHeight();

// 取drawable的颜色格式

Bitmap.Config config =

drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888

: Bitmap.Config.RGB_565;

// 建立对应bitmap

Bitmap bitmap = Bitmap.createBitmap(width, height, config);

// 建立对应bitmap的画布

Canvas canvas = new Canvas(bitmap);

drawable.setBounds(0, 0, width, height);

// 把drawable内容画到画布中

drawable.draw(canvas);

return bitmap;

}

}

3、定义动画文件

accelerate_interpolator.xml

decelerate_interpolator.xml

status_view_enter.xml

android:duration="1000"/>

android:duration="1000" />

status_view_exit.xml

android:startOffset="100" android:duration="1000"/>

android:startOffset="100" android:duration="1000" />

说明:zoomDrawable()方法和drawableToBitmap()来源网络。0b1331709591d260c1c78e86d0c51c18.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值