2016-04-27 97 views
-1

我找到了我的问题的解决方案,但不满意他们。 我创建了一个android库,显示广告视图布局巫婆是,并知道我想统一调用此布局,但无法找到任何解决方案,请任何人都帮助我我怎样才能称我的布局统一?如何在Unity中调用Android布局?

public class RedeemLayout extends LinearLayout implements View.OnClickListener,HttpCallBacks { 
    public Dialog  dialogBox; 
    public ImageButton close; 
    public ImageView advert; 
    public TextView location_text; 
    TextView tv_massagetext; 
    EditText et_redeemdetial; 
    Button  btn_redem; 
    ImageButton btn_closead; 
    DeviceInfo device = new DeviceInfo(); 
    String   adClickUrl; 
    HttpNetworkCalls httpNetworkCalls; 
    Context   context; 
    Activity   activity; 
    ImageView  bmImage; 
    FrameLayout  redeemLayout; 
    AdInfo ad; 
    private AdInfo adInfo; 
    private UserInfo user; 

    public RedeemLayout(Context context) { 
     super(context); 
     initialize(context); 
     this.context = context; 
    } 

    public RedeemLayout(Activity activity, Context context) { 
     super(context); 
     initialize(context); 
     this.context = context; 
     this.activity = activity; 
    } 

    public RedeemLayout(Context context, AttributeSet attr) { 

     super(context, attr); 
     initialize(context); 
     this.context = context; 

    } 

    private void initialize(Context context) { 
     inflate(context, R.layout.ad_lyout, this); 
     tv_massagetext = (TextView) findViewById(R.id.massagetext); 
     et_redeemdetial = (EditText) findViewById(R.id.redeemdetail); 
     btn_redem = (Button) findViewById(R.id.btn_redeem); 
     btn_closead = (ImageButton) findViewById(R.id.btn_CloseFullScreenAd); 
     bmImage = (ImageView) findViewById(R.id.adimage); 
     redeemLayout = (FrameLayout) findViewById(R.id.redeemLayout); 


     httpNetworkCalls = new HttpNetworkCalls(this); 
     btn_redem.setOnClickListener(this); 
     btn_closead.setOnClickListener(this); 


     DownloadAdAccordingToLocation(); 

    } 

    public void onClick(View view) { 

     int i = view.getId(); 
     if (i == R.id.btn_redeem) { 
      Toast.makeText(getContext(), "Thanks for Redeem You will get Massage soon...", Toast.LENGTH_LONG).show(); 
      Map<String, String> data = new HashMap<>(); 
      data.put("ad_id",ad.getAdId()); 
      data.put("app_id","1"); 
      data.put("location","lahore"); 
      data.put("session","1"); 

      try { 
       httpNetworkCalls.post(data, API.UPDATE_IMPRESSIONS); 
       // call AsynTask to perform network operation on separate thread 
      } catch (Exception e) { 
       e.printStackTrace(); 

      } 

      // call AsynTask to perform network operation on separate thread 
     } 
     if (i == R.id.btn_CloseFullScreenAd) { 
      redeemLayout.removeAllViews(); 
      redeemLayout.setVisibility(View.GONE); 
      Map<String, String> data = new HashMap<>(); 
      data.put("ad_id",ad.getAdId()); 
      data.put("app_id","1"); 
      data.put("location","lahore"); 
      data.put("session","1"); 
      Toast.makeText(getContext(), "Thanks for Redeem You will get Massage soon...", Toast.LENGTH_LONG).show(); 

      try { 
       httpNetworkCalls.post(data, API.UPDATE_IMPRESSIONS); 
       // call AsynTask to perform network operation on separate thread 
      } catch (Exception e) { 
       e.printStackTrace(); 

      } 
     } 

    } 

    private void DownloadAdAccordingToLocation() { 

     try { 
      httpNetworkCalls.get(API.RANDOM_ADVERTISEMENT); 
     } catch (IOException e) { 

      e.printStackTrace(); 
     } 
    } 

    public void adButtonClicked(View v) { 
     // FullScreenAdDialog db = new FullScreenAdDialog(this, ad, updateAdClick); 
     // db.show(); 
//  Intent x = new Intent(xcontext, AdActivity.class); 
//  x.putExtra("image_link", ad.getImage_link()); 
//  x.putExtra("url", ad.getUrl()); 
//  x.putExtra("adid", ad.getAdId()); 
//  x.putExtra("adclickurl", updateAdClick); 
//  startActivity(x); 

    } 

    @Override 
    public void HttpResponse(final int apiCode, final JSONObject response, final boolean isSuccess) { 

     activity.runOnUiThread(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        if (apiCode == API.RANDOM_ADVERTISEMENT) { 
         if (response.has("networkError")) { 
          Log.e("Error", response.getString("networkError")); 
         } else { 
          ad = AdInfo.fromJson(response); 
          if (ad.isSuccess()) { 

           Picasso.Builder builder = new Picasso.Builder(context); 
           builder.listener(new Picasso.Listener() { 

            @Override 
            public void onImageLoadFailed(Picasso picasso, Uri uri, Exception exception) { 
             redeemLayout.removeAllViews(); 
             redeemLayout.setVisibility(View.GONE); 
            } 

           }); 
           Picasso pic = builder.build(); 
           pic.load(ad.getImage_url()).into(bmImage); 

//      Picasso.with(context) 
//        .load(ad.getImage_url()) 
//        .error(R.drawable.imagecross) 
//        .into(bmImage); 
          } else { 
           Log.e("Error", response.getString("parseError")); 

          } 
         } 
        } 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
      } 
     }); 


    } 

并在android应用程序中调用我的库像这样。

public class MainActivity extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     RelativeLayout layout= (RelativeLayout)findViewById(R.id.test); 
     RedeemLayout redeemLayout= new RedeemLayout(this, this); 
     redeemLayout.setGravity(Gravity.CENTER); 
     layout.addView(redeemLayout); 
    } 
} 
+1

请精确您的问题。这太宽泛了。添加代码,你已经尝试过。如果你不安全,请参阅http://stackoverflow.com/help/how-to-ask – TMob

+0

我添加了代码以及我的广告库布局,我无法找到在统一调用它的愿望教程:( –

回答

1

这是更unity3d的问题。你不能直接调用你的布局,你只能发送消息给android代码。阅读AndroidJavaClass和AndroidJavaObject的Unity3d脚本文档(或谷歌代码)。

从Android的角度来看,我认为你应该实现某种你可以从统一调用的静态方法,它应该在你的广告引擎处理的事件总线中广播或发送事件。代码

统一部分应与此类似:

AndroidJavaClass javaClass = new AndroidJavaClass("com.mypackage.MyClassWithMyStaticMethod"); 
javaClass.getStatic<AndroidJavaObject>("MyStaticMethod", 42); 

的Android MyClassWithMyStaticMethod类应该实现:

public static void MyStaticMethid(int param) {...} 

检查这个文档:AndroidJavaClass

+0

编辑我的图书馆代码 –

+0

@ArslanYasin尼斯,但你想调用您的看法? PS。添加网络调用等内部布局不是最好的想法。 – 3mpty

+0

我想统一调用这个布局这是我的广告网络,我想要建立一个统一的插件, –