无法显示变焦图像,并在Android的相同的用户界面的其他内容?并在、变焦、用户界面、图像

2023-09-06 13:17:51 作者:野酷士

我是新手在Android中能有人帮我,我下面这个教程 ZOOM的ImageView类 我的问题是,我想点击一个ImageView的上单击它会移动到下一个活动,它会显示在上部previous点击活动变焦图像和内容其余部分在该部件的其余部分,但现在我无法加载这里使用此tutorial.Its只是缩放图像我的XML文件

code在这里:

 保护无效的onCreate(包savedInstanceState)
    {

    super.onCreate(savedInstanceState);
    的setContentView(R.layout.sample); //我想给这个布局我该怎么让变焦图像在此布局。
    意向意图= getIntent();
    字符串StringData是= intent.getStringExtra(imageName); //这是图像文件名
    Log.i(StringData是,+ StringData是);

    字符串PACKAGE_NAME = getApplicationContext()getPackageName()。
    。INT imgId = getResources()则getIdentifier(PACKAGE_NAME +:绘制/+ StringData是NULL,NULL);
    的System.out.println(IMG ID ::+ imgId);
    的System.out.println(PACKAGE_NAME ::+ PACKAGE_NAME);
     点阵位图= BitmapFactory.de codeResource(getResources(),imgId);
     TouchImageView触摸=新TouchImageView(本);
    touch.setImageBitmap(位);
    touch.setMaxZoom(4F); //改变变焦的最高水平,默认为3F

    // ImageView的形象=(ImageView的)findViewById(R.id.img1);
    //image.setImageBitmap(bitmap);
    的setContentView(触摸);
}
 

下面是XML:

 < XML版本=1.0编码=UTF-8&GT?;
< LinearLayout中的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
    机器人:方向=垂直
    机器人:layout_width =match_parent
    机器人:layout_height =match_parent>

        < ImageView的
            机器人:ID =@ + ID / IMG1
            机器人:layout_width =FILL_PARENT
            机器人:layout_height =WRAP_CONTENT
            机器人:SRC =@可绘制/ icon_ask_fatwa_one/>

    <的LinearLayout
        机器人:ID =@ + ID / layout_buttons
        机器人:layout_width =FILL_PARENT
        机器人:layout_height =WRAP_CONTENT
        机器人:方向=横向
        >
    < ImageView的
        机器人:ID =@ + ID / btn_email_fatwa
        机器人:layout_width =FILL_PARENT
        机器人:layout_height =WRAP_CONTENT
        机器人:SRC =@可绘制/电子邮件
        机器人:layout_weight =1/>
     < ImageView的
        机器人:ID =@ + ID / btn_share_fatwa
        机器人:layout_width =FILL_PARENT
        机器人:layout_height =WRAP_CONTENT
        机器人:SRC =@可绘制/ share_fatwa
        机器人:layout_weight =1/>
        < ImageView的
        机器人:ID =@ + ID / btn_save_fatwa
        机器人:layout_width =FILL_PARENT
        机器人:layout_height =WRAP_CONTENT
        机器人:SRC =@可绘制/ save_fatwa
        机器人:layout_weight =1/>

    < / LinearLayout中>

< / LinearLayout中>
 

解决方案 给 Android 开发者的第一堂课

正在使用的setContentView(触摸); 是隐藏你的previously设置的setContentView(R.layout.sample); 所有你需要做的就是把这个 TouchImageView 在这样的 sample.xml中布局文件。

 < XML版本=1.0编码=UTF-8&GT?;
< LinearLayout中的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
机器人:方向=垂直
机器人:layout_width =match_parent
机器人:layout_height =match_parent>

    < ImageView的
        机器人:ID =@ + ID / IMG1
        机器人:layout_width =FILL_PARENT
        机器人:layout_height =WRAP_CONTENT
        机器人:SRC =@可绘制/ icon_ask_fatwa_one/>

   < com.example.zoomimagesample.TouchImageView
        机器人:ID =@ + ID / YOUR_DESIRED_ID
        机器人:layout_width =FILL_PARENT
        机器人:layout_height =OUR_DESIRED_HEIGHT
         />

<的LinearLayout
    机器人:ID =@ + ID / layout_buttons
    机器人:layout_width =FILL_PARENT
    机器人:layout_height =WRAP_CONTENT
    机器人:方向=横向
    >
< ImageView的
    机器人:ID =@ + ID / btn_email_fatwa
    机器人:layout_width =FILL_PARENT
    机器人:layout_height =WRAP_CONTENT
    机器人:SRC =@可绘制/电子邮件
    机器人:layout_weight =1/>
 < ImageView的
    机器人:ID =@ + ID / btn_share_fatwa
    机器人:layout_width =FILL_PARENT
    机器人:layout_height =WRAP_CONTENT
    机器人:SRC =@可绘制/ share_fatwa
    机器人:layout_weight =1/>
    < ImageView的
    机器人:ID =@ + ID / btn_save_fatwa
    机器人:layout_width =FILL_PARENT
    机器人:layout_height =WRAP_CONTENT
    机器人:SRC =@可绘制/ save_fatwa
    机器人:layout_weight =1/>

< / LinearLayout中>
 

并修改的onCreate(...)这样的方法:

 保护无效的onCreate(包savedInstanceState)
{

super.onCreate(savedInstanceState);
的setContentView(R.layout.sample); //我想给这个布局我该怎么让变焦图像在此布局。
意向意图= getIntent();
字符串StringData是= intent.getStringExtra(imageName); //这是图像文件名
Log.i(StringData是,+ StringData是);

字符串PACKAGE_NAME = getApplicationContext()getPackageName()。
。INT imgId = getResources()则getIdentifier(PACKAGE_NAME +:绘制/+ StringData是NULL,NULL);
的System.out.println(IMG ID ::+ imgId);
的System.out.println(PACKAGE_NAME ::+ PACKAGE_NAME);
点阵位图= BitmapFactory.de codeResource(getResources(),imgId);
TouchImageView触摸=(TouchImageView)findViewById(R.id.ID_THAT_YOU_ASSIGNED_TO_THE_TOUCH_IMAGE)查看);
touch.setImageBitmap(位);
touch.setMaxZoom(4F); //改变变焦的最高水平,默认为3F

// ImageView的形象=(ImageView的)findViewById(R.id.img1);
//image.setImageBitmap(bitmap);
//的setContentView(触摸);
}
 

编辑: 你缺少用于通过XML来调用您的视图构造函数:

下面添加这两个构造函数:

 公共TouchImageView(上下文的背景下,ATTRS的AttributeSet,诠释defStyle){
   超(背景下,ATTRS,defStyle);
   super.setClickable(真正的);
   this.context =背景;
   mScaleDetector =新ScaleGestureDetector(上下文,新ScaleListener());
   matrix.setTranslate(1F,1F);
   M =新的浮动[9];
   setImageMatrix(矩阵);
   setScaleType(ScaleType.MATRIX);

   setOnTouchListener(新OnTouchListener(){

       @覆盖
       公共布尔onTouch(视图V,MotionEvent事件){
           mScaleDetector.onTouchEvent(事件);

           matrix.getValues​​(米);
           浮法X = M [Matrix.MTRANS_X]
           浮动Y = M [Matrix.MTRANS_Y]
           的PointF CURR =新的PointF(event.getX(),event.getY());

           开关(event.getAction()){
               案例MotionEvent.ACTION_DOWN:
                   last.set(event.getX(),event.getY());
                   start.set(最后一次);
                   模式=阻力;
                   打破;
               案例MotionEvent.ACTION_POINTER_DOWN:
                   last.set(event.getX(),event.getY());
                   start.set(最后一次);
                   模式=变焦;
                   打破;
               案例MotionEvent.ACTION_MOVE:
                   如果(模式==变焦||(模式== DRAG&功放;&安培; saveScale> minScale)){
                       Log.d(******,ZOOM或拖动);
                       浮DELTAX = curr.x  -  last.x;
                       漂浮移动deltaY = curr.y  -  last.y;
                       浮scaleWidth = Math.round(origWidth * saveScale);
                       浮scaleHeight = Math.round(origHeight * saveScale);
                       如果(scaleWidth<宽度){
                           DELTAX = 0;
                           如果(Y +移动deltaY大于0)
                               移动deltaY = -y;
                           否则,如果(Y +移动deltaY<汉字)
                               移动deltaY =  - (Y +底部);
                       }否则如果(scaleHeight<高度){
                           移动deltaY = 0;
                           如果(X + DELTAX大于0)
                               DELTAX = -x;
                           否则,如果(X + DELTAX<右汉字)
                               DELTAX =  - (X +右);
                       } 其他 {
                           如果(X + DELTAX大于0)
                               DELTAX = -x;
                           否则,如果(X + DELTAX<右汉字)
                               DELTAX =  - (X +右);

                           如果(Y +移动deltaY大于0)
                               移动deltaY = -y;
                           否则,如果(Y +移动deltaY<汉字)
                               移动deltaY =  - (Y +底部);
                       }
                       matrix.postTranslate(DELTAX,移动deltaY);
                       last.set(curr.x,curr.y);
                   }否则,如果(模式== DRAG&功放;&安培; saveScale == minScale){
                       Log.d(******,拖);
                   }
                   打破;

               案例MotionEvent.ACTION_UP:
                   模式=无;
                   INT xDiff =(INT)Math.abs(curr.x  -  start.x);
                   INT yDiff =(INT)Math.abs(curr.y  -  start.y);
                   如果(xDiff<点击&功放;&安培; yDiff<点击)
                       performClick();
                   打破;

               案例MotionEvent.ACTION_POINTER_UP:
                   模式=无;
                   打破;
           }
           setImageMatrix(矩阵);
           无效();
           返回true; //表示事件已经被处理
       }

   });
  }

  公共TouchImageView(上下文的背景下,ATTRS的AttributeSet){
   超(背景下,ATTRS);
   super.setClickable(真正的);
   this.context =背景;
   mScaleDetector =新ScaleGestureDetector(上下文,新ScaleListener());
   matrix.setTranslate(1F,1F);
   M =新的浮动[9];
   setImageMatrix(矩阵);
   setScaleType(ScaleType.MATRIX);

   setOnTouchListener(新OnTouchListener(){

       @覆盖
       公共布尔onTouch(视图V,MotionEvent事件){
           mScaleDetector.onTouchEvent(事件);

           matrix.getValues​​(米);
           浮法X = M [Matrix.MTRANS_X]
           浮动Y = M [Matrix.MTRANS_Y]
           的PointF CURR =新的PointF(event.getX(),event.getY());

           开关(event.getAction()){
               案例MotionEvent.ACTION_DOWN:
                   last.set(event.getX(),event.getY());
                   start.set(最后一次);
                   模式=阻力;
                   打破;
               案例MotionEvent.ACTION_POINTER_DOWN:
                   last.set(event.getX(),event.getY());
                   start.set(最后一次);
                   模式=变焦;
                   打破;
               案例MotionEvent.ACTION_MOVE:
                   如果(模式==变焦||(模式== DRAG&功放;&安培; saveScale> minScale)){
                       Log.d(******,ZOOM或拖动);
                       浮DELTAX = curr.x  -  last.x;
                       漂浮移动deltaY = curr.y  -  last.y;
                       浮scaleWidth = Math.round(origWidth * saveScale);
                       浮scaleHeight = Math.round(origHeight * saveScale);
                       如果(scaleWidth<宽度){
                           DELTAX = 0;
                           如果(Y +移动deltaY大于0)
                               移动deltaY = -y;
                           否则,如果(Y +移动deltaY<汉字)
                               移动deltaY =  - (Y +底部);
                       }否则如果(scaleHeight<高度){
                           移动deltaY = 0;
                           如果(X + DELTAX大于0)
                               DELTAX = -x;
                           否则,如果(X + DELTAX<右汉字)
                               DELTAX =  - (X +右);
                       } 其他 {
                           如果(X + DELTAX大于0)
                               DELTAX = -x;
                           否则,如果(X + DELTAX<右汉字)
                               DELTAX =  - (X +右);

                           如果(Y +移动deltaY大于0)
                               移动deltaY = -y;
                           否则,如果(Y +移动deltaY<汉字)
                               移动deltaY =  - (Y +底部);
                       }
                       matrix.postTranslate(DELTAX,移动deltaY);
                       last.set(curr.x,curr.y);
                   }否则,如果(模式== DRAG&功放;&安培; saveScale == minScale){
                       Log.d(******,拖);
                   }
                   打破;

               案例MotionEvent.ACTION_UP:
                   模式=无;
                   INT xDiff =(INT)Math.abs(curr.x  -  start.x);
                   INT yDiff =(INT)Math.abs(curr.y  -  start.y);
                   如果(xDiff<点击&功放;&安培; yDiff<点击)
                       performClick();
                   打破;

               案例MotionEvent.ACTION_POINTER_UP:
                   模式=无;
                   打破;
           }
           setImageMatrix(矩阵);
           无效();
           返回true; //表示事件已经被处理
       }

   });
 }
 

我希望这有助于。

i am newbie in android can someone please help me,i am following this tutorial ZOOM IMAGEVIEW CLASS my problem is that i want to click on an imageview on clicking it will move to next activity that will show previous clicked activity zoom image in upper part and rest of contents in rest of the part but right now i am failed to load my XML file here by using this tutorial.Its just zooming the image

Code here:

 protected void onCreate(Bundle savedInstanceState)
    {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.sample); // i want to show this layout how can i show zoom image in this layout.
    Intent intent = getIntent();
    String stringData = intent.getStringExtra("imageName");//this is image file name
    Log.i("stringData",""+stringData);

    String PACKAGE_NAME = getApplicationContext().getPackageName();
    int imgId = getResources().getIdentifier(PACKAGE_NAME+":drawable/"+stringData , null, null);
    System.out.println("IMG ID :: "+imgId);
    System.out.println("PACKAGE_NAME :: "+PACKAGE_NAME);
     Bitmap bitmap = BitmapFactory.decodeResource(getResources(),imgId);
     TouchImageView touch = new TouchImageView(this);
    touch.setImageBitmap(bitmap);
    touch.setMaxZoom(4f); //change the max level of zoom, default is 3f

    //ImageView image = (ImageView)findViewById(R.id.img1);
    //image.setImageBitmap(bitmap);
    setContentView(touch);
}

Here is the Xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

        <ImageView
            android:id="@+id/img1"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:src="@drawable/icon_ask_fatwa_one" />

    <LinearLayout 
        android:id="@+id/layout_buttons"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        >
    <ImageView 
        android:id="@+id/btn_email_fatwa"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:src="@drawable/email"
        android:layout_weight="1"/>    
     <ImageView 
        android:id="@+id/btn_share_fatwa"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:src="@drawable/share_fatwa"
        android:layout_weight="1"/> 
        <ImageView 
        android:id="@+id/btn_save_fatwa"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:src="@drawable/save_fatwa"
        android:layout_weight="1"/>    

    </LinearLayout>    

</LinearLayout>

解决方案

You are using setContentView(touch); that is hiding your previously setup of setContentView(R.layout.sample); All you need do is to put this TouchImageView in your sample.xml Layout file like this.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent" >

    <ImageView
        android:id="@+id/img1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:src="@drawable/icon_ask_fatwa_one" />

   <com.example.zoomimagesample.TouchImageView
        android:id="@+id/YOUR_DESIRED_ID"
        android:layout_width="fill_parent"
        android:layout_height="OUR_DESIRED_HEIGHT"
         />

<LinearLayout 
    android:id="@+id/layout_buttons"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    >
<ImageView 
    android:id="@+id/btn_email_fatwa"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:src="@drawable/email"
    android:layout_weight="1"/>    
 <ImageView 
    android:id="@+id/btn_share_fatwa"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:src="@drawable/share_fatwa"
    android:layout_weight="1"/> 
    <ImageView 
    android:id="@+id/btn_save_fatwa"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:src="@drawable/save_fatwa"
    android:layout_weight="1"/>    

</LinearLayout>    

And edit your onCreate(...) method like this:

protected void onCreate(Bundle savedInstanceState)
{

super.onCreate(savedInstanceState);
setContentView(R.layout.sample); // i want to show this layout how can i show zoom image in this layout.
Intent intent = getIntent();
String stringData = intent.getStringExtra("imageName");//this is image file name
Log.i("stringData",""+stringData);

String PACKAGE_NAME = getApplicationContext().getPackageName();
int imgId = getResources().getIdentifier(PACKAGE_NAME+":drawable/"+stringData , null, null);
System.out.println("IMG ID :: "+imgId);
System.out.println("PACKAGE_NAME :: "+PACKAGE_NAME);
Bitmap bitmap = BitmapFactory.decodeResource(getResources(),imgId);
TouchImageView touch = (TouchImageView)findViewById(R.id.ID_THAT_YOU_ASSIGNED_TO_THE_TOUCH_IMAGE)VIEW);
touch.setImageBitmap(bitmap);
touch.setMaxZoom(4f); //change the max level of zoom, default is 3f

//ImageView image = (ImageView)findViewById(R.id.img1);
//image.setImageBitmap(bitmap);
//setContentView(touch);
}

EDIT : You are missing the constructors that is used to invoke your View via XML:

Here add these two constructors:

public TouchImageView(Context context, AttributeSet attrs, int defStyle) {
   super(context, attrs, defStyle);
   super.setClickable(true);
   this.context = context;
   mScaleDetector = new ScaleGestureDetector(context, new ScaleListener());
   matrix.setTranslate(1f, 1f);
   m = new float[9];
   setImageMatrix(matrix);
   setScaleType(ScaleType.MATRIX);

   setOnTouchListener(new OnTouchListener() {

       @Override
       public boolean onTouch(View v, MotionEvent event) {
           mScaleDetector.onTouchEvent(event);

           matrix.getValues(m);
           float x = m[Matrix.MTRANS_X];
           float y = m[Matrix.MTRANS_Y];
           PointF curr = new PointF(event.getX(), event.getY());

           switch (event.getAction()) {
               case MotionEvent.ACTION_DOWN:
                   last.set(event.getX(), event.getY());
                   start.set(last);
                   mode = DRAG;
                   break;
               case MotionEvent.ACTION_POINTER_DOWN:
                   last.set(event.getX(), event.getY());
                   start.set(last);
                   mode = ZOOM;
                   break;
               case MotionEvent.ACTION_MOVE:
                   if (mode == ZOOM || (mode == DRAG && saveScale > minScale)) {
                       Log.d("******", "ZOOM OR DRAG");
                       float deltaX = curr.x - last.x;
                       float deltaY = curr.y - last.y;
                       float scaleWidth = Math.round(origWidth * saveScale);
                       float scaleHeight = Math.round(origHeight * saveScale);
                       if (scaleWidth < width) {
                           deltaX = 0;
                           if (y + deltaY > 0)
                               deltaY = -y;
                           else if (y + deltaY < -bottom)
                               deltaY = -(y + bottom);
                       } else if (scaleHeight < height) {
                           deltaY = 0;
                           if (x + deltaX > 0)
                               deltaX = -x;
                           else if (x + deltaX < -right)
                               deltaX = -(x + right);
                       } else {
                           if (x + deltaX > 0)
                               deltaX = -x;
                           else if (x + deltaX < -right)
                               deltaX = -(x + right);

                           if (y + deltaY > 0)
                               deltaY = -y;
                           else if (y + deltaY < -bottom)
                               deltaY = -(y + bottom);
                       }
                       matrix.postTranslate(deltaX, deltaY);
                       last.set(curr.x, curr.y);
                   }else if(mode == DRAG && saveScale == minScale) {
                       Log.d("******", "DRAG");
                   }
                   break;

               case MotionEvent.ACTION_UP:
                   mode = NONE;
                   int xDiff = (int) Math.abs(curr.x - start.x);
                   int yDiff = (int) Math.abs(curr.y - start.y);
                   if (xDiff < CLICK && yDiff < CLICK)
                       performClick();
                   break;

               case MotionEvent.ACTION_POINTER_UP:
                   mode = NONE;
                   break;
           }
           setImageMatrix(matrix);
           invalidate();
           return true; // indicate event was handled
       }

   });
  }

  public TouchImageView(Context context, AttributeSet attrs) {
   super(context, attrs);
   super.setClickable(true);
   this.context = context;
   mScaleDetector = new ScaleGestureDetector(context, new ScaleListener());
   matrix.setTranslate(1f, 1f);
   m = new float[9];
   setImageMatrix(matrix);
   setScaleType(ScaleType.MATRIX);

   setOnTouchListener(new OnTouchListener() {

       @Override
       public boolean onTouch(View v, MotionEvent event) {
           mScaleDetector.onTouchEvent(event);

           matrix.getValues(m);
           float x = m[Matrix.MTRANS_X];
           float y = m[Matrix.MTRANS_Y];
           PointF curr = new PointF(event.getX(), event.getY());

           switch (event.getAction()) {
               case MotionEvent.ACTION_DOWN:
                   last.set(event.getX(), event.getY());
                   start.set(last);
                   mode = DRAG;
                   break;
               case MotionEvent.ACTION_POINTER_DOWN:
                   last.set(event.getX(), event.getY());
                   start.set(last);
                   mode = ZOOM;
                   break;
               case MotionEvent.ACTION_MOVE:
                   if (mode == ZOOM || (mode == DRAG && saveScale > minScale)) {
                       Log.d("******", "ZOOM OR DRAG");
                       float deltaX = curr.x - last.x;
                       float deltaY = curr.y - last.y;
                       float scaleWidth = Math.round(origWidth * saveScale);
                       float scaleHeight = Math.round(origHeight * saveScale);
                       if (scaleWidth < width) {
                           deltaX = 0;
                           if (y + deltaY > 0)
                               deltaY = -y;
                           else if (y + deltaY < -bottom)
                               deltaY = -(y + bottom);
                       } else if (scaleHeight < height) {
                           deltaY = 0;
                           if (x + deltaX > 0)
                               deltaX = -x;
                           else if (x + deltaX < -right)
                               deltaX = -(x + right);
                       } else {
                           if (x + deltaX > 0)
                               deltaX = -x;
                           else if (x + deltaX < -right)
                               deltaX = -(x + right);

                           if (y + deltaY > 0)
                               deltaY = -y;
                           else if (y + deltaY < -bottom)
                               deltaY = -(y + bottom);
                       }
                       matrix.postTranslate(deltaX, deltaY);
                       last.set(curr.x, curr.y);
                   }else if(mode == DRAG && saveScale == minScale) {
                       Log.d("******", "DRAG");
                   }
                   break;

               case MotionEvent.ACTION_UP:
                   mode = NONE;
                   int xDiff = (int) Math.abs(curr.x - start.x);
                   int yDiff = (int) Math.abs(curr.y - start.y);
                   if (xDiff < CLICK && yDiff < CLICK)
                       performClick();
                   break;

               case MotionEvent.ACTION_POINTER_UP:
                   mode = NONE;
                   break;
           }
           setImageMatrix(matrix);
           invalidate();
           return true; // indicate event was handled
       }

   });
 }

I hope this helps.

 
精彩推荐
图片推荐