2016-09-24 80 views
0

我的目標是從佈局誇大我的自定義視圖佈局氣筒充氣,我的自定義視圖中的FrameLayout而不是

自定義視圖佈局:

<net.rhyboo.com.game_test.Piece xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:scaleType="fitXY" 
    android:id="@+id/piece_view"> 

</net.rhyboo.com.game_test.Piece> 

用這個佈局相關類:

package net.rhyboo.com.game_test; 

import android.content.Context; 
import android.util.AttributeSet; 
import android.widget.ImageView; 

public class Piece extends ImageView { 

    public Piece(Context context, AttributeSet atrs) { 
     super(context,atrs); 
    } 

    public Piece(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
    } 
} 

但是當我嘗試誇大代碼:

//get layout inflater 
LayoutInflater li=(LayoutInflater)activity.getSystemService(Service.LAYOUT_INFLATER_SERVICE); 
//parent view for my custom view 
FrameLayout gf =(FrameLayout)fragment.getView().findViewById(R.id.game_field); 
//inflation attempt 
Piece p=(Piece) li.inflate(R.layout.piece_view,gf); 

我得到了錯誤

java.lang.ClassCastException:android.widget.FrameLayout不能轉換到net.rhyboo.com.game_test.Piece

爲什麼佈局吹氣產生的FrameLayout而類型我的觀點是Piece,它是ImageView的子類?

+0

發佈您的完整xml – Nikhil

+0

'片p =(片)li.inflate(R.layout.piece_view,gf);'這行似乎返回父視圖,而不是一個裏面。嘗試在該視圖上調用'findViewById',如'View view = li.inflate(R.layout.piece_view,gf); P片=(片)view.findViewById(R.id.piece_view);' – Vucko

回答

0

相反的:

//get layout inflater 
LayoutInflater li=(LayoutInflater)activity.getSystemService(Service.LAYOUT_INFLATER_SERVICE); 
//parent view for my custom view 
FrameLayout gf =(FrameLayout)fragment.getView().findViewById(R.id.game_field); 
//inflation attempt 
Piece p=(Piece) li.inflate(R.layout.piece_view,gf); 

嘗試

//get layout inflater 
LayoutInflater li =(LayoutInflater)activity.getSystemService(Service.LAYOUT_INFLATER_SERVICE); 
//parent view for my custom view 
FrameLayout gf = (FrameLayout)fragment.getView().findViewById(R.id.item); 
//inflation attempt 
Piece p = li.inflate(R.layout.piece_view, null); 
gf.addView(p); 

編輯:要查看圖片在原始大小這個參數添加到ImageView

android:scaleType="center" 
+0

謝謝!問題與父參數。實際上我不需要我的視圖有父視圖。不知道layoutInflater可以接受null作爲第二個參數。 現在問題是我的ImageView有0寬度/高度,即使我設置非零大小的位圖作爲content.And後,我將它添加到顯示列表它出現縮放。是否有辦法讓它與原始大小apear? –

+0

@СергейКоджа我編輯我的答案 – piotrek1543

+0

與scaleType =「中心」 我的位圖跳轉到屏幕的中心,當它應該在左上角。也可以在onLayout我可以看到實際位圖大小時,視圖大小1106x736:51x68 無論如何,我找到了設置大小的方法: LinearLayout.LayoutParams parms = new LinearLayout.LayoutParams(bmp.getWidth(),bmp.getHeight()); p.setLayoutParams(parms); –

0

我想你應該嘗試在這兩種方式:

  1. 如果您希望自定義視圖將被添加到框架佈局,然後使用

查看視圖= inflater.inflate(R.layout.your_custom_layout,mFrameLayout,真正的);

  • 如果您不希望您的自定義視圖將被添加到框架佈局,然後使用
  • 查看視圖= inflater.inflate(R.layout.your_custom_layout,父,假);

    在代碼

    可能的校正:

    視圖視圖= li.inflate(R.layout.piece_view,GF);

    查看視圖= inflater.inflate(R.layout.piece_view,gf);

    最後返回視圖;


    根據看來你是錯誤的鑄造框架佈局到您的自定義佈局在這裏

    //通脹嘗試 工件(P)=(件)li.inflate錯誤(R.layout。piece_view,GF);