2015-07-06 29 views
-1

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

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

activity_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> 

activity_zoom.xml

<?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; 
     } 
    }); 
} 

}

我正在使用android-zoom-view.jar库进行缩放。我只想在图像不是变焦时显示LinearLayout (imageControls)或者如果LinearLayout (imageControls)可见,则禁用变焦。由于ZoomView实例对所有活动执行缩放,所以imageControls也将变焦。这不是一个好用户友好的设计。

所以请帮助我使这个布局更好。

谢谢...

+0

井,你可以修改你的ZOOMVIEW这种情况下,带有额外属性的类isZoomEnabled并为其设置getter setter,并在控件可见时将其设置为false否则为true。然后在zoomview中的dispatchTouchEvent函数中,如果isZoomEnabled为false,则返回false否则使用当前代码。 –

+0

我是Android的新手。你能指定还是可以举个例子? – Khan

回答

2

在ZOOMVIEW类想着你使用这个https://github.com/Polidea/android-zoom-view/blob/master/src/pl/polidea/view/ZoomView.java 只需添加这

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; 
    } 
}); 
+0

感谢您的回应,但它不起作用。 :( – Khan

+0

编辑它,试试这个 –

+0

如果你不想使用jar,你可以直接直接使用zoomView类。检查git链接使用那个类而不是lib。 –