java – Android ViewGroup.setScaleX()导致视图被剪裁
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – Android ViewGroup.setScaleX()导致视图被剪裁,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1367字,纯文字阅读大概需要2分钟。
内容图文
![java – Android ViewGroup.setScaleX()导致视图被剪裁](/upload/InfoBanner/zyjiaocheng/700/3aff1ae7dd3f4847a1776c90c40be8b7.jpg)
我使用NineOldAndroids库来扩展我的自定义布局.
public class MyLayout extends FrameLayout {
// LayoutParams.MATCH_PARENT and all.
...
@Override
public boolean setPositionAndScale(ViewGroup v, PositionAndScale pas, PointInfo pi) {
...
mScale = pas.getScale();
ViewHelper.setScaleX(this, mScale);
ViewHelper.setScaleY(this, mScale);
}
}
我尝试过FrameLayout和AbsoluteLayout.都具有相同的效果.
当mScale< 1.0缩放/缩放工作但部分布局被剪裁.
mScale = 1.0:
mScale< 1.0:缩放/缩放工作但布局被剪裁
我该如何解决这个问题?
编辑:照片拍摄于ICS.所以我不认为这是NineOldAndroids的问题.
解决方法:
视图的父级必须具有属性android:clipChildren disabled(来自布局文件或使用setClipChildren(false)).
但是使用此方法,您不会在视图剪辑边界之外获得触摸事件.您可以通过从活动中发送它们或编写自定义ViewGroup父级来解决此问题.
我正在使用一个不同的黑客,这似乎适用于我的情况,诀窍是维护自己的转换矩阵.然后,你必须重载很多ViewGroup的方法才能使它工作.例如 :
@Override
protected void dispatchDraw(Canvas canvas) {
Log.d(TAG, "dispatchDraw " + canvas);
canvas.save();
canvas.concat(mMatrix);
super.dispatchDraw(canvas);
canvas.restore();
}
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
Log.d(TAG, "dispatchTouchEvent " + ev);
ev.transform(getInvMatrix()); //
return super.dispatchTouchEvent(ev);
}
private Matrix getInvMatrix()
{
if(!mTmpMatIsInvMat)
mMatrix.invert(mTmpMat);
mTmpMatIsInvMat = true;
return mTmpMat;
}
内容总结
以上是互联网集市为您收集整理的java – Android ViewGroup.setScaleX()导致视图被剪裁全部内容,希望文章能够帮你解决java – Android ViewGroup.setScaleX()导致视图被剪裁所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。