Android 如何在运行时启用/禁用缩放?
我正在处理图像,我将全屏显示图像,当用户触摸屏幕时,将显示一些控件。所以我想在屏幕上显示控件时禁用缩放 或者有人告诉我如何检测图像是否缩放 活动\u image.xmlAndroid 如何在运行时启用/禁用缩放?,android,zooming,android-imageview,Android,Zooming,Android Imageview,我正在处理图像,我将全屏显示图像,当用户触摸屏幕时,将显示一些控件。所以我想在屏幕上显示控件时禁用缩放 或者有人告诉我如何检测图像是否缩放 活动\u image.xml <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" andro
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center">
<ImageView
android:id="@+id/imgSelected"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:scaleType="centerInside"
android:src="@drawable/placeholder"
android:contentDescription="@string/image" />
<LinearLayout
android:id="@+id/imageControls"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="bottom"
android:weightSum="9"
android:paddingBottom="10dp"
android:paddingLeft="10dp"
android:paddingRight="10dp"
android:orientation="horizontal"
android:visibility="gone"
android:background="@drawable/image_controls">
<Button
android:id="@+id/btnSetAsBackground"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="3"
android:gravity="left|center_vertical"
android:background="#00000000"
style="@style/ImageControls"
android:text="Set"/>
<Button
android:id="@+id/btnFavorite"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="3"
android:background="#00000000"
style="@style/ImageControls"
android:text="Favourite"/>
<Button
android:id="@+id/btnShare"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="3"
android:gravity="right|center_vertical"
android:background="#00000000"
style="@style/ImageControls"
android:text="Share"/>
</LinearLayout>
</RelativeLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/main_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center" >
</LinearLayout>
活动\u zoom.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center">
<ImageView
android:id="@+id/imgSelected"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:scaleType="centerInside"
android:src="@drawable/placeholder"
android:contentDescription="@string/image" />
<LinearLayout
android:id="@+id/imageControls"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="bottom"
android:weightSum="9"
android:paddingBottom="10dp"
android:paddingLeft="10dp"
android:paddingRight="10dp"
android:orientation="horizontal"
android:visibility="gone"
android:background="@drawable/image_controls">
<Button
android:id="@+id/btnSetAsBackground"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="3"
android:gravity="left|center_vertical"
android:background="#00000000"
style="@style/ImageControls"
android:text="Set"/>
<Button
android:id="@+id/btnFavorite"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="3"
android:background="#00000000"
style="@style/ImageControls"
android:text="Favourite"/>
<Button
android:id="@+id/btnShare"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="3"
android:gravity="right|center_vertical"
android:background="#00000000"
style="@style/ImageControls"
android:text="Share"/>
</LinearLayout>
</RelativeLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/main_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center" >
</LinearLayout>
ImageActivity.java
public class ImageActivity extends Activity {
private int imageId;
private int categoryId;
private String imageUrl;
private ZoomView zoomView;
private ImageView imageView;
private LinearLayout main_container;
private boolean controlFlag;
private LinearLayout imageControls;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_zoom);
if (Build.VERSION.SDK_INT < 16) {
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
}
final View convertView = ((LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.activity_image, null, false);
convertView.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
imageControls = (LinearLayout) convertView.findViewById(R.id.imageControls);
controlFlag = false;
zoomView = new ZoomView(this);
imageId = getIntent().getExtras().getInt("image");
categoryId = getIntent().getExtras().getInt("category");
imageView = (ImageView) convertView.findViewById(R.id.imgSelected);
imageUrl = SplashActivity.urlList.get(categoryId).get(imageId);
Log.e(String.valueOf(categoryId),imageUrl);
Picasso
.with(this)
.load(imageUrl)
.placeholder(R.drawable.placeholder)
.into(imageView, new Callback() {
@Override
public void onError() {
}
@Override
public void onSuccess() {
imageView.setScaleType(ScaleType.FIT_CENTER);
}
});
zoomView.addView(convertView);
main_container = (LinearLayout) findViewById(R.id.main_container);
main_container.addView(zoomView);
convertView.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View arg0, MotionEvent arg1) {
if(controlFlag) {
imageControls.setVisibility(View.GONE);
controlFlag = false;
} else {
imageControls.setVisibility(View.VISIBLE);
controlFlag = true;
}
return false;
}
});
}
公共类ImageActivity扩展活动{
私有int-imageId;
私有int类别;
私有字符串imageUrl;
私人ZoomView ZoomView;
私人影像视图;
专用线路布置主集装箱;
私有布尔控制标志;
私人线路布局图像控制;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u缩放);
如果(Build.VERSION.SDK_INT<16){
getWindow().setFlags(WindowManager.LayoutParams.FLAG_全屏,WindowManager.LayoutParams.FLAG_全屏);
}
最终视图convertView=((LayoutFlater)getSystemService(Context.LAYOUT\u INFLATER\u SERVICE)).inflate(R.LAYOUT.activity\u image,null,false);
convertView.setLayoutParams(新的LinearLayout.LayoutParams(LayoutParams.FILL\u父级,LayoutParams.FILL\u父级));
imageControls=(LinearLayout)convertView.findViewById(R.id.imageControls);
controlFlag=false;
zoomView=新的zoomView(此);
imageId=getIntent().getExtras().getInt(“图像”);
categoryId=getIntent().getExtras().getInt(“类别”);
imageView=(imageView)convertView.findViewById(R.id.imgSelected);
imageUrl=SplashActivity.urlList.get(categoryId).get(imageId);
Log.e(String.valueOf(categoryId),imageUrl);
毕加索
.与(此)
.load(图像URL)
.placeholder(R.drawable.placeholder)
.into(imageView,新回调(){
@凌驾
public void onError(){
}
@凌驾
成功时的公共无效(){
imageView.setScaleType(ScaleType.FIT_CENTER);
}
});
添加视图(convertView);
main_container=(LinearLayout)findViewById(R.id.main_container);
main_container.addView(zoomView);
convertView.setOnTouchListener(新的OnTouchListener(){
@凌驾
公共布尔onTouch(视图arg0,运动事件arg1){
if(控制标志){
imageControls.setVisibility(View.GONE);
controlFlag=false;
}否则{
imageControls.setVisibility(View.VISIBLE);
controlFlag=true;
}
返回false;
}
});
}
}
我正在使用android-zoom-view.jar库进行缩放。我只想在图像未缩放时显示LinearLayout(图像控制)
,或者在LinearLayout(图像控制)
可见时禁用缩放。因为ZoomView实例在所有活动上执行缩放,所以imageControls
也将被缩放。这不是一个好的用户友好设计
所以,请帮助我使这个布局更好
谢谢…在zoomview课堂上认为你在使用这个 再加上这个
boolean isZoomEnable= true;
public void setIsZoomEnable(boolean value){
isZoomEnable = value;
}
@Override
public boolean dispatchTouchEvent(final MotionEvent ev) {
if(!isZoomEnable) return false;
// single touch
if (ev.getPointerCount() == 1) {
processSingleTouchEvent(ev);
}
// // double touch
if (ev.getPointerCount() == 2) {
processDoubleTouchEvent(ev);
}
// redraw
getRootView().invalidate();
invalidate();
return true;
}
然后在代码中
convertView.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View arg0, MotionEvent arg1) {
if(controlFlag) {
imageControls.setVisibility(View.GONE);
controlFlag = false;
} else {
imageControls.setVisibility(View.VISIBLE);
controlFlag = true;
}
zoomView.setIsZoomEnable(!controlFlag);
return false;
}
});
在这种情况下,您可以使用额外的属性isZoomEnabled修改zoomview类,并为其设置getter setter,并在控件可见或为true时将其设置为false。然后在zoomview中的dispatchTouchEvent函数中,如果isZoomEnabled为false,则返回false,否则使用当前代码。我是android的新手。您可以指定或给出一个例子吗?如果您不想使用jar,您可以直接使用zoomView类。检查git链接,使用该类而不是lib。您是否可以放置调试点,并查看它是否在dispatchTouchEvent中运行。让我们来看看。