您的位置:首页 > 其它

(一)NotBoringActionBar之自定义组件ParallaxImageView

2015-04-04 11:42 351 查看

自定义组件ParallaxImageView

效果图如下:



关键API:canvas.translate(float dx, float dy),想要慢慢的移动图片,其实就是移动画布的一个过程,因为图片就是画在画布(Canvas)上面的。

Android View的坐标系:

(0,0)-------------------->(x最大,0)
|
|
|
|
|
|
|
|
|
|
(y最大,0)


ParallaxImageView类代码:

public class ParallaxImageView extends ImageView {

private int mCurrentTranslation;

public ParallaxImageView(Context context) {
super(context);
}

public ParallaxImageView(Context context, AttributeSet attrs) {
super(context, attrs);
}

public ParallaxImageView(Context context, AttributeSet attrs,
int defStyleAttr) {
super(context, attrs, defStyleAttr);
}

public void setCurrentTranslation(int translation){
this.mCurrentTranslation = translation;
invalidate();
}

@Override
public void onDraw(Canvas canvas){
canvas.save();
canvas.translate(0, -mCurrentTranslation / 2);
super.onDraw(canvas);
canvas.restore();
}

}


最后我们在MainActivity中使用Handler不断的post这个设置translation值的任务就行了:

private Handler mHandler = new Handler();

private int translation = 0;

private final Runnable mTranslateRunnable = new Runnable(){
@Override
public void run() {
mImageView.setCurrentTranslation((translation++) % 100);
mHandler.postDelayed(this, 100);
}
};

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

mImageView = (ParallaxImageView)
findViewById(R.id.parallaxImageView1);
mHandler.postDelayed(mTranslateRunnable, 300);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: