2012-01-14 65 views
0

我的xml文件是這樣的,我想從類中設置它programmaticaly。到目前爲止我有一些問題。xml到java翻譯

我的XML代碼:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:background="#ffffff"> 

    <Button 
     android:id="@+id/button_weather9" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:text="Back" /> 

    <ImageView 
     android:id="@+id/weather_icon" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:layout_gravity="center_horizontal" 
     android:scaleType="fitXY" 
     android:src="@drawable/weather1" /> 
</LinearLayout> 

到目前爲止,這是我的Java代碼:

final LinearLayout test2 = new LinearLayout(this); 
     test2.setOrientation(LinearLayout.VERTICAL); 
     test2.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT)); 

     final Button Back = new Button(this); 
     Back.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT)); 
     Back.setText("Back"); 

     test2.addView(Back); 

     final LoaderImageView image = new LoaderImageView(this, ImageUrl); 
     image.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT)); 

我不知道如何實現Java的scaleType屬性。

任何人都可以幫助我嗎?我已經在2天前回答了它,但答案是不可接受的。我已經搜查,但我找不到答案。我已經嘗試過這一點,但它不工作:

image.ScaleType(FILL) 

編輯:我的形象是一個擴展的圖像,因此image.ScaleTyoe有該方法來定義一個ImageLoader的。誰能幫我?

這是我的代碼:

import java.io.IOException; 
import java.net.MalformedURLException; 

import android.content.Context; 
import android.graphics.drawable.Drawable; 
import android.os.Handler; 
import android.os.Message; 
import android.os.Handler.Callback; 
import android.util.AttributeSet; 
import android.view.View; 
import android.widget.ImageView; 
import android.widget.ImageView.ScaleType; 
import android.widget.LinearLayout; 
import android.widget.ProgressBar; 

/** 
* Free for anyone to use, just say thanks and share :-) 
* @author Blundell 
* 
*/ 
public class LoaderImageView extends LinearLayout{ 

    private static final int COMPLETE = 0; 
    private static final int FAILED = 1; 

    private Context mContext; 
    private Drawable mDrawable; 
    private ProgressBar mSpinner; 
    private ImageView mImage; 

    /** 
    * This is used when creating the view in XML 
    * To have an image load in XML use the tag 'image="http://developer.android.com/images/dialog_buttons.png"' 
    * Replacing the url with your desired image 
    * Once you have instantiated the XML view you can call 
    * setImageDrawable(url) to change the image 
    * @param context 
    * @param attrSet 
    */ 
    public LoaderImageView(final Context context, final AttributeSet attrSet) { 
     super(context, attrSet); 
     final String url = attrSet.getAttributeValue(null, "image"); 
     if(url != null){ 
      instantiate(context, url); 
     } else { 
      instantiate(context, null); 
     } 
    } 

    /** 
    * This is used when creating the view programatically 
    * Once you have instantiated the view you can call 
    * setImageDrawable(url) to change the image 
    * @param context the Activity context 
    * @param imageUrl the Image URL you wish to load 
    */ 
    public LoaderImageView(final Context context, final String imageUrl) { 
     super(context); 
     instantiate(context, imageUrl);  
    } 

    /** 
    * First time loading of the LoaderImageView 
    * Sets up the LayoutParams of the view, you can change these to 
    * get the required effects you want 
    */ 
    private void instantiate(final Context context, final String imageUrl) { 
     mContext = context; 

     mImage = new ImageView(mContext); 
     mImage.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); 
     //mImage.setScaleType(ScaleType.FIT_XY); 

     mSpinner = new ProgressBar(mContext); 
     mSpinner.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); 

     mSpinner.setIndeterminate(true); 

     addView(mSpinner); 
     addView(mImage); 

     if(imageUrl != null){ 
      setImageDrawable(imageUrl); 
     } 
    } 

    /** 
    * Set's the view's drawable, this uses the internet to retrieve the image 
    * don't forget to add the correct permissions to your manifest 
    * @param imageUrl the url of the image you wish to load 
    */ 
    public void setImageDrawable(final String imageUrl) { 
     mDrawable = null; 
     mSpinner.setVisibility(View.VISIBLE); 
     mImage.setVisibility(View.GONE); 
     new Thread(){ 
      public void run() { 
       try { 
        mDrawable = getDrawableFromUrl(imageUrl); 
        imageLoadedHandler.sendEmptyMessage(COMPLETE); 
       } catch (MalformedURLException e) { 
        imageLoadedHandler.sendEmptyMessage(FAILED); 
       } catch (IOException e) { 
        imageLoadedHandler.sendEmptyMessage(FAILED); 
       } 
      }; 
     }.start(); 
    } 

    /** 
    * Callback that is received once the image has been downloaded 
    */ 
    private final Handler imageLoadedHandler = new Handler(new Callback() { 
     public boolean handleMessage(Message msg) { 
      switch (msg.what) { 
      case COMPLETE: 
       mImage.setImageDrawable(mDrawable); 
       mImage.setVisibility(View.VISIBLE); 
       mSpinner.setVisibility(View.GONE); 
       break; 
      case FAILED: 
      default: 
       // Could change image here to a 'failed' image 
       // otherwise will just keep on spinning 
       break; 
      } 
      return true; 
     }  
    }); 

    /** 
    * Pass in an image url to get a drawable object 
    * @return a drawable object 
    * @throws IOException 
    * @throws MalformedURLException 
    */ 
    private static Drawable getDrawableFromUrl(final String url) throws IOException, MalformedURLException { 
     return Drawable.createFromStream(((java.io.InputStream)new java.net.URL(url).getContent()), "name"); 
    } 

} 

編輯:解決

回答