Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何在运行时启用/禁用缩放?_Android_Zooming_Android Imageview - Fatal编程技术网

Android 如何在运行时启用/禁用缩放?

Android 如何在运行时启用/禁用缩放?,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

我正在处理图像,我将全屏显示图像,当用户触摸屏幕时,将显示一些控件。所以我想在屏幕上显示控件时禁用缩放

或者有人告诉我如何检测图像是否缩放

活动\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"
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中运行。让我们来看看。